diff --git a/src/librustc_typeck/coherence/orphan.rs b/src/librustc_typeck/coherence/orphan.rs index 2f2668e9645..e426f0cb643 100644 --- a/src/librustc_typeck/coherence/orphan.rs +++ b/src/librustc_typeck/coherence/orphan.rs @@ -33,10 +33,12 @@ struct OrphanChecker<'cx, 'tcx:'cx> { impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> { fn check_def_id(&self, item: &hir::Item, def_id: DefId) { if def_id.krate != LOCAL_CRATE { - span_err!(self.tcx.sess, item.span, E0116, + struct_span_err!(self.tcx.sess, item.span, E0116, "cannot define inherent `impl` for a type outside of the \ - crate where the type is defined; define and implement \ - a trait or new type instead"); + crate where the type is defined") + .span_label(item.span, &format!("impl for type defined outside of crate.")) + .span_note(item.span, &format!("define and implement a trait or new type instead")) + .emit(); } } diff --git a/src/test/compile-fail/E0116.rs b/src/test/compile-fail/E0116.rs index 4020aa9475a..f885241eec4 100644 --- a/src/test/compile-fail/E0116.rs +++ b/src/test/compile-fail/E0116.rs @@ -8,7 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -impl Vec {} //~ ERROR E0116 +impl Vec {} +//~^ ERROR E0116 +//~| NOTE impl for type defined outside of crate. +//~| NOTE define and implement a trait or new type instead fn main() { }