Commit db54cd247d

Veikka Tuominen <git@vexu.eu>
2022-09-02 13:05:27
Sema: do not emit dbg_inline_end after NoReturn
Closes #12698
1 parent 8b58dab
Changed files (4)
src
test
standalone
noreturn_call
src/Sema.zig
@@ -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,
test/standalone/noreturn_call/as_arg.zig
@@ -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"));
+}
test/standalone/noreturn_call/inline.zig
@@ -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);
+}
test/standalone.zig
@@ -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", .{});