authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-05 14:56:10-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-05 15:09:35-04:00
logda878dc0776b56c1e2c251857a40415a35e9535a
treee575289a4a6145619f378987306d1913b7a94d84
parentd70853ba39cb1694d91a763ea8492f3aed1494a7

AstGen: fix branch on undefined

`isAlwaysVoid` was being called with the undefined tag added by `addOne`, causing non-deterministic behavior failures with release builds of the compiler. Prevents the following random failure: test/behavior/defer.zig:120:40: error: expected type 'error{One}', found 'void'

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

src/AstGen.zig+4-1
...@@ -2905,7 +2905,10 @@ fn deferStmt(...@@ -2905,7 +2905,10 @@ fn deferStmt(
2905 const sub_scope = if (!have_err_code) &defer_gen.base else blk: {2905 const sub_scope = if (!have_err_code) &defer_gen.base else blk: {
2906 try gz.addDbgBlockBegin();2906 try gz.addDbgBlockBegin();
2907 const ident_name = try gz.astgen.identAsString(payload_token);2907 const ident_name = try gz.astgen.identAsString(payload_token);
2908 remapped_err_code = @intCast(u32, try gz.astgen.instructions.addOne(gz.astgen.gpa));2908 remapped_err_code = @intCast(Zir.Inst.Index, gz.astgen.instructions.len);
2909 // Use a placeholder tag of .as to allow querying things that depend on the tag,
2910 // but undefined data to prevent querying of data.bin.
2911 try gz.astgen.instructions.append(gz.astgen.gpa, .{ .tag = .as, .data = undefined });
2909 const remapped_err_code_ref = Zir.indexToRef(remapped_err_code);2912 const remapped_err_code_ref = Zir.indexToRef(remapped_err_code);
2910 local_val_scope = .{2913 local_val_scope = .{
2911 .parent = &defer_gen.base,2914 .parent = &defer_gen.base,