aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorCasey Banner <kcbanner@gmail.com>2023-04-22 13:12:35 -0400
committerGitHub <noreply@github.com>2023-04-22 17:12:35 +0000
commitc7067ef6e823a0eaa87880e7a4b8bc89c0b31ab2 (patch)
tree33265b9a246e48d1e90667abfc379abd9e8a861b /src/Sema.zig
parent7e9a76048213a21bd3d20cc4acfd2ffe9b4b06b7 (diff)
downloadzig-c7067ef6e823a0eaa87880e7a4b8bc89c0b31ab2.tar.gz
zig-c7067ef6e823a0eaa87880e7a4b8bc89c0b31ab2.zip
sema: fix memory corruption caused by resolveStructLayout
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig4
1 files changed, 3 insertions, 1 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;