Commit c7067ef6e8

Casey Banner <kcbanner@gmail.com>
2023-04-22 19:12:35
sema: fix memory corruption caused by resolveStructLayout
1 parent 7e9a760
Changed files (2)
src/link/Plan9.zig
@@ -1060,7 +1060,7 @@ pub fn getDeclVAddr(
         .offset = reloc_info.offset,
         .addend = reloc_info.addend,
     });
-    return undefined;
+    return 0;
 }
 
 pub fn getDeclBlock(self: *const Plan9, index: DeclBlock.Index) DeclBlock {
src/Sema.zig
@@ -30369,7 +30369,9 @@ fn resolveStructLayout(sema: *Sema, ty: Type) CompileError!void {
         }
 
         if (struct_obj.layout == .Auto and sema.mod.backendSupportsFeature(.field_reordering)) {
-            const optimized_order = blk: {
+            const optimized_order = if (struct_obj.owner_decl == sema.owner_decl_index)
+                try sema.perm_arena.alloc(u32, struct_obj.fields.count())
+            else blk: {
                 const decl = sema.mod.declPtr(struct_obj.owner_decl);
                 var decl_arena = decl.value_arena.?.promote(sema.mod.gpa);
                 defer decl.value_arena.?.* = decl_arena.state;