Commit 8feae5d2d5

antlilja <liljaanton2001@gmail.com>
2023-08-17 16:03:40
LLVM: Assign correct values to enum/union tags
1 parent 955fd65
Changed files (1)
src
codegen
src/codegen/llvm/Builder.zig
@@ -1051,7 +1051,13 @@ pub const Attribute = union(Kind) {
                 .no_sanitize_hwaddress,
                 .sanitize_address_dyninit,
                 => |kind| {
-                    const field = @typeInfo(Attribute).Union.fields[@intFromEnum(kind)];
+                    const field = comptime blk: {
+                        @setEvalBranchQuota(10_000);
+                        inline for (@typeInfo(Attribute).Union.fields) |field| {
+                            if (std.mem.eql(u8, field.name, @tagName(kind))) break :blk field;
+                        }
+                        unreachable;
+                    };
                     comptime assert(std.mem.eql(u8, @tagName(kind), field.name));
                     return @unionInit(Attribute, field.name, switch (field.type) {
                         void => {},
@@ -1255,100 +1261,100 @@ pub const Attribute = union(Kind) {
 
     pub const Kind = enum(u32) {
         // Parameter Attributes
-        zeroext,
-        signext,
-        inreg,
-        byval,
-        byref,
-        preallocated,
-        inalloca,
-        sret,
-        elementtype,
-        @"align",
-        @"noalias",
-        nocapture,
-        nofree,
-        nest,
-        returned,
-        nonnull,
-        dereferenceable,
-        dereferenceable_or_null,
-        swiftself,
-        swiftasync,
-        swifterror,
-        immarg,
-        noundef,
-        nofpclass,
-        alignstack,
-        allocalign,
-        allocptr,
-        readnone,
-        readonly,
-        writeonly,
+        zeroext = 34,
+        signext = 24,
+        inreg = 5,
+        byval = 3,
+        byref = 69,
+        preallocated = 65,
+        inalloca = 38,
+        sret = 29, // TODO: ?
+        elementtype = 77,
+        @"align" = 1,
+        @"noalias" = 9,
+        nocapture = 11,
+        nofree = 62,
+        nest = 8,
+        returned = 22,
+        nonnull = 39,
+        dereferenceable = 41,
+        dereferenceable_or_null = 42,
+        swiftself = 46,
+        swiftasync = 75,
+        swifterror = 47,
+        immarg = 60,
+        noundef = 68,
+        nofpclass = 87,
+        alignstack = 25,
+        allocalign = 80,
+        allocptr = 81,
+        readnone = 20,
+        readonly = 21,
+        writeonly = 52,
 
         // Function Attributes
         //alignstack,
-        allockind,
-        allocsize,
-        alwaysinline,
-        builtin,
-        cold,
-        convergent,
-        disable_sanitizer_information,
-        fn_ret_thunk_extern,
-        hot,
-        inlinehint,
-        jumptable,
-        memory,
-        minsize,
-        naked,
-        nobuiltin,
-        nocallback,
-        noduplicate,
+        allockind = 82,
+        allocsize = 51,
+        alwaysinline = 2,
+        builtin = 35,
+        cold = 36,
+        convergent = 43,
+        disable_sanitizer_information = 78,
+        fn_ret_thunk_extern = 84,
+        hot = 72,
+        inlinehint = 4,
+        jumptable = 40,
+        memory = 86,
+        minsize = 6,
+        naked = 7,
+        nobuiltin = 10,
+        nocallback = 71,
+        noduplicate = 12,
         //nofree,
-        noimplicitfloat,
-        @"noinline",
-        nomerge,
-        nonlazybind,
-        noprofile,
-        skipprofile,
-        noredzone,
-        noreturn,
-        norecurse,
-        willreturn,
-        nosync,
-        nounwind,
-        nosanitize_bounds,
-        nosanitize_coverage,
-        null_pointer_is_valid,
-        optforfuzzing,
-        optnone,
-        optsize,
+        noimplicitfloat = 13,
+        @"noinline" = 14,
+        nomerge = 66,
+        nonlazybind = 15,
+        noprofile = 73,
+        skipprofile = 85,
+        noredzone = 16,
+        noreturn = 17,
+        norecurse = 48,
+        willreturn = 61,
+        nosync = 63,
+        nounwind = 18,
+        nosanitize_bounds = 79,
+        nosanitize_coverage = 76,
+        null_pointer_is_valid = 67,
+        optforfuzzing = 57,
+        optnone = 37,
+        optsize = 19,
         //preallocated,
-        returns_twice,
-        safestack,
-        sanitize_address,
-        sanitize_memory,
-        sanitize_thread,
-        sanitize_hwaddress,
-        sanitize_memtag,
-        speculative_load_hardening,
-        speculatable,
-        ssp,
-        sspstrong,
-        sspreq,
-        strictfp,
-        uwtable,
-        nocf_check,
-        shadowcallstack,
-        mustprogress,
-        vscale_range,
+        returns_twice = 23,
+        safestack = 44,
+        sanitize_address = 30,
+        sanitize_memory = 32,
+        sanitize_thread = 31,
+        sanitize_hwaddress = 55,
+        sanitize_memtag = 64,
+        speculative_load_hardening = 59,
+        speculatable = 53,
+        ssp = 26,
+        sspstrong = 28,
+        sspreq = 27,
+        strictfp = 54,
+        uwtable = 33,
+        nocf_check = 56,
+        shadowcallstack = 58,
+        mustprogress = 70,
+        vscale_range = 74,
 
         // Global Attributes
-        no_sanitize_address,
-        no_sanitize_hwaddress,
+        no_sanitize_address = 100,
+        no_sanitize_hwaddress = 101,
         //sanitize_memtag,
-        sanitize_address_dyninit,
+        sanitize_address_dyninit = 102,
 
         string = std.math.maxInt(u31),
         none = std.math.maxInt(u32),
@@ -1709,18 +1715,18 @@ pub const FunctionAttributes = enum(u32) {
     }
 };
 
-pub const Linkage = enum {
-    private,
-    internal,
-    weak,
-    weak_odr,
-    linkonce,
-    linkonce_odr,
-    available_externally,
-    appending,
-    common,
-    extern_weak,
-    external,
+pub const Linkage = enum(u4) {
+    private = 9,
+    internal = 3,
+    weak = 1,
+    weak_odr = 10,
+    linkonce = 4,
+    linkonce_odr = 11,
+    available_externally = 12,
+    appending = 2,
+    common = 8,
+    extern_weak = 7,
+    external = 0,
 
     pub fn format(
         self: Linkage,