Skip to content

Commit 7415739

Browse files
committed
Sema: Prevent tail calls of std.builtin.returnError().
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 parent 82b9d9c commit 7415739

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/Sema.zig

+2-2
Original file line numberDiff line numberDiff line change
@@ -19226,7 +19226,7 @@ fn retWithErrTracing(
1922619226
const return_err_fn = Air.internedToRef(try sema.getBuiltin(src, .returnError));
1922719227

1922819228
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");
1923019230
_ = try block.addUnOp(ret_tag, operand);
1923119231
return;
1923219232
}
@@ -19237,7 +19237,7 @@ fn retWithErrTracing(
1923719237

1923819238
var else_block = block.makeSubBlock();
1923919239
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");
1924119241
_ = try else_block.addUnOp(ret_tag, operand);
1924219242

1924319243
try sema.air_extra.ensureUnusedCapacity(gpa, @typeInfo(Air.CondBr).@"struct".fields.len +

0 commit comments

Comments
 (0)