diff options
| author | Nathaniel McCallum <nathaniel@congru.us> | 2021-08-03 17:43:21 -0400 |
|---|---|---|
| committer | Nathaniel McCallum <nathaniel@congru.us> | 2021-08-03 17:50:50 -0400 |
| commit | a96fd577a44845df221c81ff24b35819135b4a0d (patch) | |
| tree | b6f5f467f4eeeba471b47311a77e5240ecee4581 | |
| parent | c6bc102fea9f9274202d0bc55a0fef8a3bc92426 (diff) | |
| download | rust-a96fd577a44845df221c81ff24b35819135b4a0d.tar.gz rust-a96fd577a44845df221c81ff24b35819135b4a0d.zip | |
Validate FFI-safety warnings on naked functions
Test that FFI-safety warnings don't get accidentally dropped on naked functions. The big picture is that if you implement a naked function with the Rust ABI you'll get a warning. Further, if you implement a naked function with a standardized ABI, but use non-FFI-safe types you will still get a warning. rust-lang/rfcs#2774 rust-lang/rfcs#2972
| -rw-r--r-- | src/test/ui/asm/naked-functions-ffi.rs | 12 | ||||
| -rw-r--r-- | src/test/ui/asm/naked-functions-ffi.stderr | 20 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/test/ui/asm/naked-functions-ffi.rs b/src/test/ui/asm/naked-functions-ffi.rs new file mode 100644 index 00000000000..5b2a8ed3034 --- /dev/null +++ b/src/test/ui/asm/naked-functions-ffi.rs @@ -0,0 +1,12 @@ +// check-pass +// only-x86_64 +#![feature(asm)] +#![feature(naked_functions)] +#![crate_type = "lib"] + +#[naked] +pub extern "C" fn naked(p: char) -> u128 { + //~^ WARN uses type `char` + //~| WARN uses type `u128` + unsafe { asm!("", options(noreturn)); } +} diff --git a/src/test/ui/asm/naked-functions-ffi.stderr b/src/test/ui/asm/naked-functions-ffi.stderr new file mode 100644 index 00000000000..a6772badeb6 --- /dev/null +++ b/src/test/ui/asm/naked-functions-ffi.stderr @@ -0,0 +1,20 @@ +warning: `extern` fn uses type `char`, which is not FFI-safe + --> $DIR/naked-functions-ffi.rs:8:28 + | +LL | pub extern "C" fn naked(p: char) -> u128 { + | ^^^^ not FFI-safe + | + = note: `#[warn(improper_ctypes_definitions)]` on by default + = help: consider using `u32` or `libc::wchar_t` instead + = note: the `char` type has no C equivalent + +warning: `extern` fn uses type `u128`, which is not FFI-safe + --> $DIR/naked-functions-ffi.rs:8:37 + | +LL | pub extern "C" fn naked(p: char) -> u128 { + | ^^^^ not FFI-safe + | + = note: 128-bit integers don't currently have a known stable ABI + +warning: 2 warnings emitted + |
