summaryrefslogtreecommitdiffstats
path: root/tests/ui/alloc-error
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /tests/ui/alloc-error
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/alloc-error')
-rw-r--r--tests/ui/alloc-error/alloc-error-handler-bad-signature-1.rs18
-rw-r--r--tests/ui/alloc-error/alloc-error-handler-bad-signature-1.stderr44
-rw-r--r--tests/ui/alloc-error/alloc-error-handler-bad-signature-2.rs17
-rw-r--r--tests/ui/alloc-error/alloc-error-handler-bad-signature-2.stderr50
-rw-r--r--tests/ui/alloc-error/alloc-error-handler-bad-signature-3.rs15
-rw-r--r--tests/ui/alloc-error/alloc-error-handler-bad-signature-3.stderr25
-rw-r--r--tests/ui/alloc-error/default-alloc-error-hook.rs28
7 files changed, 197 insertions, 0 deletions
diff --git a/tests/ui/alloc-error/alloc-error-handler-bad-signature-1.rs b/tests/ui/alloc-error/alloc-error-handler-bad-signature-1.rs
new file mode 100644
index 000000000..cd06423e3
--- /dev/null
+++ b/tests/ui/alloc-error/alloc-error-handler-bad-signature-1.rs
@@ -0,0 +1,18 @@
+// compile-flags:-C panic=abort
+
+#![feature(alloc_error_handler)]
+#![no_std]
+#![no_main]
+
+use core::alloc::Layout;
+
+#[alloc_error_handler]
+fn oom(
+ info: &Layout, //~^ ERROR mismatched types
+) -> () //~^^ ERROR mismatched types
+{
+ loop {}
+}
+
+#[panic_handler]
+fn panic(_: &core::panic::PanicInfo) -> ! { loop {} }
diff --git a/tests/ui/alloc-error/alloc-error-handler-bad-signature-1.stderr b/tests/ui/alloc-error/alloc-error-handler-bad-signature-1.stderr
new file mode 100644
index 000000000..59192a1ec
--- /dev/null
+++ b/tests/ui/alloc-error/alloc-error-handler-bad-signature-1.stderr
@@ -0,0 +1,44 @@
+error[E0308]: mismatched types
+ --> $DIR/alloc-error-handler-bad-signature-1.rs:10:1
+ |
+LL | #[alloc_error_handler]
+ | ---------------------- in this procedural macro expansion
+LL | // fn oom(
+LL | || info: &Layout,
+LL | || ) -> ()
+ | ||_______- arguments to this function are incorrect
+LL | | {
+LL | | loop {}
+LL | | }
+ | |__^ expected `&Layout`, found struct `Layout`
+ |
+note: function defined here
+ --> $DIR/alloc-error-handler-bad-signature-1.rs:10:4
+ |
+LL | fn oom(
+ | ^^^
+LL | info: &Layout,
+ | -------------
+ = note: this error originates in the attribute macro `alloc_error_handler` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0308]: mismatched types
+ --> $DIR/alloc-error-handler-bad-signature-1.rs:10:1
+ |
+LL | #[alloc_error_handler]
+ | ---------------------- in this procedural macro expansion
+LL | // fn oom(
+LL | || info: &Layout,
+LL | || ) -> ()
+ | ||_______^ expected `!`, found `()`
+LL | | {
+LL | | loop {}
+LL | | }
+ | |__- expected `!` because of return type
+ |
+ = note: expected type `!`
+ found unit type `()`
+ = note: this error originates in the attribute macro `alloc_error_handler` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/alloc-error/alloc-error-handler-bad-signature-2.rs b/tests/ui/alloc-error/alloc-error-handler-bad-signature-2.rs
new file mode 100644
index 000000000..4f76257fc
--- /dev/null
+++ b/tests/ui/alloc-error/alloc-error-handler-bad-signature-2.rs
@@ -0,0 +1,17 @@
+// compile-flags:-C panic=abort
+
+#![feature(alloc_error_handler)]
+#![no_std]
+#![no_main]
+
+struct Layout;
+
+#[alloc_error_handler]
+fn oom(
+ info: Layout, //~^ ERROR mismatched types
+) { //~^^ ERROR mismatched types
+ loop {}
+}
+
+#[panic_handler]
+fn panic(_: &core::panic::PanicInfo) -> ! { loop {} }
diff --git a/tests/ui/alloc-error/alloc-error-handler-bad-signature-2.stderr b/tests/ui/alloc-error/alloc-error-handler-bad-signature-2.stderr
new file mode 100644
index 000000000..7d23c2fc0
--- /dev/null
+++ b/tests/ui/alloc-error/alloc-error-handler-bad-signature-2.stderr
@@ -0,0 +1,50 @@
+error[E0308]: mismatched types
+ --> $DIR/alloc-error-handler-bad-signature-2.rs:10:1
+ |
+LL | #[alloc_error_handler]
+ | ---------------------- in this procedural macro expansion
+LL | // fn oom(
+LL | || info: Layout,
+LL | || ) {
+ | ||_- arguments to this function are incorrect
+LL | | loop {}
+LL | | }
+ | |__^ expected struct `Layout`, found struct `core::alloc::Layout`
+ |
+ = note: struct `core::alloc::Layout` and struct `Layout` have similar names, but are actually distinct types
+note: struct `core::alloc::Layout` is defined in crate `core`
+ --> $SRC_DIR/core/src/alloc/layout.rs:LL:COL
+note: struct `Layout` is defined in the current crate
+ --> $DIR/alloc-error-handler-bad-signature-2.rs:7:1
+ |
+LL | struct Layout;
+ | ^^^^^^^^^^^^^
+note: function defined here
+ --> $DIR/alloc-error-handler-bad-signature-2.rs:10:4
+ |
+LL | fn oom(
+ | ^^^
+LL | info: Layout,
+ | ------------
+ = note: this error originates in the attribute macro `alloc_error_handler` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0308]: mismatched types
+ --> $DIR/alloc-error-handler-bad-signature-2.rs:10:1
+ |
+LL | #[alloc_error_handler]
+ | ---------------------- in this procedural macro expansion
+LL | // fn oom(
+LL | || info: Layout,
+LL | || ) {
+ | ||_^ expected `!`, found `()`
+LL | | loop {}
+LL | | }
+ | |__- expected `!` because of return type
+ |
+ = note: expected type `!`
+ found unit type `()`
+ = note: this error originates in the attribute macro `alloc_error_handler` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/alloc-error/alloc-error-handler-bad-signature-3.rs b/tests/ui/alloc-error/alloc-error-handler-bad-signature-3.rs
new file mode 100644
index 000000000..ea9ad39a7
--- /dev/null
+++ b/tests/ui/alloc-error/alloc-error-handler-bad-signature-3.rs
@@ -0,0 +1,15 @@
+// compile-flags:-C panic=abort
+
+#![feature(alloc_error_handler)]
+#![no_std]
+#![no_main]
+
+struct Layout;
+
+#[alloc_error_handler]
+fn oom() -> ! { //~ ERROR function takes 0 arguments but 1 argument was supplied
+ loop {}
+}
+
+#[panic_handler]
+fn panic(_: &core::panic::PanicInfo) -> ! { loop {} }
diff --git a/tests/ui/alloc-error/alloc-error-handler-bad-signature-3.stderr b/tests/ui/alloc-error/alloc-error-handler-bad-signature-3.stderr
new file mode 100644
index 000000000..77ea8ef05
--- /dev/null
+++ b/tests/ui/alloc-error/alloc-error-handler-bad-signature-3.stderr
@@ -0,0 +1,25 @@
+error[E0061]: this function takes 0 arguments but 1 argument was supplied
+ --> $DIR/alloc-error-handler-bad-signature-3.rs:10:1
+ |
+LL | #[alloc_error_handler]
+ | ---------------------- in this procedural macro expansion
+LL | fn oom() -> ! {
+ | _-^^^^^^^^^^^^
+LL | | loop {}
+LL | | }
+ | |_- argument of type `core::alloc::Layout` unexpected
+ |
+note: function defined here
+ --> $DIR/alloc-error-handler-bad-signature-3.rs:10:4
+ |
+LL | fn oom() -> ! {
+ | ^^^
+ = note: this error originates in the attribute macro `alloc_error_handler` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: remove the extra argument
+ |
+LL | fn oom() -> !() {
+ | ++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0061`.
diff --git a/tests/ui/alloc-error/default-alloc-error-hook.rs b/tests/ui/alloc-error/default-alloc-error-hook.rs
new file mode 100644
index 000000000..8be09500f
--- /dev/null
+++ b/tests/ui/alloc-error/default-alloc-error-hook.rs
@@ -0,0 +1,28 @@
+// run-pass
+// ignore-emscripten no processes
+// ignore-sgx no processes
+
+use std::alloc::{Layout, handle_alloc_error};
+use std::env;
+use std::process::Command;
+use std::str;
+
+fn main() {
+ if env::args().len() > 1 {
+ handle_alloc_error(Layout::new::<[u8; 42]>())
+ }
+
+ let me = env::current_exe().unwrap();
+ let output = Command::new(&me).arg("next").output().unwrap();
+ assert!(!output.status.success(), "{:?} is a success", output.status);
+
+ let mut stderr = str::from_utf8(&output.stderr).unwrap();
+
+ // When running inside QEMU user-mode emulation, there will be an extra message printed by QEMU
+ // in the stderr whenever a core dump happens. Remove it before the check.
+ stderr = stderr
+ .strip_suffix("qemu: uncaught target signal 6 (Aborted) - core dumped\n")
+ .unwrap_or(stderr);
+
+ assert_eq!(stderr, "memory allocation of 42 bytes failed\n");
+}