diff --git a/src/librustc/ty/sty.rs b/src/librustc/ty/sty.rs index caf78309cc238..d9066d389943a 100644 --- a/src/librustc/ty/sty.rs +++ b/src/librustc/ty/sty.rs @@ -1176,13 +1176,6 @@ impl RegionKind { /// Type utilities impl<'a, 'gcx, 'tcx> TyS<'tcx> { - pub fn as_opt_param_ty(&self) -> Option { - match self.sty { - ty::TyParam(ref d) => Some(d.clone()), - _ => None, - } - } - pub fn is_nil(&self) -> bool { match self.sty { TyTuple(ref tys, _) => tys.is_empty(), diff --git a/src/librustc_typeck/check/op.rs b/src/librustc_typeck/check/op.rs index 2d45f797ecb4d..e099d1c0c2531 100644 --- a/src/librustc_typeck/check/op.rs +++ b/src/librustc_typeck/check/op.rs @@ -289,6 +289,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { // This has nothing here because it means we did string // concatenation (e.g. "Hello " + "World!"). This means // we don't want the note in the else clause to be emitted + } else if let ty::TyParam(_) = lhs_ty.sty { + // FIXME: point to span of param + err.note( + &format!("`{}` might need a bound for `{}`", + lhs_ty, missing_trait)); } else { err.note( &format!("an implementation of `{}` might be missing for `{}`", diff --git a/src/test/ui/type-check/missing_trait_impl.rs b/src/test/ui/type-check/missing_trait_impl.rs new file mode 100644 index 0000000000000..fe008db68a004 --- /dev/null +++ b/src/test/ui/type-check/missing_trait_impl.rs @@ -0,0 +1,17 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { +} + +fn foo(x: T, y: T) { + let z = x + y; //~ ERROR binary operation `+` cannot be applied to type `T` + //~^ NOTE `T` might need a bound for `std::ops::Add` +} diff --git a/src/test/ui/type-check/missing_trait_impl.stderr b/src/test/ui/type-check/missing_trait_impl.stderr new file mode 100644 index 0000000000000..64f8167eb1d01 --- /dev/null +++ b/src/test/ui/type-check/missing_trait_impl.stderr @@ -0,0 +1,10 @@ +error[E0369]: binary operation `+` cannot be applied to type `T` + --> $DIR/missing_trait_impl.rs:15:13 + | +15 | let z = x + y; //~ ERROR binary operation `+` cannot be applied to type `T` + | ^^^^^ + | + = note: `T` might need a bound for `std::ops::Add` + +error: aborting due to previous error +