diff --git a/src/AstGen.zig b/src/AstGen.zig index 6da1c0213c..eacd2d53ea 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -8324,7 +8324,7 @@ fn builtinCall( .trap => { try emitDbgNode(gz, node); _ = try gz.addNode(.trap, node); - return rvalue(gz, ri, .void_value, node); + return rvalue(gz, ri, .unreachable_value, node); }, .error_to_int => { const operand = try expr(gz, scope, .{ .rl = .none }, params[0]); diff --git a/test/behavior/builtin_functions_returning_void_or_noreturn.zig b/test/behavior/builtin_functions_returning_void_or_noreturn.zig index d32215c964..ea53658888 100644 --- a/test/behavior/builtin_functions_returning_void_or_noreturn.zig +++ b/test/behavior/builtin_functions_returning_void_or_noreturn.zig @@ -26,5 +26,4 @@ test { try testing.expectEqual({}, @setEvalBranchQuota(0)); try testing.expectEqual({}, @setFloatMode(.Optimized)); try testing.expectEqual({}, @setRuntimeSafety(true)); - try testing.expectEqual(noreturn, @TypeOf(if (true) @trap() else {})); } diff --git a/test/cases/compile_errors/noreturn_builtins_divert_control_flow.zig b/test/cases/compile_errors/noreturn_builtins_divert_control_flow.zig new file mode 100644 index 0000000000..32627f1652 --- /dev/null +++ b/test/cases/compile_errors/noreturn_builtins_divert_control_flow.zig @@ -0,0 +1,23 @@ +export fn entry1() void { + @trap(); + @trap(); +} +export fn entry2() void { + @panic(""); + @panic(""); +} +export fn entry3() void { + @compileError(""); + @compileError(""); +} + +// error +// backend=stage2 +// target=native +// +// :3:5: error: unreachable code +// :2:5: note: control flow is diverted here +// :7:5: error: unreachable code +// :6:5: note: control flow is diverted here +// :11:5: error: unreachable code +// :10:5: note: control flow is diverted here