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
This commit is contained in:
parent
c6bc102fea
commit
a96fd577a4
2 changed files with 32 additions and 0 deletions
12
src/test/ui/asm/naked-functions-ffi.rs
Normal file
12
src/test/ui/asm/naked-functions-ffi.rs
Normal file
|
@ -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)); }
|
||||||
|
}
|
20
src/test/ui/asm/naked-functions-ffi.stderr
Normal file
20
src/test/ui/asm/naked-functions-ffi.stderr
Normal file
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue