diff --git a/src/librustc_typeck/check/demand.rs b/src/librustc_typeck/check/demand.rs index b6b863cfea6..d2702d0810e 100644 --- a/src/librustc_typeck/check/demand.rs +++ b/src/librustc_typeck/check/demand.rs @@ -15,7 +15,7 @@ use rustc::infer::InferOk; use rustc::traits::ObligationCause; use syntax::ast; -use syntax::util::parser::AssocOp; +use syntax::util::parser::PREC_POSTFIX; use syntax_pos::{self, Span}; use rustc::hir; use rustc::hir::print; @@ -336,7 +336,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { // For now, don't suggest casting with `as`. let can_cast = false; - let needs_paren = expr.precedence().order() < (AssocOp::As.precedence() as i8); + let needs_paren = expr.precedence().order() < (PREC_POSTFIX as i8); if let Ok(src) = self.tcx.sess.codemap().span_to_snippet(expr.span) { let msg = format!("you can cast an `{}` to `{}`", checked_ty, expected_ty); diff --git a/src/test/ui/suggestions/numeric-cast.rs b/src/test/ui/suggestions/numeric-cast.rs index 6e144037ec2..69bfdfa94b1 100644 --- a/src/test/ui/suggestions/numeric-cast.rs +++ b/src/test/ui/suggestions/numeric-cast.rs @@ -312,4 +312,9 @@ fn main() { foo::(x_f64); //~^ ERROR mismatched types foo::(x_f32); + + foo::(x_u8 as u16); + //~^ ERROR mismatched types + foo::(-x_i8); + //~^ ERROR mismatched types } diff --git a/src/test/ui/suggestions/numeric-cast.stderr b/src/test/ui/suggestions/numeric-cast.stderr index 0ce3d087f35..cef22ad922e 100644 --- a/src/test/ui/suggestions/numeric-cast.stderr +++ b/src/test/ui/suggestions/numeric-cast.stderr @@ -882,5 +882,25 @@ error[E0308]: mismatched types 312 | foo::(x_f64); | ^^^^^ expected f32, found f64 -error: aborting due to 132 previous errors +error[E0308]: mismatched types + --> $DIR/numeric-cast.rs:316:16 + | +316 | foo::(x_u8 as u16); + | ^^^^^^^^^^^ expected u32, found u16 +help: you can cast an `u16` to `u32`, which will zero-extend the source value + | +316 | foo::((x_u8 as u16).into()); + | ^^^^^^^^^^^^^^^^^^^^ + +error[E0308]: mismatched types + --> $DIR/numeric-cast.rs:318:16 + | +318 | foo::(-x_i8); + | ^^^^^ expected i32, found i8 +help: you can cast an `i8` to `i32`, which will sign-extend the source value + | +318 | foo::((-x_i8).into()); + | ^^^^^^^^^^^^^^ + +error: aborting due to 134 previous errors