about summary refs log tree commit diff
path: root/tests/ui/no_std
diff options
context:
space:
mode:
authorNilstrieb <48135649+Nilstrieb@users.noreply.github.com>2023-10-02 12:32:31 +0000
committerNilstrieb <48135649+Nilstrieb@users.noreply.github.com>2024-01-10 21:18:54 +0100
commitda26317a8a69fed3f7b96457c643121e75954933 (patch)
tree22c13161c8a62b9557bdd713d0e4911b7522d612 /tests/ui/no_std
parenta2d9d73e608f1b24eba840c4fd2d68dbe3b65e01 (diff)
downloadrust-da26317a8a69fed3f7b96457c643121e75954933.tar.gz
rust-da26317a8a69fed3f7b96457c643121e75954933.zip
Stop mentioning internal lang items in no_std binary errors
When writing a no_std binary, you'll be greeted with nonsensical errors
mentioning lang items like eh_personality and start. That's pretty bad
because it makes you think that you need to define them somewhere! But
oh no, now you're getting the `internal_features` lint telling you that
you shouldn't use them! But you need a no_std binary! What now?

No problem! Writing a no_std binary is super easy. Just use panic=abort
and supply your own platform specific entrypoint symbol (like `main`)
and you're good to go. Would be nice if the compiler told you that,
right?

This makes it so that it does do that.
Diffstat (limited to 'tests/ui/no_std')
-rw-r--r--tests/ui/no_std/no-std-no-start-binary.rs13
-rw-r--r--tests/ui/no_std/no-std-no-start-binary.stderr6
-rw-r--r--tests/ui/no_std/no-std-unwind-binary.rs15
-rw-r--r--tests/ui/no_std/no-std-unwind-binary.stderr7
4 files changed, 41 insertions, 0 deletions
diff --git a/tests/ui/no_std/no-std-no-start-binary.rs b/tests/ui/no_std/no-std-no-start-binary.rs
new file mode 100644
index 00000000000..ce1c871f6a6
--- /dev/null
+++ b/tests/ui/no_std/no-std-no-start-binary.rs
@@ -0,0 +1,13 @@
+// compile-flags: -Cpanic=abort --emit link
+// error-pattern:using `fn main` requires the standard library
+
+// Make sure that we don't emit an error message mentioning internal lang items.
+
+#![no_std]
+
+#[panic_handler]
+fn handler(_info: &core::panic::PanicInfo<'_>) -> ! {
+    loop {}
+}
+
+fn main() {}
diff --git a/tests/ui/no_std/no-std-no-start-binary.stderr b/tests/ui/no_std/no-std-no-start-binary.stderr
new file mode 100644
index 00000000000..dd06c234da2
--- /dev/null
+++ b/tests/ui/no_std/no-std-no-start-binary.stderr
@@ -0,0 +1,6 @@
+error: using `fn main` requires the standard library
+   |
+   = help: use `#![no_main]` to bypass the Rust generated entrypoint and declare a platform specific entrypoint yourself, usually with `#[no_mangle]`
+
+error: aborting due to 1 previous error
+
diff --git a/tests/ui/no_std/no-std-unwind-binary.rs b/tests/ui/no_std/no-std-unwind-binary.rs
new file mode 100644
index 00000000000..7a9dfd7a48d
--- /dev/null
+++ b/tests/ui/no_std/no-std-unwind-binary.rs
@@ -0,0 +1,15 @@
+// error-pattern:unwinding panics are not supported without std
+// needs-unwind
+// compile-flags: -Cpanic=unwind
+
+// Make sure that we don't emit an error message mentioning internal lang items.
+
+#![no_std]
+#![no_main]
+
+#[panic_handler]
+fn handler(_info: &core::panic::PanicInfo<'_>) -> ! {
+    loop {}
+}
+
+fn main() {}
diff --git a/tests/ui/no_std/no-std-unwind-binary.stderr b/tests/ui/no_std/no-std-unwind-binary.stderr
new file mode 100644
index 00000000000..a3b54fe33ab
--- /dev/null
+++ b/tests/ui/no_std/no-std-unwind-binary.stderr
@@ -0,0 +1,7 @@
+error: unwinding panics are not supported without std
+   |
+   = help: using nightly cargo, use -Zbuild-std with panic="abort" to avoid unwinding
+   = note: since the core library is usually precompiled with panic="unwind", rebuilding your crate with panic="abort" may not be enough to fix the problem
+
+error: aborting due to 1 previous error
+