authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-01 23:31:26-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-05-01 23:31:26-07:00
log4dd724d06a99d7b82b1b1758d28aa5559550f5bb
treea401630305207feb99915a012fa9deaa959f8212
parenteadcefc124b4ee61c99c8ed97434ed26e24c5f83

Sema: fix struct decl decoding ZIR incorrectly


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

src/Sema.zig+4-3
...@@ -695,6 +695,7 @@ pub fn analyzeStructDecl(...@@ -695,6 +695,7 @@ pub fn analyzeStructDecl(
695 assert(body.len == 0);695 assert(body.len == 0);
696 return;696 return;
697 }697 }
698 extra_index += body.len;
698699
699 try struct_obj.fields.ensureCapacity(&new_decl_arena.allocator, fields_len);700 try struct_obj.fields.ensureCapacity(&new_decl_arena.allocator, fields_len);
700701
...@@ -736,9 +737,8 @@ pub fn analyzeStructDecl(...@@ -736,9 +737,8 @@ pub fn analyzeStructDecl(
736 const bits_per_field = 4;737 const bits_per_field = 4;
737 const fields_per_u32 = 32 / bits_per_field;738 const fields_per_u32 = 32 / bits_per_field;
738 const bit_bags_count = std.math.divCeil(usize, fields_len, fields_per_u32) catch unreachable;739 const bit_bags_count = std.math.divCeil(usize, fields_len, fields_per_u32) catch unreachable;
739 const body_end = extra_index + body.len;740 var bit_bag_index: usize = extra_index;
740 extra_index += bit_bags_count;741 extra_index += bit_bags_count;
741 var bit_bag_index: usize = body_end;
742 var cur_bit_bag: u32 = undefined;742 var cur_bit_bag: u32 = undefined;
743 var field_i: u32 = 0;743 var field_i: u32 = 0;
744 while (field_i < fields_len) : (field_i += 1) {744 while (field_i < fields_len) : (field_i += 1) {
...@@ -903,9 +903,10 @@ fn zirEnumDecl(...@@ -903,9 +903,10 @@ fn zirEnumDecl(
903 try new_decl.finalizeNewArena(&new_decl_arena);903 try new_decl.finalizeNewArena(&new_decl_arena);
904 return sema.analyzeDeclVal(block, src, new_decl);904 return sema.analyzeDeclVal(block, src, new_decl);
905 }905 }
906 extra_index += body.len;
906907
907 const bit_bags_count = std.math.divCeil(usize, fields_len, 32) catch unreachable;908 const bit_bags_count = std.math.divCeil(usize, fields_len, 32) catch unreachable;
908 const body_end = extra_index + body.len;909 const body_end = extra_index;
909 extra_index += bit_bags_count;910 extra_index += bit_bags_count;
910911
911 try enum_obj.fields.ensureCapacity(&new_decl_arena.allocator, fields_len);912 try enum_obj.fields.ensureCapacity(&new_decl_arena.allocator, fields_len);
src/Zir.zig+1-2
...@@ -3443,9 +3443,8 @@ const Writer = struct {...@@ -3443,9 +3443,8 @@ const Writer = struct {
3443 const bits_per_field = 4;3443 const bits_per_field = 4;
3444 const fields_per_u32 = 32 / bits_per_field;3444 const fields_per_u32 = 32 / bits_per_field;
3445 const bit_bags_count = std.math.divCeil(usize, fields_len, fields_per_u32) catch unreachable;3445 const bit_bags_count = std.math.divCeil(usize, fields_len, fields_per_u32) catch unreachable;
3446 const body_end = extra_index;3446 var bit_bag_index: usize = extra_index;
3447 extra_index += bit_bags_count;3447 extra_index += bit_bags_count;
3448 var bit_bag_index: usize = body_end;
3449 var cur_bit_bag: u32 = undefined;3448 var cur_bit_bag: u32 = undefined;
3450 var field_i: u32 = 0;3449 var field_i: u32 = 0;
3451 while (field_i < fields_len) : (field_i += 1) {3450 while (field_i < fields_len) : (field_i += 1) {