diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-08-02 15:17:51 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2023-08-02 16:12:30 -0700 |
| commit | 89d660c3ebed27996ac08c9cb3d75718d6a007db (patch) | |
| tree | c7bd0af065fbb5b1f1de62415653602ea623c100 /test/cases/compile_errors | |
| parent | 9e19969e09ffee8aca39f28a42d566cc62b479d6 (diff) | |
| download | zig-89d660c3ebed27996ac08c9cb3d75718d6a007db.tar.gz zig-89d660c3ebed27996ac08c9cb3d75718d6a007db.zip | |
Sema: improve new error messages related to naked functions
* pass a source location to all safety checks
* add notes about what is disallowed in naked functions
Closes #16651
Diffstat (limited to 'test/cases/compile_errors')
| -rw-r--r-- | test/cases/compile_errors/call_from_naked_func.zig | 24 | ||||
| -rw-r--r-- | test/cases/compile_errors/return_from_naked_function.zig | 14 | ||||
| -rw-r--r-- | test/cases/compile_errors/unreachable_in_naked_func.zig | 30 |
3 files changed, 68 insertions, 0 deletions
diff --git a/test/cases/compile_errors/call_from_naked_func.zig b/test/cases/compile_errors/call_from_naked_func.zig new file mode 100644 index 0000000000..7803974d01 --- /dev/null +++ b/test/cases/compile_errors/call_from_naked_func.zig @@ -0,0 +1,24 @@ +export fn runtimeCall() callconv(.Naked) void { + f(); +} + +export fn runtimeBuiltinCall() callconv(.Naked) void { + @call(.auto, f, .{}); +} + +export fn comptimeCall() callconv(.Naked) void { + comptime f(); +} + +export fn comptimeBuiltinCall() callconv(.Naked) void { + @call(.compile_time, f, .{}); +} + +fn f() void {} + +// error +// backend=llvm +// target=native +// +// :2:6: error: runtime call not allowed in naked function +// :6:5: error: runtime @call not allowed in naked function diff --git a/test/cases/compile_errors/return_from_naked_function.zig b/test/cases/compile_errors/return_from_naked_function.zig new file mode 100644 index 0000000000..083b4cb70b --- /dev/null +++ b/test/cases/compile_errors/return_from_naked_function.zig @@ -0,0 +1,14 @@ +fn foo() callconv(.Naked) void { + return; +} + +comptime { + _ = &foo; +} + +// error +// backend=llvm +// target=native +// +// :2:5: error: cannot return from naked function +// :2:5: note: can only return using assembly diff --git a/test/cases/compile_errors/unreachable_in_naked_func.zig b/test/cases/compile_errors/unreachable_in_naked_func.zig new file mode 100644 index 0000000000..9a3658013a --- /dev/null +++ b/test/cases/compile_errors/unreachable_in_naked_func.zig @@ -0,0 +1,30 @@ +fn runtimeSafetyDefault() callconv(.Naked) void { + unreachable; +} + +fn runtimeSafetyOn() callconv(.Naked) void { + @setRuntimeSafety(true); + unreachable; +} + +fn runtimeSafetyOff() callconv(.Naked) void { + @setRuntimeSafety(false); + unreachable; +} + +comptime { + _ = &runtimeSafetyDefault; + _ = &runtimeSafetyOn; + _ = &runtimeSafetyOff; +} + +// error +// backend=llvm +// target=native +// +// :2:5: error: runtime safety check not allowed in naked function +// :2:5: note: use @setRuntimeSafety to disable runtime safety +// :2:5: note: the end of a naked function is implicitly unreachable +// :7:5: error: runtime safety check not allowed in naked function +// :7:5: note: use @setRuntimeSafety to disable runtime safety +// :7:5: note: the end of a naked function is implicitly unreachable |
