Emit error on intrinsic to fn ptr casts

This commit is contained in:
Mark Rousskov 2019-09-02 17:28:37 -04:00
parent 9af17757be
commit dd323f8a72
7 changed files with 57 additions and 0 deletions

View file

@ -0,0 +1,15 @@
// check-fail
#![feature(intrinsics)]
fn a() {
let _: unsafe extern "rust-intrinsic" fn(isize) -> usize = std::mem::transmute;
//~^ ERROR cannot coerce
}
fn b() {
let _ = std::mem::transmute as unsafe extern "rust-intrinsic" fn(isize) -> usize;
//~^ ERROR casting
}
fn main() {}

View file

@ -0,0 +1,22 @@
error[E0308]: cannot coerce intrinsics to function pointers
--> $DIR/reify-intrinsic.rs:6:64
|
LL | let _: unsafe extern "rust-intrinsic" fn(isize) -> usize = std::mem::transmute;
| ^^^^^^^^^^^^^^^^^^^
| |
| cannot coerce intrinsics to function pointers
| help: use parentheses to call this function: `std::mem::transmute(...)`
|
= note: expected type `unsafe extern "rust-intrinsic" fn(isize) -> usize`
found type `unsafe extern "rust-intrinsic" fn(_) -> _ {std::intrinsics::transmute::<_, _>}`
error[E0606]: casting `unsafe extern "rust-intrinsic" fn(_) -> _ {std::intrinsics::transmute::<_, _>}` as `unsafe extern "rust-intrinsic" fn(isize) -> usize` is invalid
--> $DIR/reify-intrinsic.rs:11:13
|
LL | let _ = std::mem::transmute as unsafe extern "rust-intrinsic" fn(isize) -> usize;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0308, E0606.
For more information about an error, try `rustc --explain E0308`.