Ensure that we error when calling "const extern fn" with wrong convention

See #64926
This commit is contained in:
Aaron Hill 2020-01-19 12:53:25 -05:00
parent 6250d56355
commit 4a650324f8
No known key found for this signature in database
GPG Key ID: B4087E510E98B164
2 changed files with 44 additions and 0 deletions

View File

@ -0,0 +1,16 @@
// Checks that we report ABI mismatches for "const extern fn"
// compile-flags: -Z unleash-the-miri-inside-of-you
#![feature(const_extern_fn)]
const extern "C" fn c_fn() {}
const fn call_rust_fn(my_fn: extern "Rust" fn()) {
my_fn(); //~ ERROR any use of this value will cause an error
//~^ WARN skipping const checks
}
const VAL: () = call_rust_fn(unsafe { std::mem::transmute(c_fn as extern "C" fn()) });
//~^ WARN skipping const checks
fn main() {}

View File

@ -0,0 +1,28 @@
warning: skipping const checks
--> $DIR/abi-mismatch.rs:9:5
|
LL | my_fn();
| ^^^^^^^
warning: skipping const checks
--> $DIR/abi-mismatch.rs:13:39
|
LL | const VAL: () = call_rust_fn(unsafe { std::mem::transmute(c_fn as extern "C" fn()) });
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: any use of this value will cause an error
--> $DIR/abi-mismatch.rs:9:5
|
LL | my_fn();
| ^^^^^^^
| |
| tried to call a function with ABI C using caller ABI Rust
| inside call to `call_rust_fn` at $DIR/abi-mismatch.rs:13:17
...
LL | const VAL: () = call_rust_fn(unsafe { std::mem::transmute(c_fn as extern "C" fn()) });
| --------------------------------------------------------------------------------------
|
= note: `#[deny(const_err)]` on by default
error: aborting due to previous error