From c7067ef6e823a0eaa87880e7a4b8bc89c0b31ab2 Mon Sep 17 00:00:00 2001 From: Casey Banner Date: Sat, 22 Apr 2023 13:12:35 -0400 Subject: [PATCH] sema: fix memory corruption caused by resolveStructLayout --- src/Sema.zig | 4 +++- src/link/Plan9.zig | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index b8afce2cdd..95aa667950 100644 --- a/src/Sema.zig +++ b/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; diff --git a/src/link/Plan9.zig b/src/link/Plan9.zig index cf6e4f8418..e7b401e8af 100644 --- a/src/link/Plan9.zig +++ b/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 {