aboutsummaryrefslogtreecommitdiff
path: root/test/cases/compile_errors
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-08-02 15:17:51 -0400
committerAndrew Kelley <andrew@ziglang.org>2023-08-02 16:12:30 -0700
commit89d660c3ebed27996ac08c9cb3d75718d6a007db (patch)
treec7bd0af065fbb5b1f1de62415653602ea623c100 /test/cases/compile_errors
parent9e19969e09ffee8aca39f28a42d566cc62b479d6 (diff)
downloadzig-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.zig24
-rw-r--r--test/cases/compile_errors/return_from_naked_function.zig14
-rw-r--r--test/cases/compile_errors/unreachable_in_naked_func.zig30
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