Commit da878dc077

Jacob Young <jacobly0@users.noreply.github.com>
2023-05-05 20:56:10
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 parent d70853b
Changed files (1)
src/AstGen.zig
@@ -2905,7 +2905,10 @@ fn deferStmt(
     const sub_scope = if (!have_err_code) &defer_gen.base else blk: {
         try gz.addDbgBlockBegin();
         const ident_name = try gz.astgen.identAsString(payload_token);
-        remapped_err_code = @intCast(u32, try gz.astgen.instructions.addOne(gz.astgen.gpa));
+        remapped_err_code = @intCast(Zir.Inst.Index, gz.astgen.instructions.len);
+        // Use a placeholder tag of .as to allow querying things that depend on the tag,
+        // but undefined data to prevent querying of data.bin.
+        try gz.astgen.instructions.append(gz.astgen.gpa, .{ .tag = .as, .data = undefined });
         const remapped_err_code_ref = Zir.indexToRef(remapped_err_code);
         local_val_scope = .{
             .parent = &defer_gen.base,