mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
parent
8b58dab78b
commit
db54cd247d
4 changed files with 26 additions and 2 deletions
|
|
@ -5569,7 +5569,11 @@ fn zirCall(
|
|||
const param_ty_inst = try sema.addType(param_ty);
|
||||
try sema.inst_map.put(sema.gpa, inst, param_ty_inst);
|
||||
|
||||
resolved_args[arg_index] = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
|
||||
const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
|
||||
if (sema.typeOf(resolved).zigTypeTag() == .NoReturn) {
|
||||
return resolved;
|
||||
}
|
||||
resolved_args[arg_index] = resolved;
|
||||
}
|
||||
|
||||
return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
|
||||
|
|
@ -6047,7 +6051,7 @@ fn analyzeCall(
|
|||
break :result try sema.analyzeBlockBody(block, call_src, &child_block, merges);
|
||||
};
|
||||
|
||||
if (!is_comptime_call) {
|
||||
if (!is_comptime_call and sema.typeOf(result).zigTypeTag() != .NoReturn) {
|
||||
try sema.emitDbgInline(
|
||||
block,
|
||||
module_fn,
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
|
|||
cases.add("test/standalone/guess_number/main.zig");
|
||||
cases.add("test/standalone/main_return_error/error_u8.zig");
|
||||
cases.add("test/standalone/main_return_error/error_u8_non_zero.zig");
|
||||
cases.add("test/standalone/noreturn_call/inline.zig");
|
||||
cases.add("test/standalone/noreturn_call/as_arg.zig");
|
||||
cases.addBuildFile("test/standalone/main_pkg_path/build.zig", .{});
|
||||
cases.addBuildFile("test/standalone/shared_library/build.zig", .{});
|
||||
cases.addBuildFile("test/standalone/mix_o_files/build.zig", .{});
|
||||
|
|
|
|||
8
test/standalone/noreturn_call/as_arg.zig
Normal file
8
test/standalone/noreturn_call/as_arg.zig
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
const std = @import("std");
|
||||
fn foo() noreturn {
|
||||
std.process.exit(0);
|
||||
}
|
||||
fn bar(_: u8, _: u8) void {}
|
||||
pub fn main() void {
|
||||
bar(foo(), @compileError("bad"));
|
||||
}
|
||||
10
test/standalone/noreturn_call/inline.zig
Normal file
10
test/standalone/noreturn_call/inline.zig
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
pub fn main() void {
|
||||
_ = bar();
|
||||
}
|
||||
inline fn bar() u8 {
|
||||
noret();
|
||||
}
|
||||
const std = @import("std");
|
||||
inline fn noret() noreturn {
|
||||
std.process.exit(0);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue