From f351e762f0af1cce5068850e9bd21c54f7cb15f2 Mon Sep 17 00:00:00 2001 From: Scott Olson Date: Fri, 7 Aug 2015 22:08:28 -0400 Subject: [PATCH] Fix the diagnostic for fat pointer to usize casts. Fixes #27450. --- src/librustc_typeck/check/cast.rs | 5 ++++- src/test/compile-fail/cast-rfc0401.rs | 2 +- src/test/compile-fail/fat-ptr-cast.rs | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/librustc_typeck/check/cast.rs b/src/librustc_typeck/check/cast.rs index b6ba62e4f09..b40be59ecbe 100644 --- a/src/librustc_typeck/check/cast.rs +++ b/src/librustc_typeck/check/cast.rs @@ -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) } } diff --git a/src/test/compile-fail/cast-rfc0401.rs b/src/test/compile-fail/cast-rfc0401.rs index 7fca4aece69..4603ed00347 100644 --- a/src/test/compile-fail/cast-rfc0401.rs +++ b/src/test/compile-fail/cast-rfc0401.rs @@ -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; diff --git a/src/test/compile-fail/fat-ptr-cast.rs b/src/test/compile-fail/fat-ptr-cast.rs index 3746f29ea55..1c462779b43 100644 --- a/src/test/compile-fail/fat-ptr-cast.rs +++ b/src/test/compile-fail/fat-ptr-cast.rs @@ -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