Commit 8ea2e1ded5

Alex Rønne Petersen <alex@alexrp.com>
2025-02-05 11:41:39
compiler: Updates for LLVM/Clang 20 API changes.
1 parent 156ab87
src/codegen/llvm/bindings.zig
@@ -90,7 +90,7 @@ pub const TargetMachine = opaque {
         time_report: bool,
         tsan: bool,
         sancov: bool,
-        lto: bool,
+        lto: LtoPhase,
         allow_fast_isel: bool,
         asm_filename: ?[*:0]const u8,
         bin_filename: ?[*:0]const u8,
@@ -98,6 +98,14 @@ pub const TargetMachine = opaque {
         bitcode_filename: ?[*:0]const u8,
         coverage: Coverage,
 
+        pub const LtoPhase = enum(c_int) {
+            None,
+            ThinPreLink,
+            ThinPostLink,
+            FullPreLink,
+            FullPostLink,
+        };
+
         pub const Coverage = extern struct {
             CoverageType: Coverage.Type,
             IndirectCalls: bool,
src/codegen/llvm.zig
@@ -1053,7 +1053,11 @@ pub const Object = struct {
             .is_small = options.is_small,
             .time_report = options.time_report,
             .tsan = options.sanitize_thread,
-            .lto = options.lto != .none,
+            .lto = switch (options.lto) {
+                .none => .None,
+                .thin => .ThinPreLink,
+                .full => .FullPreLink,
+            },
             // https://github.com/ziglang/zig/issues/21215
             .allow_fast_isel = !comp.root_mod.resolved_target.result.cpu.arch.isMIPS(),
             .asm_filename = null,
src/clang.zig
@@ -112,13 +112,16 @@ pub const APFloatBaseSemantics = enum(c_int) {
     IEEEdouble,
     IEEEquad,
     PPCDoubleDouble,
+    PPCDoubleDoubleLegacy,
     Float8E5M2,
     Float8E5M2FNUZ,
     Float8E4M3,
     Float8E4M3FN,
     Float8E4M3FNUZ,
     Float8E4M3B11FNUZ,
+    Float8E3M4,
     FloatTF32,
+    Float8E8M0FNU,
     Float6E3M2FN,
     Float6E2M3FN,
     Float4E2M1FN,
@@ -1166,6 +1169,7 @@ pub const TypeClass = enum(c_int) {
     Elaborated,
     FunctionNoProto,
     FunctionProto,
+    HLSLAttributedResource,
     InjectedClassName,
     MacroQualified,
     ConstantMatrix,
@@ -1225,6 +1229,7 @@ const StmtClass = enum(c_int) {
     PackExpansionExprClass,
     UnresolvedMemberExprClass,
     UnresolvedLookupExprClass,
+    OpenACCAsteriskSizeExprClass,
     OpaqueValueExprClass,
     OffsetOfExprClass,
     ObjCSubscriptRefExprClass,
@@ -1255,6 +1260,7 @@ const StmtClass = enum(c_int) {
     InitListExprClass,
     ImplicitValueInitExprClass,
     ImaginaryLiteralClass,
+    HLSLOutArgExprClass,
     GenericSelectionExprClass,
     GNUNullExprClass,
     FunctionParmPackExprClass,
@@ -1332,13 +1338,24 @@ const StmtClass = enum(c_int) {
     SwitchStmtClass,
     DefaultStmtClass,
     CaseStmtClass,
+    SYCLKernelCallStmtClass,
     SEHTryStmtClass,
     SEHLeaveStmtClass,
     SEHFinallyStmtClass,
     SEHExceptStmtClass,
     ReturnStmtClass,
+    OpenACCWaitConstructClass,
+    OpenACCUpdateConstructClass,
+    OpenACCShutdownConstructClass,
+    OpenACCSetConstructClass,
+    OpenACCInitConstructClass,
+    OpenACCExitDataConstructClass,
+    OpenACCEnterDataConstructClass,
     OpenACCLoopConstructClass,
+    OpenACCHostDataConstructClass,
+    OpenACCDataConstructClass,
     OpenACCComputeConstructClass,
+    OpenACCCombinedConstructClass,
     ObjCForCollectionStmtClass,
     ObjCAutoreleasePoolStmtClass,
     ObjCAtTryStmtClass,
@@ -1420,6 +1437,7 @@ const StmtClass = enum(c_int) {
     OMPCancelDirectiveClass,
     OMPBarrierDirectiveClass,
     OMPAtomicDirectiveClass,
+    OMPAssumeDirectiveClass,
     OMPCanonicalLoopClass,
     NullStmtClass,
     MSDependentExistsStmtClass,
@@ -1514,6 +1532,7 @@ pub const DeclKind = enum(c_int) {
     TranslationUnit,
     TopLevelStmt,
     RequiresExprBody,
+    OutlinedFunction,
     LinkageSpec,
     ExternCContext,
     Export,
@@ -1660,6 +1679,7 @@ pub const BuiltinTypeKind = enum(c_int) {
     SveFloat32,
     SveFloat64,
     SveBFloat16,
+    SveMFloat8,
     SveInt8x2,
     SveInt16x2,
     SveInt32x2,
@@ -1672,6 +1692,7 @@ pub const BuiltinTypeKind = enum(c_int) {
     SveFloat32x2,
     SveFloat64x2,
     SveBFloat16x2,
+    SveMFloat8x2,
     SveInt8x3,
     SveInt16x3,
     SveInt32x3,
@@ -1684,6 +1705,7 @@ pub const BuiltinTypeKind = enum(c_int) {
     SveFloat32x3,
     SveFloat64x3,
     SveBFloat16x3,
+    SveMFloat8x3,
     SveInt8x4,
     SveInt16x4,
     SveInt32x4,
@@ -1696,10 +1718,12 @@ pub const BuiltinTypeKind = enum(c_int) {
     SveFloat32x4,
     SveFloat64x4,
     SveBFloat16x4,
+    SveMFloat8x4,
     SveBool,
     SveBoolx2,
     SveBoolx4,
     SveCount,
+    MFloat8,
     VectorQuad,
     VectorPair,
     RvvInt8mf8,
@@ -2027,6 +2051,8 @@ pub const BuiltinTypeKind = enum(c_int) {
     RvvBFloat16m4x2,
     WasmExternRef,
     AMDGPUBufferRsrc,
+    AMDGPUNamedWorkgroupBarrier,
+    HLSLResource,
     Void,
     Bool,
     Char_U,
src/zig_clang.cpp
@@ -329,6 +329,7 @@ void ZigClang_detect_enum_TypeClass(clang::Type::TypeClass ty) {
         case clang::Type::TemplateSpecialization:
         case clang::Type::Auto:
         case clang::Type::DeducedTemplateSpecialization:
+        case clang::Type::HLSLAttributedResource:
         case clang::Type::InjectedClassName:
         case clang::Type::DependentName:
         case clang::Type::DependentTemplateSpecialization:
@@ -371,6 +372,7 @@ static_assert((clang::Type::TypeClass)ZigClangType_DependentVector == clang::Typ
 static_assert((clang::Type::TypeClass)ZigClangType_Elaborated == clang::Type::Elaborated, "");
 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_InjectedClassName == clang::Type::InjectedClassName, "");
 static_assert((clang::Type::TypeClass)ZigClangType_MacroQualified == clang::Type::MacroQualified, "");
 static_assert((clang::Type::TypeClass)ZigClangType_ConstantMatrix == clang::Type::ConstantMatrix, "");
@@ -431,6 +433,7 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) {
         case clang::Stmt::PackExpansionExprClass:
         case clang::Stmt::UnresolvedMemberExprClass:
         case clang::Stmt::UnresolvedLookupExprClass:
+        case clang::Stmt::OpenACCAsteriskSizeExprClass:
         case clang::Stmt::OpaqueValueExprClass:
         case clang::Stmt::OffsetOfExprClass:
         case clang::Stmt::ObjCSubscriptRefExprClass:
@@ -461,6 +464,7 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) {
         case clang::Stmt::InitListExprClass:
         case clang::Stmt::ImplicitValueInitExprClass:
         case clang::Stmt::ImaginaryLiteralClass:
+        case clang::Stmt::HLSLOutArgExprClass:
         case clang::Stmt::GenericSelectionExprClass:
         case clang::Stmt::GNUNullExprClass:
         case clang::Stmt::FunctionParmPackExprClass:
@@ -538,13 +542,24 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) {
         case clang::Stmt::SwitchStmtClass:
         case clang::Stmt::DefaultStmtClass:
         case clang::Stmt::CaseStmtClass:
+        case clang::Stmt::SYCLKernelCallStmtClass:
         case clang::Stmt::SEHTryStmtClass:
         case clang::Stmt::SEHLeaveStmtClass:
         case clang::Stmt::SEHFinallyStmtClass:
         case clang::Stmt::SEHExceptStmtClass:
         case clang::Stmt::ReturnStmtClass:
+        case clang::Stmt::OpenACCWaitConstructClass:
+        case clang::Stmt::OpenACCUpdateConstructClass:
+        case clang::Stmt::OpenACCShutdownConstructClass:
+        case clang::Stmt::OpenACCSetConstructClass:
+        case clang::Stmt::OpenACCInitConstructClass:
+        case clang::Stmt::OpenACCExitDataConstructClass:
+        case clang::Stmt::OpenACCEnterDataConstructClass:
         case clang::Stmt::OpenACCLoopConstructClass:
+        case clang::Stmt::OpenACCHostDataConstructClass:
+        case clang::Stmt::OpenACCDataConstructClass:
         case clang::Stmt::OpenACCComputeConstructClass:
+        case clang::Stmt::OpenACCCombinedConstructClass:
         case clang::Stmt::ObjCForCollectionStmtClass:
         case clang::Stmt::ObjCAutoreleasePoolStmtClass:
         case clang::Stmt::ObjCAtTryStmtClass:
@@ -626,6 +641,7 @@ void ZigClang_detect_enum_StmtClass(clang::Stmt::StmtClass x) {
         case clang::Stmt::OMPCancelDirectiveClass:
         case clang::Stmt::OMPBarrierDirectiveClass:
         case clang::Stmt::OMPAtomicDirectiveClass:
+        case clang::Stmt::OMPAssumeDirectiveClass:
         case clang::Stmt::OMPCanonicalLoopClass:
         case clang::Stmt::NullStmtClass:
         case clang::Stmt::MSDependentExistsStmtClass:
@@ -676,6 +692,7 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_PackIndexingExprClass == clan
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_PackExpansionExprClass == clang::Stmt::PackExpansionExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_UnresolvedMemberExprClass == clang::Stmt::UnresolvedMemberExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_UnresolvedLookupExprClass == clang::Stmt::UnresolvedLookupExprClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCAsteriskSizeExprClass == clang::Stmt::OpenACCAsteriskSizeExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpaqueValueExprClass == clang::Stmt::OpaqueValueExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OffsetOfExprClass == clang::Stmt::OffsetOfExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ObjCSubscriptRefExprClass == clang::Stmt::ObjCSubscriptRefExprClass, "");
@@ -706,6 +723,7 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_IntegerLiteralClass == clang:
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_InitListExprClass == clang::Stmt::InitListExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ImplicitValueInitExprClass == clang::Stmt::ImplicitValueInitExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ImaginaryLiteralClass == clang::Stmt::ImaginaryLiteralClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_HLSLOutArgExprClass == clang::Stmt::HLSLOutArgExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_GenericSelectionExprClass == clang::Stmt::GenericSelectionExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_GNUNullExprClass == clang::Stmt::GNUNullExprClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_FunctionParmPackExprClass == clang::Stmt::FunctionParmPackExprClass, "");
@@ -783,13 +801,24 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_AttributedStmtClass == clang:
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_SwitchStmtClass == clang::Stmt::SwitchStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_DefaultStmtClass == clang::Stmt::DefaultStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_CaseStmtClass == clang::Stmt::CaseStmtClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_SYCLKernelCallStmtClass == clang::Stmt::SYCLKernelCallStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_SEHTryStmtClass == clang::Stmt::SEHTryStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_SEHLeaveStmtClass == clang::Stmt::SEHLeaveStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_SEHFinallyStmtClass == clang::Stmt::SEHFinallyStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_SEHExceptStmtClass == clang::Stmt::SEHExceptStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ReturnStmtClass == clang::Stmt::ReturnStmtClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCWaitConstructClass == clang::Stmt::OpenACCWaitConstructClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCUpdateConstructClass == clang::Stmt::OpenACCUpdateConstructClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCShutdownConstructClass == clang::Stmt::OpenACCShutdownConstructClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OpenACCSetConstructClass == clang::Stmt::OpenACCSetConstructClass, "");
+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_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_ObjCForCollectionStmtClass == clang::Stmt::ObjCForCollectionStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ObjCAutoreleasePoolStmtClass == clang::Stmt::ObjCAutoreleasePoolStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_ObjCAtTryStmtClass == clang::Stmt::ObjCAtTryStmtClass, "");
@@ -871,6 +900,7 @@ static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPCancellationPointDirective
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPCancelDirectiveClass == clang::Stmt::OMPCancelDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPBarrierDirectiveClass == clang::Stmt::OMPBarrierDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPAtomicDirectiveClass == clang::Stmt::OMPAtomicDirectiveClass, "");
+static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPAssumeDirectiveClass == clang::Stmt::OMPAssumeDirectiveClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_OMPCanonicalLoopClass == clang::Stmt::OMPCanonicalLoopClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_NullStmtClass == clang::Stmt::NullStmtClass, "");
 static_assert((clang::Stmt::StmtClass)ZigClangStmt_MSDependentExistsStmtClass == clang::Stmt::MSDependentExistsStmtClass, "");
@@ -932,6 +962,7 @@ void ZigClang_detect_enum_DeclKind(clang::Decl::Kind x) {
     switch (x) {
         case clang::Decl::TranslationUnit:
         case clang::Decl::RequiresExprBody:
+        case clang::Decl::OutlinedFunction:
         case clang::Decl::LinkageSpec:
         case clang::Decl::ExternCContext:
         case clang::Decl::Export:
@@ -1023,6 +1054,7 @@ void ZigClang_detect_enum_DeclKind(clang::Decl::Kind x) {
 static_assert((clang::Decl::Kind)ZigClangDeclTranslationUnit == clang::Decl::TranslationUnit, "");
 static_assert((clang::Decl::Kind)ZigClangDeclTopLevelStmt == clang::Decl::TopLevelStmt, "");
 static_assert((clang::Decl::Kind)ZigClangDeclRequiresExprBody == clang::Decl::RequiresExprBody, "");
+static_assert((clang::Decl::Kind)ZigClangDeclOutlinedFunction == clang::Decl::OutlinedFunction, "");
 static_assert((clang::Decl::Kind)ZigClangDeclLinkageSpec == clang::Decl::LinkageSpec, "");
 static_assert((clang::Decl::Kind)ZigClangDeclExternCContext == clang::Decl::ExternCContext, "");
 static_assert((clang::Decl::Kind)ZigClangDeclExport == clang::Decl::Export, "");
@@ -1169,6 +1201,7 @@ void ZigClang_detect_enum_BuiltinTypeKind(clang::BuiltinType::Kind x) {
         case clang::BuiltinType::SveFloat32:
         case clang::BuiltinType::SveFloat64:
         case clang::BuiltinType::SveBFloat16:
+        case clang::BuiltinType::SveMFloat8:
         case clang::BuiltinType::SveInt8x2:
         case clang::BuiltinType::SveInt16x2:
         case clang::BuiltinType::SveInt32x2:
@@ -1181,6 +1214,7 @@ void ZigClang_detect_enum_BuiltinTypeKind(clang::BuiltinType::Kind x) {
         case clang::BuiltinType::SveFloat32x2:
         case clang::BuiltinType::SveFloat64x2:
         case clang::BuiltinType::SveBFloat16x2:
+        case clang::BuiltinType::SveMFloat8x2:
         case clang::BuiltinType::SveInt8x3:
         case clang::BuiltinType::SveInt16x3:
         case clang::BuiltinType::SveInt32x3:
@@ -1193,6 +1227,7 @@ void ZigClang_detect_enum_BuiltinTypeKind(clang::BuiltinType::Kind x) {
         case clang::BuiltinType::SveFloat32x3:
         case clang::BuiltinType::SveFloat64x3:
         case clang::BuiltinType::SveBFloat16x3:
+        case clang::BuiltinType::SveMFloat8x3:
         case clang::BuiltinType::SveInt8x4:
         case clang::BuiltinType::SveInt16x4:
         case clang::BuiltinType::SveInt32x4:
@@ -1205,10 +1240,12 @@ void ZigClang_detect_enum_BuiltinTypeKind(clang::BuiltinType::Kind x) {
         case clang::BuiltinType::SveFloat32x4:
         case clang::BuiltinType::SveFloat64x4:
         case clang::BuiltinType::SveBFloat16x4:
+        case clang::BuiltinType::SveMFloat8x4:
         case clang::BuiltinType::SveBool:
         case clang::BuiltinType::SveBoolx2:
         case clang::BuiltinType::SveBoolx4:
         case clang::BuiltinType::SveCount:
+        case clang::BuiltinType::MFloat8:
         case clang::BuiltinType::VectorQuad:
         case clang::BuiltinType::VectorPair:
         case clang::BuiltinType::RvvInt8mf8:
@@ -1536,6 +1573,8 @@ void ZigClang_detect_enum_BuiltinTypeKind(clang::BuiltinType::Kind x) {
         case clang::BuiltinType::RvvBFloat16m4x2:
         case clang::BuiltinType::WasmExternRef:
         case clang::BuiltinType::AMDGPUBufferRsrc:
+        case clang::BuiltinType::AMDGPUNamedWorkgroupBarrier:
+        case clang::BuiltinType::HLSLResource:
         case clang::BuiltinType::Void:
         case clang::BuiltinType::Bool:
         case clang::BuiltinType::Char_U:
@@ -1674,6 +1713,7 @@ static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat16 == clang::
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat32 == clang::BuiltinType::SveFloat32, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat64 == clang::BuiltinType::SveFloat64, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBFloat16 == clang::BuiltinType::SveBFloat16, "");
+static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveMFloat8 == clang::BuiltinType::SveMFloat8, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt8x2 == clang::BuiltinType::SveInt8x2, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt16x2 == clang::BuiltinType::SveInt16x2, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt32x2 == clang::BuiltinType::SveInt32x2, "");
@@ -1686,6 +1726,7 @@ static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat16x2 == clang
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat32x2 == clang::BuiltinType::SveFloat32x2, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat64x2 == clang::BuiltinType::SveFloat64x2, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBFloat16x2 == clang::BuiltinType::SveBFloat16x2, "");
+static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveMFloat8x2 == clang::BuiltinType::SveMFloat8x2, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt8x3 == clang::BuiltinType::SveInt8x3, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt16x3 == clang::BuiltinType::SveInt16x3, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt32x3 == clang::BuiltinType::SveInt32x3, "");
@@ -1698,6 +1739,7 @@ static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat16x3 == clang
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat32x3 == clang::BuiltinType::SveFloat32x3, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat64x3 == clang::BuiltinType::SveFloat64x3, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBFloat16x3 == clang::BuiltinType::SveBFloat16x3, "");
+static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveMFloat8x3 == clang::BuiltinType::SveMFloat8x3, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt8x4 == clang::BuiltinType::SveInt8x4, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt16x4 == clang::BuiltinType::SveInt16x4, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveInt32x4 == clang::BuiltinType::SveInt32x4, "");
@@ -1710,10 +1752,12 @@ static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat16x4 == clang
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat32x4 == clang::BuiltinType::SveFloat32x4, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveFloat64x4 == clang::BuiltinType::SveFloat64x4, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBFloat16x4 == clang::BuiltinType::SveBFloat16x4, "");
+static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveMFloat8x4 == clang::BuiltinType::SveMFloat8x4, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBool == clang::BuiltinType::SveBool, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeSveBoolx2 == clang::BuiltinType::SveBoolx2, "");
 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)ZigClangBuiltinTypeVectorQuad == clang::BuiltinType::VectorQuad, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeVectorPair == clang::BuiltinType::VectorPair, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeRvvInt8mf8 == clang::BuiltinType::RvvInt8mf8, "");
@@ -2041,6 +2085,8 @@ static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeRvvBFloat16m2x4 == cl
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeRvvBFloat16m4x2 == clang::BuiltinType::RvvBFloat16m4x2, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeWasmExternRef == clang::BuiltinType::WasmExternRef, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeAMDGPUBufferRsrc == clang::BuiltinType::AMDGPUBufferRsrc, "");
+static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeAMDGPUNamedWorkgroupBarrier == clang::BuiltinType::AMDGPUNamedWorkgroupBarrier, "");
+static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeHLSLResource == clang::BuiltinType::HLSLResource, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeVoid == clang::BuiltinType::Void, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeBool == clang::BuiltinType::Bool, "");
 static_assert((clang::BuiltinType::Kind)ZigClangBuiltinTypeChar_U == clang::BuiltinType::Char_U, "");
@@ -3074,7 +3120,8 @@ ZigClangAPValueLValueBase ZigClangAPValue_getLValueBase(const ZigClangAPValue *s
 ZigClangASTUnit *ZigClangLoadFromCommandLine(const char **args_begin, const char **args_end,
     struct Stage2ErrorMsg **errors_ptr, size_t *errors_len, const char *resources_path)
 {
-    clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(clang::CompilerInstance::createDiagnostics(new clang::DiagnosticOptions));
+    llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS = llvm::vfs::getRealFileSystem();
+    clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(clang::CompilerInstance::createDiagnostics(*VFS, new clang::DiagnosticOptions));
 
     std::shared_ptr<clang::PCHContainerOperations> pch_container_ops = std::make_shared<clang::PCHContainerOperations>();
 
@@ -3088,7 +3135,6 @@ ZigClangASTUnit *ZigClangLoadFromCommandLine(const char **args_begin, const char
     llvm::StringRef preamble_storage_path = llvm::StringRef();
     clang::ArrayRef<clang::ASTUnit::RemappedFile> remapped_files = std::nullopt;
     std::unique_ptr<clang::ASTUnit> err_unit;
-    llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS = nullptr;
     std::optional<llvm::StringRef> ModuleFormat = std::nullopt;
     std::unique_ptr<clang::ASTUnit> ast_unit_unique_ptr = clang::ASTUnit::LoadFromCommandLine(
         args_begin, args_end,
@@ -4112,13 +4158,16 @@ static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_IEEEsi
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_IEEEdouble == llvm::APFloatBase::S_IEEEdouble);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_IEEEquad == llvm::APFloatBase::S_IEEEquad);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_PPCDoubleDouble == llvm::APFloatBase::S_PPCDoubleDouble);
+static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_PPCDoubleDoubleLegacy == llvm::APFloatBase::S_PPCDoubleDoubleLegacy);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E5M2 == llvm::APFloatBase::S_Float8E5M2);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E5M2FNUZ == llvm::APFloatBase::S_Float8E5M2FNUZ);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E4M3 == llvm::APFloatBase::S_Float8E4M3);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E4M3FN == llvm::APFloatBase::S_Float8E4M3FN);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E4M3FNUZ == llvm::APFloatBase::S_Float8E4M3FNUZ);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E4M3B11FNUZ == llvm::APFloatBase::S_Float8E4M3B11FNUZ);
+static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E3M4 == llvm::APFloatBase::S_Float8E3M4);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_FloatTF32 == llvm::APFloatBase::S_FloatTF32);
+static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float8E8M0FNU == llvm::APFloatBase::S_Float8E8M0FNU);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float6E3M2FN == llvm::APFloatBase::S_Float6E3M2FN);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float6E2M3FN == llvm::APFloatBase::S_Float6E2M3FN);
 static_assert((llvm::APFloatBase::Semantics)ZigClangAPFloatBase_Semantics_Float4E2M1FN == llvm::APFloatBase::S_Float4E2M1FN);
src/zig_clang.h
@@ -75,7 +75,7 @@ struct ZigClangAPValue {
 #elif defined(__i386__)
     char Data[48];
 #else
-    char Data[68];
+    char Data[52];
 #endif
 };
 
@@ -271,6 +271,7 @@ enum ZigClangTypeClass {
     ZigClangType_Elaborated,
     ZigClangType_FunctionNoProto,
     ZigClangType_FunctionProto,
+    ZigClangType_HLSLAttributedResource,
     ZigClangType_InjectedClassName,
     ZigClangType_MacroQualified,
     ZigClangType_ConstantMatrix,
@@ -330,6 +331,7 @@ enum ZigClangStmtClass {
     ZigClangStmt_PackExpansionExprClass,
     ZigClangStmt_UnresolvedMemberExprClass,
     ZigClangStmt_UnresolvedLookupExprClass,
+    ZigClangStmt_OpenACCAsteriskSizeExprClass,
     ZigClangStmt_OpaqueValueExprClass,
     ZigClangStmt_OffsetOfExprClass,
     ZigClangStmt_ObjCSubscriptRefExprClass,
@@ -360,6 +362,7 @@ enum ZigClangStmtClass {
     ZigClangStmt_InitListExprClass,
     ZigClangStmt_ImplicitValueInitExprClass,
     ZigClangStmt_ImaginaryLiteralClass,
+    ZigClangStmt_HLSLOutArgExprClass,
     ZigClangStmt_GenericSelectionExprClass,
     ZigClangStmt_GNUNullExprClass,
     ZigClangStmt_FunctionParmPackExprClass,
@@ -437,13 +440,24 @@ enum ZigClangStmtClass {
     ZigClangStmt_SwitchStmtClass,
     ZigClangStmt_DefaultStmtClass,
     ZigClangStmt_CaseStmtClass,
+    ZigClangStmt_SYCLKernelCallStmtClass,
     ZigClangStmt_SEHTryStmtClass,
     ZigClangStmt_SEHLeaveStmtClass,
     ZigClangStmt_SEHFinallyStmtClass,
     ZigClangStmt_SEHExceptStmtClass,
     ZigClangStmt_ReturnStmtClass,
+    ZigClangStmt_OpenACCWaitConstructClass,
+    ZigClangStmt_OpenACCUpdateConstructClass,
+    ZigClangStmt_OpenACCShutdownConstructClass,
+    ZigClangStmt_OpenACCSetConstructClass,
+    ZigClangStmt_OpenACCInitConstructClass,
+    ZigClangStmt_OpenACCExitDataConstructClass,
+    ZigClangStmt_OpenACCEnterDataConstructClass,
     ZigClangStmt_OpenACCLoopConstructClass,
+    ZigClangStmt_OpenACCHostDataConstructClass,
+    ZigClangStmt_OpenACCDataConstructClass,
     ZigClangStmt_OpenACCComputeConstructClass,
+    ZigClangStmt_OpenACCCombinedConstructClass,
     ZigClangStmt_ObjCForCollectionStmtClass,
     ZigClangStmt_ObjCAutoreleasePoolStmtClass,
     ZigClangStmt_ObjCAtTryStmtClass,
@@ -525,6 +539,7 @@ enum ZigClangStmtClass {
     ZigClangStmt_OMPCancelDirectiveClass,
     ZigClangStmt_OMPBarrierDirectiveClass,
     ZigClangStmt_OMPAtomicDirectiveClass,
+    ZigClangStmt_OMPAssumeDirectiveClass,
     ZigClangStmt_OMPCanonicalLoopClass,
     ZigClangStmt_NullStmtClass,
     ZigClangStmt_MSDependentExistsStmtClass,
@@ -619,6 +634,7 @@ enum ZigClangDeclKind {
     ZigClangDeclTranslationUnit,
     ZigClangDeclTopLevelStmt,
     ZigClangDeclRequiresExprBody,
+    ZigClangDeclOutlinedFunction,
     ZigClangDeclLinkageSpec,
     ZigClangDeclExternCContext,
     ZigClangDeclExport,
@@ -765,6 +781,7 @@ enum ZigClangBuiltinTypeKind {
     ZigClangBuiltinTypeSveFloat32,
     ZigClangBuiltinTypeSveFloat64,
     ZigClangBuiltinTypeSveBFloat16,
+    ZigClangBuiltinTypeSveMFloat8,
     ZigClangBuiltinTypeSveInt8x2,
     ZigClangBuiltinTypeSveInt16x2,
     ZigClangBuiltinTypeSveInt32x2,
@@ -777,6 +794,7 @@ enum ZigClangBuiltinTypeKind {
     ZigClangBuiltinTypeSveFloat32x2,
     ZigClangBuiltinTypeSveFloat64x2,
     ZigClangBuiltinTypeSveBFloat16x2,
+    ZigClangBuiltinTypeSveMFloat8x2,
     ZigClangBuiltinTypeSveInt8x3,
     ZigClangBuiltinTypeSveInt16x3,
     ZigClangBuiltinTypeSveInt32x3,
@@ -789,6 +807,7 @@ enum ZigClangBuiltinTypeKind {
     ZigClangBuiltinTypeSveFloat32x3,
     ZigClangBuiltinTypeSveFloat64x3,
     ZigClangBuiltinTypeSveBFloat16x3,
+    ZigClangBuiltinTypeSveMFloat8x3,
     ZigClangBuiltinTypeSveInt8x4,
     ZigClangBuiltinTypeSveInt16x4,
     ZigClangBuiltinTypeSveInt32x4,
@@ -801,10 +820,12 @@ enum ZigClangBuiltinTypeKind {
     ZigClangBuiltinTypeSveFloat32x4,
     ZigClangBuiltinTypeSveFloat64x4,
     ZigClangBuiltinTypeSveBFloat16x4,
+    ZigClangBuiltinTypeSveMFloat8x4,
     ZigClangBuiltinTypeSveBool,
     ZigClangBuiltinTypeSveBoolx2,
     ZigClangBuiltinTypeSveBoolx4,
     ZigClangBuiltinTypeSveCount,
+    ZigClangBuiltinTypeMFloat8,
     ZigClangBuiltinTypeVectorQuad,
     ZigClangBuiltinTypeVectorPair,
     ZigClangBuiltinTypeRvvInt8mf8,
@@ -1132,6 +1153,8 @@ enum ZigClangBuiltinTypeKind {
     ZigClangBuiltinTypeRvvBFloat16m4x2,
     ZigClangBuiltinTypeWasmExternRef,
     ZigClangBuiltinTypeAMDGPUBufferRsrc,
+    ZigClangBuiltinTypeAMDGPUNamedWorkgroupBarrier,
+    ZigClangBuiltinTypeHLSLResource,
     ZigClangBuiltinTypeVoid,
     ZigClangBuiltinTypeBool,
     ZigClangBuiltinTypeChar_U,
@@ -1266,13 +1289,16 @@ enum ZigClangAPFloatBase_Semantics {
     ZigClangAPFloatBase_Semantics_IEEEdouble,
     ZigClangAPFloatBase_Semantics_IEEEquad,
     ZigClangAPFloatBase_Semantics_PPCDoubleDouble,
+    ZigClangAPFloatBase_Semantics_PPCDoubleDoubleLegacy,
     ZigClangAPFloatBase_Semantics_Float8E5M2,
     ZigClangAPFloatBase_Semantics_Float8E5M2FNUZ,
     ZigClangAPFloatBase_Semantics_Float8E4M3,
     ZigClangAPFloatBase_Semantics_Float8E4M3FN,
     ZigClangAPFloatBase_Semantics_Float8E4M3FNUZ,
     ZigClangAPFloatBase_Semantics_Float8E4M3B11FNUZ,
+    ZigClangAPFloatBase_Semantics_Float8E3M4,
     ZigClangAPFloatBase_Semantics_FloatTF32,
+    ZigClangAPFloatBase_Semantics_Float8E8M0FNU,
     ZigClangAPFloatBase_Semantics_Float6E3M2FN,
     ZigClangAPFloatBase_Semantics_Float6E2M3FN,
     ZigClangAPFloatBase_Semantics_Float4E2M1FN,
src/zig_llvm.cpp
@@ -300,7 +300,7 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
     pass_builder.registerLoopAnalyses(loop_am);
     pass_builder.crossRegisterProxies(loop_am, function_am, cgscc_am, module_am);
 
-    pass_builder.registerPipelineStartEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {
+    pass_builder.registerPipelineStartEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {
         // Verify the input
         if (assertions_on) {
             module_pm.addPass(VerifierPass());
@@ -313,7 +313,7 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
 
     const bool early_san = options->is_debug;
 
-    pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel OL) {
+    pass_builder.registerOptimizerEarlyEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level, ThinOrFullLTOPhase lto_phase) {
         if (early_san) {
             // Code coverage instrumentation.
             if (options->sancov) {
@@ -328,7 +328,7 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
         }
     });
 
-    pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level) {
+    pass_builder.registerOptimizerLastEPCallback([&](ModulePassManager &module_pm, OptimizationLevel level, ThinOrFullLTOPhase lto_phase) {
         if (!early_san) {
             // Code coverage instrumentation.
             if (options->sancov) {
@@ -360,7 +360,7 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
 
     // Initialize the PassManager
     if (opt_level == OptimizationLevel::O0) {
-      module_pm = pass_builder.buildO0DefaultPipeline(opt_level, options->lto);
+      module_pm = pass_builder.buildO0DefaultPipeline(opt_level, static_cast<ThinOrFullLTOPhase>(options->lto));
     } else if (options->lto) {
       module_pm = pass_builder.buildLTOPreLinkDefaultPipeline(opt_level);
     } else {
src/zig_llvm.h
@@ -53,13 +53,23 @@ struct ZigLLVMCoverageOptions {
     bool CollectControlFlow;
 };
 
+// synchronize with llvm/include/Pass.h::ThinOrFullLTOPhase
+// synchronize with codegen/llvm/bindings.zig::EmitOptions::LtoPhase
+enum ZigLLVMThinOrFullLTOPhase {
+    ZigLLVMThinOrFullLTOPhase_None,
+    ZigLLVMThinOrFullLTOPhase_ThinPreLink,
+    ZigLLVMThinOrFullLTOPhase_ThinkPostLink,
+    ZigLLVMThinOrFullLTOPhase_FullPreLink,
+    ZigLLVMThinOrFullLTOPhase_FullPostLink,
+};
+
 struct ZigLLVMEmitOptions {
     bool is_debug;
     bool is_small;
     bool time_report;
     bool tsan;
     bool sancov;
-    bool lto;
+    ZigLLVMThinOrFullLTOPhase lto;
     bool allow_fast_isel;
     const char *asm_filename;
     const char *bin_filename;
test/translate_c.zig
@@ -1061,28 +1061,28 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
             \\    VAL23 = 0xFFFFFFFFFFFFFFFF,
             \\};
         , &[_][]const u8{
-            \\pub const VAL01: c_int = 0;
-            \\pub const VAL02: c_int = 1;
-            \\pub const VAL03: c_int = 2;
-            \\pub const VAL04: c_int = 3;
-            \\pub const VAL05: c_int = -1;
-            \\pub const VAL06: c_int = -2;
-            \\pub const VAL07: c_int = -3;
-            \\pub const VAL08: c_int = -4;
-            \\pub const VAL09: c_int = -3;
-            \\pub const VAL10: c_int = -1000012000;
-            \\pub const VAL11: c_int = -1000161000;
-            \\pub const VAL12: c_int = -1000174001;
-            \\pub const VAL13: c_int = -3;
-            \\pub const VAL14: c_int = -1000012000;
-            \\pub const VAL15: c_int = -1000161000;
-            \\pub const VAL16: c_int = -3;
-            \\pub const VAL17: c_int = 1000011998;
+            \\pub const VAL01: c_longlong = 0;
+            \\pub const VAL02: c_longlong = 1;
+            \\pub const VAL03: c_longlong = 2;
+            \\pub const VAL04: c_longlong = 3;
+            \\pub const VAL05: c_longlong = -1;
+            \\pub const VAL06: c_longlong = -2;
+            \\pub const VAL07: c_longlong = -3;
+            \\pub const VAL08: c_longlong = -4;
+            \\pub const VAL09: c_longlong = -3;
+            \\pub const VAL10: c_longlong = -1000012000;
+            \\pub const VAL11: c_longlong = -1000161000;
+            \\pub const VAL12: c_longlong = -1000174001;
+            \\pub const VAL13: c_longlong = -3;
+            \\pub const VAL14: c_longlong = -1000012000;
+            \\pub const VAL15: c_longlong = -1000161000;
+            \\pub const VAL16: c_longlong = -3;
+            \\pub const VAL17: c_longlong = 1000011998;
             \\pub const VAL18: c_longlong = 1152921504606846976;
             \\pub const VAL19: c_longlong = 3458764513820540927;
             \\pub const VAL20: c_longlong = 6917529027641081854;
             \\pub const VAL21: c_longlong = 6917529027641081853;
-            \\pub const VAL22: c_int = 0;
+            \\pub const VAL22: c_longlong = 0;
             \\pub const VAL23: c_longlong = -1;
             \\pub const enum_EnumWithInits = c_longlong;
         });