diff --git a/src/librustc_typeck/coherence/orphan.rs b/src/librustc_typeck/coherence/orphan.rs index 49959a7a3b2cb..2f2668e9645bf 100644 --- a/src/librustc_typeck/coherence/orphan.rs +++ b/src/librustc_typeck/coherence/orphan.rs @@ -66,7 +66,7 @@ impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> { fn check_item(&self, item: &hir::Item) { let def_id = self.tcx.map.local_def_id(item.id); match item.node { - hir::ItemImpl(_, _, _, None, _, _) => { + hir::ItemImpl(_, _, _, None, ref ty, _) => { // For inherent impls, self type must be a nominal type // defined in this crate. debug!("coherence2::orphan check: inherent impl {}", @@ -209,11 +209,11 @@ impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> { return; } _ => { - struct_span_err!(self.tcx.sess, item.span, E0118, + struct_span_err!(self.tcx.sess, ty.span, E0118, "no base type found for inherent implementation") - .span_help(item.span, - "either implement a trait on it or create a newtype to wrap it \ - instead") + .span_label(ty.span, &format!("impl requires a base type")) + .note(&format!("either implement a trait on it or create a newtype \ + to wrap it instead")) .emit(); return; } diff --git a/src/test/compile-fail/E0118.rs b/src/test/compile-fail/E0118.rs index d37ff34b861f4..3fc478f1e403e 100644 --- a/src/test/compile-fail/E0118.rs +++ b/src/test/compile-fail/E0118.rs @@ -9,6 +9,8 @@ // except according to those terms. impl (u8, u8) { //~ ERROR E0118 +//~^ NOTE impl requires a base type +//~| NOTE either implement a trait on it or create a newtype to wrap it instead fn get_state(&self) -> String { String::new() }