Commit 7e6cb7c7a5

Alex Rønne Petersen <alex@alexrp.com>
2025-07-16 13:06:02
compiler: respond to API changes in LLVM 21
1 parent ac20506
src/clang.zig
@@ -973,7 +973,10 @@ pub const TypedefNameDecl = opaque {
 
 pub const FileScopeAsmDecl = opaque {
     pub const getAsmString = ZigClangFileScopeAsmDecl_getAsmString;
-    extern fn ZigClangFileScopeAsmDecl_getAsmString(*const FileScopeAsmDecl) *const StringLiteral;
+    extern fn ZigClangFileScopeAsmDecl_getAsmString(*const FileScopeAsmDecl) [*:0]const u8;
+
+    pub const freeAsmString = ZigClangFileScopeAsmDecl_freeAsmString;
+    extern fn ZigClangFileScopeAsmDecl_freeAsmString([*:0]const u8) void;
 };
 
 pub const TypedefType = opaque {
@@ -1170,6 +1173,7 @@ pub const TypeClass = enum(c_int) {
     FunctionNoProto,
     FunctionProto,
     HLSLAttributedResource,
+    HLSLInlineSpirv,
     InjectedClassName,
     MacroQualified,
     ConstantMatrix,
@@ -1209,7 +1213,6 @@ const StmtClass = enum(c_int) {
     VAArgExprClass,
     UnaryOperatorClass,
     UnaryExprOrTypeTraitExprClass,
-    TypoExprClass,
     TypeTraitExprClass,
     SubstNonTypeTemplateParmPackExprClass,
     SubstNonTypeTemplateParmExprClass,
@@ -1351,11 +1354,13 @@ const StmtClass = enum(c_int) {
     OpenACCInitConstructClass,
     OpenACCExitDataConstructClass,
     OpenACCEnterDataConstructClass,
+    OpenACCCacheConstructClass,
     OpenACCLoopConstructClass,
     OpenACCHostDataConstructClass,
     OpenACCDataConstructClass,
     OpenACCComputeConstructClass,
     OpenACCCombinedConstructClass,
+    OpenACCAtomicConstructClass,
     ObjCForCollectionStmtClass,
     ObjCAutoreleasePoolStmtClass,
     ObjCAtTryStmtClass,
@@ -1391,6 +1396,7 @@ const StmtClass = enum(c_int) {
     OMPMaskedDirectiveClass,
     OMPUnrollDirectiveClass,
     OMPTileDirectiveClass,
+    OMPStripeDirectiveClass,
     OMPReverseDirectiveClass,
     OMPInterchangeDirectiveClass,
     OMPTeamsGenericLoopDirectiveClass,
@@ -1541,6 +1547,8 @@ pub const DeclKind = enum(c_int) {
     StaticAssert,
     PragmaDetectMismatch,
     PragmaComment,
+    OpenACCRoutine,
+    OpenACCDeclare,
     ObjCPropertyImpl,
     OMPThreadPrivate,
     OMPRequires,
@@ -1606,6 +1614,7 @@ pub const DeclKind = enum(c_int) {
     ObjCCompatibleAlias,
     NamespaceAlias,
     Label,
+    HLSLRootSignature,
     UsingEnum,
     Using,
     LifetimeExtendedTemporary,
@@ -1724,6 +1733,7 @@ pub const BuiltinTypeKind = enum(c_int) {
     SveBoolx4,
     SveCount,
     MFloat8,
+    DMR1024,
     VectorQuad,
     VectorPair,
     RvvInt8mf8,
@@ -2143,14 +2153,13 @@ pub const CallingConv = enum(c_int) {
     AAPCS_VFP,
     IntelOclBicc,
     SpirFunction,
-    OpenCLKernel,
+    DeviceKernel,
     Swift,
     SwiftAsync,
     PreserveMost,
     PreserveAll,
     AArch64VectorCall,
     AArch64SVEPCS,
-    AMDGPUKernelCall,
     M68kRTD,
     PreserveNone,
     RISCVVectorCall,
@@ -2216,6 +2225,7 @@ pub const Expr_ConstantExprKind = enum(c_int) {
 pub const UnaryExprOrTypeTrait_Kind = enum(c_int) {
     SizeOf,
     DataSizeOf,
+    CountOf,
     AlignOf,
     PreferredAlignOf,
     PtrAuthTypeDiscriminator,
src/translate_c.zig
@@ -353,11 +353,10 @@ fn declVisitor(c: *Context, decl: *const clang.Decl) Error!void {
 }
 
 fn transFileScopeAsm(c: *Context, scope: *Scope, file_scope_asm: *const clang.FileScopeAsmDecl) Error!void {
-    const asm_string = file_scope_asm.getAsmString();
-    var len: usize = undefined;
-    const bytes_ptr = asm_string.getString_bytes_begin_size(&len);
+    const asm_string = std.mem.span(file_scope_asm.getAsmString());
+    defer clang.FileScopeAsmDecl.freeAsmString(asm_string.ptr);
 
-    const str = try std.fmt.allocPrint(c.arena, "\"{f}\"", .{std.zig.fmtString(bytes_ptr[0..len])});
+    const str = try std.fmt.allocPrint(c.arena, "\"{f}\"", .{std.zig.fmtString(asm_string)});
     const str_node = try Tag.string_literal.create(c.arena, str);
 
     const asm_node = try Tag.asm_simple.create(c.arena, str_node);
@@ -3696,6 +3695,7 @@ fn transUnaryExprOrTypeTraitExpr(
         .SizeOf => try Tag.sizeof.create(c.arena, type_node),
         .AlignOf => try Tag.alignof.create(c.arena, type_node),
         .DataSizeOf,
+        .CountOf,
         .PreferredAlignOf,
         .PtrAuthTypeDiscriminator,
         .VecStep,
src/zig_clang.cpp
@@ -330,6 +330,7 @@ void ZigClang_detect_enum_TypeClass(clang::Type::TypeClass ty) {
         case clang::Type::Auto:
         case clang::Type::DeducedTemplateSpecialization:
         case clang::Type::HLSLAttributedResource:
+        case clang::Type::HLSLInlineSpirv:
         case clang::Type::InjectedClassName:
         case clang::Type::DependentName:
         case clang::Type::DependentTemplateSpecialization:
@@ -373,6 +374,7 @@ static_assert((clang::Type::TypeClass)ZigClangType_Elaborated == clang::Type::El
 static_assert((clang::Type::TypeClass)ZigClangType_FunctionNoProto == clang::Type::FunctionNoProto, "");
 static_assert((clang::Type::TypeClass)ZigClangType_FunctionProto == clang::Type::FunctionProto, "");
 static_assert((clang::Type::TypeClass)ZigClangType_HLSLAttributedResource == clang::Type::HLSLAttributedResource, "");
+static_assert((clang::Type::TypeClass)ZigClangType_HLSLInlineSpirv == clang::Type::HLSLInlineSpirv, "");
 static_assert((clang::Type::TypeClass)ZigClangType_InjectedClassName == clang::Type::InjectedClassName, "");
 static_assert((clang::Type::TypeClass)ZigClangType_MacroQualified == clang::Type::MacroQualified, "");
 static_assert((clang::Type::TypeClass)ZigClangType_ConstantMatrix == clang::Type::ConstantMatrix, "");
@@ -413,7 +415,6 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) {
         case clang::Stmt::VAArgExprClass:
         case clang::Stmt::UnaryOperatorClass:
         case clang::Stmt::UnaryExprOrTypeTraitExprClass:
-        case clang::Stmt::TypoExprClass:
         case clang::Stmt::TypeTraitExprClass:
         case clang::Stmt::SubstNonTypeTemplateParmPackExprClass:
         case clang::Stmt::SubstNonTypeTemplateParmExprClass:
@@ -555,11 +556,13 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) {
         case clang::Stmt::OpenACCInitConstructClass:
         case clang::Stmt::OpenACCExitDataConstructClass:
         case clang::Stmt::OpenACCEnterDataConstructClass:
+        case clang::Stmt::OpenACCCacheConstructClass:
         case clang::Stmt::OpenACCLoopConstructClass:
         case clang::Stmt::OpenACCHostDataConstructClass:
         case clang::Stmt::OpenACCDataConstructClass:
         case clang::Stmt::OpenACCComputeConstructClass:
         case clang::Stmt::OpenACCCombinedConstructClass:
+        case clang::Stmt::OpenACCAtomicConstructClass:
         case clang::Stmt::ObjCForCollectionStmtClass:
         case clang::Stmt::ObjCAutoreleasePoolStmtClass:
         case clang::Stmt::ObjCAtTryStmtClass:
@@ -595,6 +598,7 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) {
         case clang::Stmt::OMPMaskedDirectiveClass:
         case clang::Stmt::OMPUnrollDirectiveClass:
         case clang::Stmt::OMPTileDirectiveClass:
+        case clang::Stmt::OMPStripeDirectiveClass:
         case clang::Stmt::OMPReverseDirectiveClass:
         case clang::Stmt::OMPInterchangeDirectiveClass:
         case clang::Stmt::OMPTeamsGenericLoopDirectiveClass:
@@ -672,7 +676,6 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_LabelStmtClass == clang::Stmt
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_VAArgExprClass == clang::Stmt::VAArgExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_UnaryOperatorClass == clang::Stmt::UnaryOperatorClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_UnaryExprOrTypeTraitExprClass == clang::Stmt::UnaryExprOrTypeTraitExprClass, "");
-static_assert((clang::Stmt::StmtClass)ZigClangStmt_TypoExprClass == clang::Stmt::TypoExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_TypeTraitExprClass == clang::Stmt::TypeTraitExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_SubstNonTypeTemplateParmPackExprClass == clang::Stmt::SubstNonTypeTemplateParmPackExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_SubstNonTypeTemplateParmExprClass == clang::Stmt::SubstNonTypeTemplateParmExprClass, "");
@@ -814,11 +817,13 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCSetConstructClass == c
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCInitConstructClass == clang::Stmt::OpenACCInitConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCExitDataConstructClass == clang::Stmt::OpenACCExitDataConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCEnterDataConstructClass == clang::Stmt::OpenACCEnterDataConstructClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCCacheConstructClass == clang::Stmt::OpenACCCacheConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCLoopConstructClass == clang::Stmt::OpenACCLoopConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCHostDataConstructClass == clang::Stmt::OpenACCHostDataConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCDataConstructClass == clang::Stmt::OpenACCDataConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCComputeConstructClass == clang::Stmt::OpenACCComputeConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCCombinedConstructClass == clang::Stmt::OpenACCCombinedConstructClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCAtomicConstructClass == clang::Stmt::OpenACCAtomicConstructClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ObjCForCollectionStmtClass == clang::Stmt::ObjCForCollectionStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ObjCAutoreleasePoolStmtClass == clang::Stmt::ObjCAutoreleasePoolStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ObjCAtTryStmtClass == clang::Stmt::ObjCAtTryStmtClass, "");
@@ -854,6 +859,7 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPMasterDirectiveClass == cl
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPMaskedDirectiveClass == clang::Stmt::OMPMaskedDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPUnrollDirectiveClass == clang::Stmt::OMPUnrollDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPTileDirectiveClass == clang::Stmt::OMPTileDirectiveClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPStripeDirectiveClass == clang::Stmt::OMPStripeDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPReverseDirectiveClass == clang::Stmt::OMPReverseDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPInterchangeDirectiveClass == clang::Stmt::OMPInterchangeDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPTeamsGenericLoopDirectiveClass == clang::Stmt::OMPTeamsGenericLoopDirectiveClass, "");
@@ -972,6 +978,8 @@ void ZigClang_detect_enum_DeclKind(clang::Decl::Kind x) {
         case clang::Decl::StaticAssert:
         case clang::Decl::PragmaDetectMismatch:
         case clang::Decl::PragmaComment:
+        case clang::Decl::OpenACCRoutine:
+        case clang::Decl::OpenACCDeclare:
         case clang::Decl::ObjCPropertyImpl:
         case clang::Decl::OMPThreadPrivate:
         case clang::Decl::OMPRequires:
@@ -1037,6 +1045,7 @@ void ZigClang_detect_enum_DeclKind(clang::Decl::Kind x) {
         case clang::Decl::ObjCCompatibleAlias:
         case clang::Decl::NamespaceAlias:
         case clang::Decl::Label:
+        case clang::Decl::HLSLRootSignature:
         case clang::Decl::UsingEnum:
         case clang::Decl::Using:
         case clang::Decl::LifetimeExtendedTemporary:
@@ -1063,6 +1072,8 @@ static_assert((clang::Decl::Kind)ZigClangDeclBlock == clang::Decl::Block, "");
 static_assert((clang::Decl::Kind)ZigClangDeclStaticAssert == clang::Decl::StaticAssert, "");
 static_assert((clang::Decl::Kind)ZigClangDeclPragmaDetectMismatch == clang::Decl::PragmaDetectMismatch, "");
 static_assert((clang::Decl::Kind)ZigClangDeclPragmaComment == clang::Decl::PragmaComment, "");
+static_assert((clang::Decl::Kind)ZigClangDeclOpenACCRoutine == clang::Decl::OpenACCRoutine, "");
+static_assert((clang::Decl::Kind)ZigClangDeclOpenACCDeclare == clang::Decl::OpenACCDeclare, "");
 static_assert((clang::Decl::Kind)ZigClangDeclObjCPropertyImpl == clang::Decl::ObjCPropertyImpl, "");
 static_assert((clang::Decl::Kind)ZigClangDeclOMPThreadPrivate == clang::Decl::OMPThreadPrivate, "");
 static_assert((clang::Decl::Kind)ZigClangDeclOMPRequires == clang::Decl::OMPRequires, "");
@@ -1128,6 +1139,7 @@ static_assert((clang::Decl::Kind)ZigClangDeclObjCProperty == clang::Decl::ObjCPr
 static_assert((clang::Decl::Kind)ZigClangDeclObjCCompatibleAlias == clang::Decl::ObjCCompatibleAlias, "");
 static_assert((clang::Decl::Kind)ZigClangDeclNamespaceAlias == clang::Decl::NamespaceAlias, "");
 static_assert((clang::Decl::Kind)ZigClangDeclLabel == clang::Decl::Label, "");
+static_assert((clang::Decl::Kind)ZigClangDeclHLSLRootSignature == clang::Decl::HLSLRootSignature, "");
 static_assert((clang::Decl::Kind)ZigClangDeclUsingEnum == clang::Decl::UsingEnum, "");
 static_assert((clang::Decl::Kind)ZigClangDeclUsing == clang::Decl::Using, "");
 static_assert((clang::Decl::Kind)ZigClangDeclLifetimeExtendedTemporary == clang::Decl::LifetimeExtendedTemporary, "");
@@ -1246,6 +1258,7 @@ void ZigClang_detect_enum_BuiltinTypeKind(clang::BuiltinType::Kind x) {
         case clang::BuiltinType::SveBoolx4:
         case clang::BuiltinType::SveCount:
         case clang::BuiltinType::MFloat8:
+        case clang::BuiltinType::DMR1024:
         case clang::BuiltinType::VectorQuad:
         case clang::BuiltinType::VectorPair:
         case clang::BuiltinType::RvvInt8mf8:
@@ -1758,6 +1771,7 @@ static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBoolx2 == clang::B
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBoolx4 == clang::BuiltinType::SveBoolx4, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveCount == clang::BuiltinType::SveCount, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeMFloat8 == clang::BuiltinType::MFloat8, "");
+static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeDMR1024 == clang::BuiltinType::DMR1024, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeVectorQuad == clang::BuiltinType::VectorQuad, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeVectorPair == clang::BuiltinType::VectorPair, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeRvvInt8mf8 == clang::BuiltinType::RvvInt8mf8, "");
@@ -2176,14 +2190,13 @@ void ZigClang_detect_enum_CallingConv(clang::CallingConv x) {
         case clang::CC_AAPCS_VFP:
         case clang::CC_IntelOclBicc:
         case clang::CC_SpirFunction:
-        case clang::CC_OpenCLKernel:
+        case clang::CC_DeviceKernel:
         case clang::CC_Swift:
         case clang::CC_SwiftAsync:
         case clang::CC_PreserveMost:
         case clang::CC_PreserveAll:
         case clang::CC_AArch64VectorCall:
         case clang::CC_AArch64SVEPCS:
-        case clang::CC_AMDGPUKernelCall:
         case clang::CC_M68kRTD:
         case clang::CC_PreserveNone:
         case clang::CC_RISCVVectorCall:
@@ -2204,14 +2217,13 @@ static_assert((clang::CallingConv)ZigClangCallingConv_AAPCS == clang::CC_AAPCS,
 static_assert((clang::CallingConv)ZigClangCallingConv_AAPCS_VFP == clang::CC_AAPCS_VFP, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_IntelOclBicc == clang::CC_IntelOclBicc, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_SpirFunction == clang::CC_SpirFunction, "");
-static_assert((clang::CallingConv)ZigClangCallingConv_OpenCLKernel == clang::CC_OpenCLKernel, "");
+static_assert((clang::CallingConv)ZigClangCallingConv_DeviceKernel == clang::CC_DeviceKernel, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_Swift == clang::CC_Swift, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_SwiftAsync == clang::CC_SwiftAsync, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_PreserveMost == clang::CC_PreserveMost, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_PreserveAll == clang::CC_PreserveAll, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_AArch64VectorCall == clang::CC_AArch64VectorCall, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_AArch64SVEPCS == clang::CC_AArch64SVEPCS, "");
-static_assert((clang::CallingConv)ZigClangCallingConv_AMDGPUKernelCall == clang::CC_AMDGPUKernelCall, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_M68kRTD == clang::CC_M68kRTD, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_PreserveNone == clang::CC_PreserveNone, "");
 static_assert((clang::CallingConv)ZigClangCallingConv_RISCVVectorCall == clang::CC_RISCVVectorCall, "");
@@ -2322,6 +2334,7 @@ static_assert((clang::Expr::ConstantExprKind)ZigClangExpr_ConstantExprKind_Immed
 
 static_assert((clang::UnaryExprOrTypeTrait)ZigClangUnaryExprOrTypeTrait_Kind::ZigClangUnaryExprOrTypeTrait_KindSizeOf == clang::UnaryExprOrTypeTrait::UETT_SizeOf, "");
 static_assert((clang::UnaryExprOrTypeTrait)ZigClangUnaryExprOrTypeTrait_Kind::ZigClangUnaryExprOrTypeTrait_KindDataSizeOf == clang::UnaryExprOrTypeTrait::UETT_DataSizeOf, "");
+static_assert((clang::UnaryExprOrTypeTrait)ZigClangUnaryExprOrTypeTrait_Kind::ZigClangUnaryExprOrTypeTrait_KindCountOf == clang::UnaryExprOrTypeTrait::UETT_CountOf, "");
 static_assert((clang::UnaryExprOrTypeTrait)ZigClangUnaryExprOrTypeTrait_Kind::ZigClangUnaryExprOrTypeTrait_KindAlignOf == clang::UnaryExprOrTypeTrait::UETT_AlignOf, "");
 static_assert((clang::UnaryExprOrTypeTrait)ZigClangUnaryExprOrTypeTrait_Kind::ZigClangUnaryExprOrTypeTrait_KindPreferredAlignOf == clang::UnaryExprOrTypeTrait::UETT_PreferredAlignOf, "");
 static_assert((clang::UnaryExprOrTypeTrait)ZigClangUnaryExprOrTypeTrait_Kind::ZigClangUnaryExprOrTypeTrait_KindPtrAuthTypeDiscriminator == clang::UnaryExprOrTypeTrait::UETT_PtrAuthTypeDiscriminator, "");
@@ -2622,9 +2635,15 @@ const ZigClangEnumDecl *ZigClangEnumDecl_getDefinition(const ZigClangEnumDecl *z
     return reinterpret_cast<const ZigClangEnumDecl *>(definition);
 }
 
-const ZigClangStringLiteral *ZigClangFileScopeAsmDecl_getAsmString(const ZigClangFileScopeAsmDecl *self) {
-    const clang::StringLiteral *result = reinterpret_cast<const clang::FileScopeAsmDecl*>(self)->getAsmString();
-    return reinterpret_cast<const ZigClangStringLiteral *>(result);
+const char *ZigClangFileScopeAsmDecl_getAsmString(const ZigClangFileScopeAsmDecl *self) {
+    std::string str = reinterpret_cast<const clang::FileScopeAsmDecl*>(self)->getAsmString();
+    char *result = new char[str.size() + 1];
+    strcpy(result, str.c_str());
+    return result;
+}
+
+void ZigClangFileScopeAsmDecl_freeAsmString(const char *str) {
+    delete[] str;
 }
 
 bool ZigClangRecordDecl_isUnion(const ZigClangRecordDecl *record_decl) {
@@ -3122,7 +3141,8 @@ ZigClangASTUnit *ZigClangLoadFromCommandLine(const char **args_begin, const char
     struct Stage2ErrorMsg **errors_ptr, size_t *errors_len, const char *resources_path)
 {
     llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS = llvm::vfs::getRealFileSystem();
-    clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(clang::CompilerInstance::createDiagnostics(*VFS, new clang::DiagnosticOptions));
+    auto diag_opts = std::make_shared<clang::DiagnosticOptions>();
+    clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(clang::CompilerInstance::createDiagnostics(*VFS, *diag_opts));
 
     std::shared_ptr<clang::PCHContainerOperations> pch_container_ops = std::make_shared<clang::PCHContainerOperations>();
 
@@ -3134,12 +3154,13 @@ ZigClangASTUnit *ZigClangLoadFromCommandLine(const char **args_begin, const char
     bool retain_excluded_conditional_blocks = false;
     bool store_preambles_in_memory = false;
     llvm::StringRef preamble_storage_path = llvm::StringRef();
-    clang::ArrayRef<clang::ASTUnit::RemappedFile> remapped_files = std::nullopt;
+    clang::ArrayRef<clang::ASTUnit::RemappedFile> remapped_files = {};
     std::unique_ptr<clang::ASTUnit> err_unit;
     std::optional<llvm::StringRef> ModuleFormat = std::nullopt;
     std::unique_ptr<clang::ASTUnit> ast_unit_unique_ptr = clang::ASTUnit::LoadFromCommandLine(
         args_begin, args_end,
         pch_container_ops,
+        diag_opts,
         diags,
         resources_path,
         store_preambles_in_memory,
src/zig_clang.h
@@ -273,6 +273,7 @@ enum ZigClangTypeClass {
     ZigClangType_FunctionNoProto,
     ZigClangType_FunctionProto,
     ZigClangType_HLSLAttributedResource,
+    ZigClangType_HLSLInlineSpirv,
     ZigClangType_InjectedClassName,
     ZigClangType_MacroQualified,
     ZigClangType_ConstantMatrix,
@@ -312,7 +313,6 @@ enum ZigClangStmtClass {
     ZigClangStmt_VAArgExprClass,
     ZigClangStmt_UnaryOperatorClass,
     ZigClangStmt_UnaryExprOrTypeTraitExprClass,
-    ZigClangStmt_TypoExprClass,
     ZigClangStmt_TypeTraitExprClass,
     ZigClangStmt_SubstNonTypeTemplateParmPackExprClass,
     ZigClangStmt_SubstNonTypeTemplateParmExprClass,
@@ -454,11 +454,13 @@ enum ZigClangStmtClass {
     ZigClangStmt_OpenACCInitConstructClass,
     ZigClangStmt_OpenACCExitDataConstructClass,
     ZigClangStmt_OpenACCEnterDataConstructClass,
+    ZigClangStmt_OpenACCCacheConstructClass,
     ZigClangStmt_OpenACCLoopConstructClass,
     ZigClangStmt_OpenACCHostDataConstructClass,
     ZigClangStmt_OpenACCDataConstructClass,
     ZigClangStmt_OpenACCComputeConstructClass,
     ZigClangStmt_OpenACCCombinedConstructClass,
+    ZigClangStmt_OpenACCAtomicConstructClass,
     ZigClangStmt_ObjCForCollectionStmtClass,
     ZigClangStmt_ObjCAutoreleasePoolStmtClass,
     ZigClangStmt_ObjCAtTryStmtClass,
@@ -494,6 +496,7 @@ enum ZigClangStmtClass {
     ZigClangStmt_OMPMaskedDirectiveClass,
     ZigClangStmt_OMPUnrollDirectiveClass,
     ZigClangStmt_OMPTileDirectiveClass,
+    ZigClangStmt_OMPStripeDirectiveClass,
     ZigClangStmt_OMPReverseDirectiveClass,
     ZigClangStmt_OMPInterchangeDirectiveClass,
     ZigClangStmt_OMPTeamsGenericLoopDirectiveClass,
@@ -644,6 +647,8 @@ enum ZigClangDeclKind {
     ZigClangDeclStaticAssert,
     ZigClangDeclPragmaDetectMismatch,
     ZigClangDeclPragmaComment,
+    ZigClangDeclOpenACCRoutine,
+    ZigClangDeclOpenACCDeclare,
     ZigClangDeclObjCPropertyImpl,
     ZigClangDeclOMPThreadPrivate,
     ZigClangDeclOMPRequires,
@@ -709,6 +714,7 @@ enum ZigClangDeclKind {
     ZigClangDeclObjCCompatibleAlias,
     ZigClangDeclNamespaceAlias,
     ZigClangDeclLabel,
+    ZigClangDeclHLSLRootSignature,
     ZigClangDeclUsingEnum,
     ZigClangDeclUsing,
     ZigClangDeclLifetimeExtendedTemporary,
@@ -827,6 +833,7 @@ enum ZigClangBuiltinTypeKind {
     ZigClangBuiltinTypeSveBoolx4,
     ZigClangBuiltinTypeSveCount,
     ZigClangBuiltinTypeMFloat8,
+    ZigClangBuiltinTypeDMR1024,
     ZigClangBuiltinTypeVectorQuad,
     ZigClangBuiltinTypeVectorPair,
     ZigClangBuiltinTypeRvvInt8mf8,
@@ -1246,14 +1253,13 @@ enum ZigClangCallingConv {
     ZigClangCallingConv_AAPCS_VFP,
     ZigClangCallingConv_IntelOclBicc,
     ZigClangCallingConv_SpirFunction,
-    ZigClangCallingConv_OpenCLKernel,
+    ZigClangCallingConv_DeviceKernel,
     ZigClangCallingConv_Swift,
     ZigClangCallingConv_SwiftAsync,
     ZigClangCallingConv_PreserveMost,
     ZigClangCallingConv_PreserveAll,
     ZigClangCallingConv_AArch64VectorCall,
     ZigClangCallingConv_AArch64SVEPCS,
-    ZigClangCallingConv_AMDGPUKernelCall,
     ZigClangCallingConv_M68kRTD,
     ZigClangCallingConv_PreserveNone,
     ZigClangCallingConv_RISCVVectorCall,
@@ -1356,6 +1362,7 @@ enum ZigClangExpr_ConstantExprKind {
 enum ZigClangUnaryExprOrTypeTrait_Kind {
     ZigClangUnaryExprOrTypeTrait_KindSizeOf,
     ZigClangUnaryExprOrTypeTrait_KindDataSizeOf,
+    ZigClangUnaryExprOrTypeTrait_KindCountOf,
     ZigClangUnaryExprOrTypeTrait_KindAlignOf,
     ZigClangUnaryExprOrTypeTrait_KindPreferredAlignOf,
     ZigClangUnaryExprOrTypeTrait_KindPtrAuthTypeDiscriminator,
@@ -1424,7 +1431,8 @@ ZIG_EXTERN_C unsigned ZigClangFieldDecl_getAlignedAttribute(const struct ZigClan
 ZIG_EXTERN_C bool ZigClangVarDecl_getPackedAttribute(const struct ZigClangVarDecl *self);
 ZIG_EXTERN_C bool ZigClangFieldDecl_getPackedAttribute(const struct ZigClangFieldDecl *self);
 
-ZIG_EXTERN_C const struct ZigClangStringLiteral *ZigClangFileScopeAsmDecl_getAsmString(const struct ZigClangFileScopeAsmDecl *self);
+ZIG_EXTERN_C const char *ZigClangFileScopeAsmDecl_getAsmString(const struct ZigClangFileScopeAsmDecl *self);
+ZIG_EXTERN_C void ZigClangFileScopeAsmDecl_freeAsmString(const char *str);
 
 ZIG_EXTERN_C struct ZigClangQualType ZigClangParmVarDecl_getOriginalType(const struct ZigClangParmVarDecl *self);
 
src/zig_llvm.cpp
@@ -153,8 +153,16 @@ LLVMTargetMachineRef ZigLLVMCreateTargetMachine(LLVMTargetRef T, const char *Tri
         opt.EmulatedTLS = true;
     }
 
-    TargetMachine *TM = reinterpret_cast<Target*>(T)->createTargetMachine(Triple, CPU, Features, opt, RM, CM,
-            OL, JIT);
+    TargetMachine *TM = reinterpret_cast<Target*>(T)->createTargetMachine(
+        llvm::Triple(Triple),
+        CPU,
+        Features,
+        opt,
+        RM,
+        CM,
+        OL,
+        JIT);
+
     return reinterpret_cast<LLVMTargetMachineRef>(TM);
 }