authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-04-22 13:12:35-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-04-22 17:12:35+00:00
logc7067ef6e823a0eaa87880e7a4b8bc89c0b31ab2
tree33265b9a246e48d1e90667abfc379abd9e8a861b
parent7e9a76048213a21bd3d20cc4acfd2ffe9b4b06b7
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

sema: fix memory corruption caused by resolveStructLayout


2 files changed, 4 insertions(+), 2 deletions(-)

src/Sema.zig+3-1
...@@ -30369,7 +30369,9 @@ fn resolveStructLayout(sema: *Sema, ty: Type) CompileError!void {...@@ -30369,7 +30369,9 @@ fn resolveStructLayout(sema: *Sema, ty: Type) CompileError!void {
30369 }30369 }
3037030370
30371 if (struct_obj.layout == .Auto and sema.mod.backendSupportsFeature(.field_reordering)) {30371 if (struct_obj.layout == .Auto and sema.mod.backendSupportsFeature(.field_reordering)) {
30372 const optimized_order = blk: {30372 const optimized_order = if (struct_obj.owner_decl == sema.owner_decl_index)
30373 try sema.perm_arena.alloc(u32, struct_obj.fields.count())
30374 else blk: {
30373 const decl = sema.mod.declPtr(struct_obj.owner_decl);30375 const decl = sema.mod.declPtr(struct_obj.owner_decl);
30374 var decl_arena = decl.value_arena.?.promote(sema.mod.gpa);30376 var decl_arena = decl.value_arena.?.promote(sema.mod.gpa);
30375 defer decl.value_arena.?.* = decl_arena.state;30377 defer decl.value_arena.?.* = decl_arena.state;
src/link/Plan9.zig+1-1
...@@ -1060,7 +1060,7 @@ pub fn getDeclVAddr(...@@ -1060,7 +1060,7 @@ pub fn getDeclVAddr(
1060 .offset = reloc_info.offset,1060 .offset = reloc_info.offset,
1061 .addend = reloc_info.addend,1061 .addend = reloc_info.addend,
1062 });1062 });
1063 return undefined;1063 return 0;
1064}1064}
10651065
1066pub fn getDeclBlock(self: *const Plan9, index: DeclBlock.Index) DeclBlock {1066pub fn getDeclBlock(self: *const Plan9, index: DeclBlock.Index) DeclBlock {