diff --git a/src/error.rs b/src/error.rs index 52662218ffa5..8001d95941e8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -61,7 +61,7 @@ impl<'tcx> Error for EvalError<'tcx> { EvalError::DanglingPointerDeref => "dangling pointer was dereferenced", EvalError::InvalidFunctionPointer => - "tried to use an integer pointer as a function pointer", + "tried to use an integer pointer or a dangling pointer as a function pointer", EvalError::InvalidBool => "invalid boolean value read", EvalError::InvalidDiscriminant => diff --git a/tests/compile-fail/cast_box_int_to_fn_ptr.rs b/tests/compile-fail/cast_box_int_to_fn_ptr.rs new file mode 100644 index 000000000000..030bed6a3529 --- /dev/null +++ b/tests/compile-fail/cast_box_int_to_fn_ptr.rs @@ -0,0 +1,8 @@ +fn main() { + let b = Box::new(42); + let g = unsafe { + std::mem::transmute::<&usize, &fn(i32)>(&b) + }; + + (*g)(42) //~ ERROR tried to use an integer pointer or a dangling pointer as a function pointer +}