mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 17:24:06 +00:00
parent
e5d90d9840
commit
f351e762f0
@ -100,6 +100,7 @@ enum CastError {
|
||||
DifferingKinds,
|
||||
IllegalCast,
|
||||
NeedViaPtr,
|
||||
NeedViaThinPtr,
|
||||
NeedViaInt,
|
||||
NeedViaUsize,
|
||||
NonScalar,
|
||||
@ -120,6 +121,7 @@ impl<'tcx> CastCheck<'tcx> {
|
||||
e: CastError) {
|
||||
match e {
|
||||
CastError::NeedViaPtr |
|
||||
CastError::NeedViaThinPtr |
|
||||
CastError::NeedViaInt |
|
||||
CastError::NeedViaUsize => {
|
||||
fcx.type_error_message(self.span, |actual| {
|
||||
@ -130,6 +132,7 @@ impl<'tcx> CastCheck<'tcx> {
|
||||
fcx.ccx.tcx.sess.fileline_help(self.span,
|
||||
&format!("cast through {} first", match e {
|
||||
CastError::NeedViaPtr => "a raw pointer",
|
||||
CastError::NeedViaThinPtr => "a thin pointer",
|
||||
CastError::NeedViaInt => "an integer",
|
||||
CastError::NeedViaUsize => "a usize",
|
||||
_ => unreachable!()
|
||||
@ -324,7 +327,7 @@ impl<'tcx> CastCheck<'tcx> {
|
||||
if fcx.type_is_known_to_be_sized(m_expr.ty, self.span) {
|
||||
Ok(CastKind::PtrAddrCast)
|
||||
} else {
|
||||
Err(CastError::NeedViaPtr)
|
||||
Err(CastError::NeedViaThinPtr)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ fn main()
|
||||
let _ = &f as *const f64; //~ ERROR casting
|
||||
let _ = fat_v as usize;
|
||||
//~^ ERROR casting
|
||||
//~^^ HELP through a raw pointer first
|
||||
//~^^ HELP through a thin pointer first
|
||||
|
||||
let a : *const str = "hello";
|
||||
let _ = a as *const Foo;
|
||||
|
@ -21,7 +21,7 @@ fn main() {
|
||||
b as usize; //~ ERROR non-scalar cast
|
||||
p as usize;
|
||||
//~^ ERROR casting
|
||||
//~^^ HELP cast through a raw pointer
|
||||
//~^^ HELP cast through a thin pointer
|
||||
|
||||
// #22955
|
||||
q as *const [i32]; //~ ERROR casting
|
||||
|
Loading…
Reference in New Issue
Block a user