diff options
| author | zooster <r00ster91@proton.me> | 2023-05-18 23:00:35 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-18 17:00:35 -0400 |
| commit | 3d64ed0353ba7ec1ca46f4779fe5d32af8d17358 (patch) | |
| tree | 71f63ffcc5da6ea49c80d3aefa095b9178dac57b /test | |
| parent | 7cf2cbb33ef34c1d211135f56d30fe23b6cacd42 (diff) | |
| download | zig-3d64ed0353ba7ec1ca46f4779fe5d32af8d17358.tar.gz zig-3d64ed0353ba7ec1ca46f4779fe5d32af8d17358.zip | |
make `@trap` return unreachable/noreturn (#15749)
`@trap` is a special function that we know never returns so it should
behave just like `@panic` and `@compileError` do currently and cause the
"unreachable code" + "control flow is diverted here" compile error.
Currently, `@trap(); @trap();` does not cause this error. Now it does.
Diffstat (limited to 'test')
| -rw-r--r-- | test/behavior/builtin_functions_returning_void_or_noreturn.zig | 1 | ||||
| -rw-r--r-- | test/cases/compile_errors/noreturn_builtins_divert_control_flow.zig | 23 |
2 files changed, 23 insertions, 1 deletions
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 |
