summaryrefslogtreecommitdiffstats
path: root/src/test/ui/unwind-abis
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/unwind-abis
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/unwind-abis')
-rw-r--r--src/test/ui/unwind-abis/feature-gate-c-unwind-enabled.rs12
-rw-r--r--src/test/ui/unwind-abis/feature-gate-c-unwind.rs13
-rw-r--r--src/test/ui/unwind-abis/feature-gate-c-unwind.stderr33
-rw-r--r--src/test/ui/unwind-abis/feature-gate-stdcall-unwind.rs30
-rw-r--r--src/test/ui/unwind-abis/feature-gate-stdcall-unwind.stderr66
-rw-r--r--src/test/ui/unwind-abis/feature-gate-system-unwind.rs9
-rw-r--r--src/test/ui/unwind-abis/feature-gate-system-unwind.stderr12
-rw-r--r--src/test/ui/unwind-abis/feature-gate-thiscall-unwind.rs39
-rw-r--r--src/test/ui/unwind-abis/feature-gate-thiscall-unwind.stderr122
-rw-r--r--src/test/ui/unwind-abis/ffi-unwind-calls-lint.rs27
-rw-r--r--src/test/ui/unwind-abis/ffi-unwind-calls-lint.stderr20
11 files changed, 383 insertions, 0 deletions
diff --git a/src/test/ui/unwind-abis/feature-gate-c-unwind-enabled.rs b/src/test/ui/unwind-abis/feature-gate-c-unwind-enabled.rs
new file mode 100644
index 000000000..6ff5dbda2
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-c-unwind-enabled.rs
@@ -0,0 +1,12 @@
+// Test that the "C-unwind" ABI is feature-gated, and *can* be used when the
+// `c_unwind` feature gate is enabled.
+
+// check-pass
+
+#![feature(c_unwind)]
+
+extern "C-unwind" fn f() {}
+
+fn main() {
+ f();
+}
diff --git a/src/test/ui/unwind-abis/feature-gate-c-unwind.rs b/src/test/ui/unwind-abis/feature-gate-c-unwind.rs
new file mode 100644
index 000000000..ba72f74f2
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-c-unwind.rs
@@ -0,0 +1,13 @@
+// Test that the "C-unwind" ABI is feature-gated, and cannot be used when the
+// `c_unwind` feature gate is not used.
+
+#![allow(ffi_unwind_calls)]
+//~^ WARNING unknown lint: `ffi_unwind_calls`
+//~| WARNING unknown lint: `ffi_unwind_calls`
+
+extern "C-unwind" fn f() {}
+//~^ ERROR C-unwind ABI is experimental and subject to change [E0658]
+
+fn main() {
+ f();
+}
diff --git a/src/test/ui/unwind-abis/feature-gate-c-unwind.stderr b/src/test/ui/unwind-abis/feature-gate-c-unwind.stderr
new file mode 100644
index 000000000..a67f46cd2
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-c-unwind.stderr
@@ -0,0 +1,33 @@
+warning: unknown lint: `ffi_unwind_calls`
+ --> $DIR/feature-gate-c-unwind.rs:4:1
+ |
+LL | #![allow(ffi_unwind_calls)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unknown_lints)]` on by default
+ = note: the `ffi_unwind_calls` lint is unstable
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: C-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-c-unwind.rs:8:8
+ |
+LL | extern "C-unwind" fn f() {}
+ | ^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+warning: unknown lint: `ffi_unwind_calls`
+ --> $DIR/feature-gate-c-unwind.rs:4:1
+ |
+LL | #![allow(ffi_unwind_calls)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: the `ffi_unwind_calls` lint is unstable
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error: aborting due to previous error; 2 warnings emitted
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/unwind-abis/feature-gate-stdcall-unwind.rs b/src/test/ui/unwind-abis/feature-gate-stdcall-unwind.rs
new file mode 100644
index 000000000..cfa8eb3ca
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-stdcall-unwind.rs
@@ -0,0 +1,30 @@
+// gate-test-c_unwind
+// needs-llvm-components: x86
+// compile-flags: --target=i686-pc-windows-msvc --crate-type=rlib
+#![no_core]
+#![feature(no_core, lang_items)]
+#[lang="sized"]
+trait Sized { }
+
+// Test that the "stdcall-unwind" ABI is feature-gated, and cannot be used when
+// the `c_unwind` feature gate is not used.
+
+extern "stdcall-unwind" fn fu() {} //~ ERROR stdcall-unwind ABI is experimental
+
+trait T {
+ extern "stdcall-unwind" fn mu(); //~ ERROR stdcall-unwind ABI is experimental
+ extern "stdcall-unwind" fn dmu() {} //~ ERROR stdcall-unwind ABI is experimental
+}
+
+struct S;
+impl T for S {
+ extern "stdcall-unwind" fn mu() {} //~ ERROR stdcall-unwind ABI is experimental
+}
+
+impl S {
+ extern "stdcall-unwind" fn imu() {} //~ ERROR stdcall-unwind ABI is experimental
+}
+
+type TAU = extern "stdcall-unwind" fn(); //~ ERROR stdcall-unwind ABI is experimental
+
+extern "stdcall-unwind" {} //~ ERROR stdcall-unwind ABI is experimental
diff --git a/src/test/ui/unwind-abis/feature-gate-stdcall-unwind.stderr b/src/test/ui/unwind-abis/feature-gate-stdcall-unwind.stderr
new file mode 100644
index 000000000..c2cce0e11
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-stdcall-unwind.stderr
@@ -0,0 +1,66 @@
+error[E0658]: stdcall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-stdcall-unwind.rs:12:8
+ |
+LL | extern "stdcall-unwind" fn fu() {}
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: stdcall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-stdcall-unwind.rs:15:12
+ |
+LL | extern "stdcall-unwind" fn mu();
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: stdcall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-stdcall-unwind.rs:16:12
+ |
+LL | extern "stdcall-unwind" fn dmu() {}
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: stdcall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-stdcall-unwind.rs:21:12
+ |
+LL | extern "stdcall-unwind" fn mu() {}
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: stdcall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-stdcall-unwind.rs:25:12
+ |
+LL | extern "stdcall-unwind" fn imu() {}
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: stdcall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-stdcall-unwind.rs:28:19
+ |
+LL | type TAU = extern "stdcall-unwind" fn();
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: stdcall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-stdcall-unwind.rs:30:8
+ |
+LL | extern "stdcall-unwind" {}
+ | ^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error: aborting due to 7 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/unwind-abis/feature-gate-system-unwind.rs b/src/test/ui/unwind-abis/feature-gate-system-unwind.rs
new file mode 100644
index 000000000..26c2de4e8
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-system-unwind.rs
@@ -0,0 +1,9 @@
+// Test that the "system-unwind" ABI is feature-gated, and cannot be used when
+// the `c_unwind` feature gate is not used.
+
+extern "system-unwind" fn f() {}
+//~^ ERROR system-unwind ABI is experimental and subject to change [E0658]
+
+fn main() {
+ f();
+}
diff --git a/src/test/ui/unwind-abis/feature-gate-system-unwind.stderr b/src/test/ui/unwind-abis/feature-gate-system-unwind.stderr
new file mode 100644
index 000000000..878773364
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-system-unwind.stderr
@@ -0,0 +1,12 @@
+error[E0658]: system-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-system-unwind.rs:4:8
+ |
+LL | extern "system-unwind" fn f() {}
+ | ^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/unwind-abis/feature-gate-thiscall-unwind.rs b/src/test/ui/unwind-abis/feature-gate-thiscall-unwind.rs
new file mode 100644
index 000000000..0a323e50f
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-thiscall-unwind.rs
@@ -0,0 +1,39 @@
+// gate-test-abi_thiscall
+// gate-test-c_unwind
+// needs-llvm-components: x86
+// compile-flags: --target=i686-pc-windows-msvc --crate-type=rlib
+#![no_core]
+#![feature(no_core, lang_items)]
+#[lang="sized"]
+trait Sized { }
+
+// Test that the "thiscall-unwind" ABI is feature-gated, and cannot be used when
+// the `c_unwind` feature gate is not used.
+
+extern "thiscall-unwind" fn fu() {} //~ ERROR thiscall-unwind ABI is experimental
+extern "thiscall" fn f() {} //~ ERROR thiscall is experimental
+
+trait T {
+ extern "thiscall" fn m(); //~ ERROR thiscall is experimental
+ extern "thiscall-unwind" fn mu(); //~ ERROR thiscall-unwind ABI is experimental
+
+ extern "thiscall" fn dm() {} //~ ERROR thiscall is experimental
+ extern "thiscall-unwind" fn dmu() {} //~ ERROR thiscall-unwind ABI is experimental
+}
+
+struct S;
+impl T for S {
+ extern "thiscall" fn m() {} //~ ERROR thiscall is experimental
+ extern "thiscall-unwind" fn mu() {} //~ ERROR thiscall-unwind ABI is experimental
+}
+
+impl S {
+ extern "thiscall" fn im() {} //~ ERROR thiscall is experimental
+ extern "thiscall-unwind" fn imu() {} //~ ERROR thiscall-unwind ABI is experimental
+}
+
+type TA = extern "thiscall" fn(); //~ ERROR thiscall is experimental
+type TAU = extern "thiscall-unwind" fn(); //~ ERROR thiscall-unwind ABI is experimental
+
+extern "thiscall" {} //~ ERROR thiscall is experimental
+extern "thiscall-unwind" {} //~ ERROR thiscall-unwind ABI is experimental
diff --git a/src/test/ui/unwind-abis/feature-gate-thiscall-unwind.stderr b/src/test/ui/unwind-abis/feature-gate-thiscall-unwind.stderr
new file mode 100644
index 000000000..9ca00a55c
--- /dev/null
+++ b/src/test/ui/unwind-abis/feature-gate-thiscall-unwind.stderr
@@ -0,0 +1,122 @@
+error[E0658]: thiscall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:13:8
+ |
+LL | extern "thiscall-unwind" fn fu() {}
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: thiscall is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:14:8
+ |
+LL | extern "thiscall" fn f() {}
+ | ^^^^^^^^^^
+ |
+ = help: add `#![feature(abi_thiscall)]` to the crate attributes to enable
+
+error[E0658]: thiscall is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:17:12
+ |
+LL | extern "thiscall" fn m();
+ | ^^^^^^^^^^
+ |
+ = help: add `#![feature(abi_thiscall)]` to the crate attributes to enable
+
+error[E0658]: thiscall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:18:12
+ |
+LL | extern "thiscall-unwind" fn mu();
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: thiscall is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:20:12
+ |
+LL | extern "thiscall" fn dm() {}
+ | ^^^^^^^^^^
+ |
+ = help: add `#![feature(abi_thiscall)]` to the crate attributes to enable
+
+error[E0658]: thiscall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:21:12
+ |
+LL | extern "thiscall-unwind" fn dmu() {}
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: thiscall is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:26:12
+ |
+LL | extern "thiscall" fn m() {}
+ | ^^^^^^^^^^
+ |
+ = help: add `#![feature(abi_thiscall)]` to the crate attributes to enable
+
+error[E0658]: thiscall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:27:12
+ |
+LL | extern "thiscall-unwind" fn mu() {}
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: thiscall is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:31:12
+ |
+LL | extern "thiscall" fn im() {}
+ | ^^^^^^^^^^
+ |
+ = help: add `#![feature(abi_thiscall)]` to the crate attributes to enable
+
+error[E0658]: thiscall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:32:12
+ |
+LL | extern "thiscall-unwind" fn imu() {}
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: thiscall is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:35:18
+ |
+LL | type TA = extern "thiscall" fn();
+ | ^^^^^^^^^^
+ |
+ = help: add `#![feature(abi_thiscall)]` to the crate attributes to enable
+
+error[E0658]: thiscall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:36:19
+ |
+LL | type TAU = extern "thiscall-unwind" fn();
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error[E0658]: thiscall is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:38:8
+ |
+LL | extern "thiscall" {}
+ | ^^^^^^^^^^
+ |
+ = help: add `#![feature(abi_thiscall)]` to the crate attributes to enable
+
+error[E0658]: thiscall-unwind ABI is experimental and subject to change
+ --> $DIR/feature-gate-thiscall-unwind.rs:39:8
+ |
+LL | extern "thiscall-unwind" {}
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #74990 <https://github.com/rust-lang/rust/issues/74990> for more information
+ = help: add `#![feature(c_unwind)]` to the crate attributes to enable
+
+error: aborting due to 14 previous errors
+
+For more information about this error, try `rustc --explain E0658`.
diff --git a/src/test/ui/unwind-abis/ffi-unwind-calls-lint.rs b/src/test/ui/unwind-abis/ffi-unwind-calls-lint.rs
new file mode 100644
index 000000000..dadf4b121
--- /dev/null
+++ b/src/test/ui/unwind-abis/ffi-unwind-calls-lint.rs
@@ -0,0 +1,27 @@
+// build-pass
+// needs-unwind
+// ignore-wasm32-bare compiled with panic=abort by default
+
+#![feature(c_unwind)]
+#![warn(ffi_unwind_calls)]
+
+mod foo {
+ #[no_mangle]
+ pub extern "C-unwind" fn foo() {}
+}
+
+extern "C-unwind" {
+ fn foo();
+}
+
+fn main() {
+ // Call to Rust function is fine.
+ foo::foo();
+ // Call to foreign function should warn.
+ unsafe { foo(); }
+ //~^ WARNING call to foreign function with FFI-unwind ABI
+ let ptr: extern "C-unwind" fn() = foo::foo;
+ // Call to function pointer should also warn.
+ ptr();
+ //~^ WARNING call to function pointer with FFI-unwind ABI
+}
diff --git a/src/test/ui/unwind-abis/ffi-unwind-calls-lint.stderr b/src/test/ui/unwind-abis/ffi-unwind-calls-lint.stderr
new file mode 100644
index 000000000..ed41cb746
--- /dev/null
+++ b/src/test/ui/unwind-abis/ffi-unwind-calls-lint.stderr
@@ -0,0 +1,20 @@
+warning: call to foreign function with FFI-unwind ABI
+ --> $DIR/ffi-unwind-calls-lint.rs:21:14
+ |
+LL | unsafe { foo(); }
+ | ^^^^^ call to foreign function with FFI-unwind ABI
+ |
+note: the lint level is defined here
+ --> $DIR/ffi-unwind-calls-lint.rs:6:9
+ |
+LL | #![warn(ffi_unwind_calls)]
+ | ^^^^^^^^^^^^^^^^
+
+warning: call to function pointer with FFI-unwind ABI
+ --> $DIR/ffi-unwind-calls-lint.rs:25:5
+ |
+LL | ptr();
+ | ^^^^^ call to function pointer with FFI-unwind ABI
+
+warning: 2 warnings emitted
+