diff options
| author | Yuki Okushi <jtitor@2k36.org> | 2021-08-06 11:21:31 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-06 11:21:31 +0900 |
| commit | 71ad503fd9ce83d47aba75e0569598ee9406df78 (patch) | |
| tree | 289346ff69ac7a6c79b2f8a67feede414f039e80 | |
| parent | 5b4396068744e810d090de038e6f456432d203a2 (diff) | |
| parent | a96fd577a44845df221c81ff24b35819135b4a0d (diff) | |
| download | rust-71ad503fd9ce83d47aba75e0569598ee9406df78.tar.gz rust-71ad503fd9ce83d47aba75e0569598ee9406df78.zip | |
Rollup merge of #87742 - npmccallum:naked_ffi, r=Amanieu
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 cc ``````@joshtriplett`````` ``````@Amanieu`````` ``````@haraldh``````
| -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 + |
