| author | |
| committer | |
| log | db54cd247ddb8bf7b4225eaaf1e7a851151f8f0b |
| tree | 0fa0f95f5b33a02faa8b46362d0bbd28d6d11d39 |
| parent | 8b58dab78b8a157a39377654691324dd71f77d23 |
Closes #126984 files changed, 26 insertions(+), 2 deletions(-)
src/Sema.zig+6-2| ... | @@ -5569,7 +5569,11 @@ fn zirCall( | ... | @@ -5569,7 +5569,11 @@ fn zirCall( |
| 5569 | const param_ty_inst = try sema.addType(param_ty); | 5569 | const param_ty_inst = try sema.addType(param_ty); |
| 5570 | try sema.inst_map.put(sema.gpa, inst, param_ty_inst); | 5570 | try sema.inst_map.put(sema.gpa, inst, param_ty_inst); |
| 5571 | 5571 | ||
| 5572 | resolved_args[arg_index] = try sema.resolveBody(block, args_body[arg_start..arg_end], inst); | 5572 | const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst); |
| 5573 | if (sema.typeOf(resolved).zigTypeTag() == .NoReturn) { | ||
| 5574 | return resolved; | ||
| 5575 | } | ||
| 5576 | resolved_args[arg_index] = resolved; | ||
| 5573 | } | 5577 | } |
| 5574 | 5578 | ||
| 5575 | return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src); | 5579 | return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src); |
| ... | @@ -6047,7 +6051,7 @@ fn analyzeCall( | ... | @@ -6047,7 +6051,7 @@ fn analyzeCall( |
| 6047 | break :result try sema.analyzeBlockBody(block, call_src, &child_block, merges); | 6051 | break :result try sema.analyzeBlockBody(block, call_src, &child_block, merges); |
| 6048 | }; | 6052 | }; |
| 6049 | 6053 | ||
| 6050 | if (!is_comptime_call) { | 6054 | if (!is_comptime_call and sema.typeOf(result).zigTypeTag() != .NoReturn) { |
| 6051 | try sema.emitDbgInline( | 6055 | try sema.emitDbgInline( |
| 6052 | block, | 6056 | block, |
| 6053 | module_fn, | 6057 | module_fn, |
test/standalone.zig+2| ... | @@ -13,6 +13,8 @@ pub fn addCases(cases: *tests.StandaloneContext) void { | ... | @@ -13,6 +13,8 @@ pub fn addCases(cases: *tests.StandaloneContext) void { |
| 13 | cases.add("test/standalone/guess_number/main.zig"); | 13 | cases.add("test/standalone/guess_number/main.zig"); |
| 14 | cases.add("test/standalone/main_return_error/error_u8.zig"); | 14 | cases.add("test/standalone/main_return_error/error_u8.zig"); |
| 15 | cases.add("test/standalone/main_return_error/error_u8_non_zero.zig"); | 15 | cases.add("test/standalone/main_return_error/error_u8_non_zero.zig"); |
| 16 | cases.add("test/standalone/noreturn_call/inline.zig"); | ||
| 17 | cases.add("test/standalone/noreturn_call/as_arg.zig"); | ||
| 16 | cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{}); | 18 | cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{}); |
| 17 | cases.addBuildFile("test/standalone/shared_library/build.zig", .{}); | 19 | cases.addBuildFile("test/standalone/shared_library/build.zig", .{}); |
| 18 | cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{}); | 20 | cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{}); |
test/standalone/noreturn_call/as_arg.zig created+8| ... | @@ -0,0 +1,8 @@ | ||
| 1 | const std = @import("std"); | ||
| 2 | fn foo() noreturn { | ||
| 3 | std.process.exit(0); | ||
| 4 | } | ||
| 5 | fn bar(_: u8, _: u8) void {} | ||
| 6 | pub fn main() void { | ||
| 7 | bar(foo(), @compileError("bad")); | ||
| 8 | } | ||
test/standalone/noreturn_call/inline.zig created+10| ... | @@ -0,0 +1,10 @@ | ||
| 1 | pub fn main() void { | ||
| 2 | _ = bar(); | ||
| 3 | } | ||
| 4 | inline fn bar() u8 { | ||
| 5 | noret(); | ||
| 6 | } | ||
| 7 | const std = @import("std"); | ||
| 8 | inline fn noret() noreturn { | ||
| 9 | std.process.exit(0); | ||
| 10 | } | ||