aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-05-01 23:31:26 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-05-01 23:31:26 -0700
commit4dd724d06a99d7b82b1b1758d28aa5559550f5bb (patch)
treea401630305207feb99915a012fa9deaa959f8212 /src/Sema.zig
parenteadcefc124b4ee61c99c8ed97434ed26e24c5f83 (diff)
downloadzig-4dd724d06a99d7b82b1b1758d28aa5559550f5bb.tar.gz
zig-4dd724d06a99d7b82b1b1758d28aa5559550f5bb.zip
Sema: fix struct decl decoding ZIR incorrectly
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 898093a839..a79a8eaacb 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -695,6 +695,7 @@ pub fn analyzeStructDecl(
assert(body.len == 0);
return;
}
+ extra_index += body.len;
try struct_obj.fields.ensureCapacity(&new_decl_arena.allocator, fields_len);
@@ -736,9 +737,8 @@ pub fn analyzeStructDecl(
const bits_per_field = 4;
const fields_per_u32 = 32 / bits_per_field;
const bit_bags_count = std.math.divCeil(usize, fields_len, fields_per_u32) catch unreachable;
- const body_end = extra_index + body.len;
+ var bit_bag_index: usize = extra_index;
extra_index += bit_bags_count;
- var bit_bag_index: usize = body_end;
var cur_bit_bag: u32 = undefined;
var field_i: u32 = 0;
while (field_i < fields_len) : (field_i += 1) {
@@ -903,9 +903,10 @@ fn zirEnumDecl(
try new_decl.finalizeNewArena(&new_decl_arena);
return sema.analyzeDeclVal(block, src, new_decl);
}
+ extra_index += body.len;
const bit_bags_count = std.math.divCeil(usize, fields_len, 32) catch unreachable;
- const body_end = extra_index + body.len;
+ const body_end = extra_index;
extra_index += bit_bags_count;
try enum_obj.fields.ensureCapacity(&new_decl_arena.allocator, fields_len);