zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4dd724d06a99d7b82b1b1758d28aa5559550f5bb (tree)
parent eadcefc124b4ee61c99c8ed97434ed26e24c5f83
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sat,  1 May 2021 23:31:26 -0700

Sema: fix struct decl decoding ZIR incorrectly

Diffstat:
Msrc/Sema.zig | 7++++---
Msrc/Zir.zig | 3+--
2 files changed, 5 insertions(+), 5 deletions(-)

diff --git 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); diff --git a/src/Zir.zig b/src/Zir.zig @@ -3443,9 +3443,8 @@ const Writer = struct { 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; + 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) {