| author | |
| committer | |
| log | 7415739e36cf16574b754dda5ce03c0026b6907c |
| tree | e5a46f37de3cff3df28c4f4c441e1763ee9e7dea |
| parent | 82b9d9c0f6adf471543b160e15eaeb2a14c722cb |
| signature |
LLVM 20 started tail-calling it in some of our test cases, resulting in:
error: AndMyCarIsOutOfGas
/home/alexrp/Source/ziglang/zig-llvm20/repro.zig:2:5: 0x103ef9d in main (repro)
return error.TheSkyIsFalling;
^
/home/alexrp/Source/ziglang/zig-llvm20/repro.zig:6:5: 0x103efa5 in main (repro)
return error.AndMyCarIsOutOfGas;
^
/home/alexrp/Source/ziglang/zig-llvm20/lib/std/start.zig:656:37: 0x103ee83 in posixCallMainAndExit (repro)
const result = root.main() catch |err| {
^
instead of the expected:
error: AndMyCarIsOutOfGas
/home/alexrp/Source/ziglang/zig-llvm20/repro.zig:2:5: 0x103f00d in main (repro)
return error.TheSkyIsFalling;
^
/home/alexrp/Source/ziglang/zig-llvm20/repro.zig:6:5: 0x103f015 in main (repro)
return error.AndMyCarIsOutOfGas;
^
/home/alexrp/Source/ziglang/zig-llvm20/repro.zig:11:9: 0x103f01d in main (repro)
try bar();
^1 files changed, 2 insertions(+), 2 deletions(-)
src/Sema.zig+2-2| ... | ... | @@ -19226,7 +19226,7 @@ fn retWithErrTracing( |
| 19226 | 19226 | const return_err_fn = Air.internedToRef(try sema.getBuiltin(src, .returnError)); |
| 19227 | 19227 | |
| 19228 | 19228 | if (!need_check) { |
| 19229 | try sema.callBuiltin(block, src, return_err_fn, .never_inline, &.{}, .@"error return"); | |
| 19229 | try sema.callBuiltin(block, src, return_err_fn, .never_tail, &.{}, .@"error return"); | |
| 19230 | 19230 | _ = try block.addUnOp(ret_tag, operand); |
| 19231 | 19231 | return; |
| 19232 | 19232 | } |
| ... | ... | @@ -19237,7 +19237,7 @@ fn retWithErrTracing( |
| 19237 | 19237 | |
| 19238 | 19238 | var else_block = block.makeSubBlock(); |
| 19239 | 19239 | defer else_block.instructions.deinit(gpa); |
| 19240 | try sema.callBuiltin(&else_block, src, return_err_fn, .never_inline, &.{}, .@"error return"); | |
| 19240 | try sema.callBuiltin(&else_block, src, return_err_fn, .never_tail, &.{}, .@"error return"); | |
| 19241 | 19241 | _ = try else_block.addUnOp(ret_tag, operand); |
| 19242 | 19242 | |
| 19243 | 19243 | try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.CondBr).@"struct".fields.len + |