diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 067d83a17e57b..e139ac8b2a069 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1988,9 +1988,12 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { path_depth))); // If it's a typedef, give a note - if let Def::TyAlias(..) = path_res.base_def { - err.span_note(trait_path.span, + if let Def::TyAlias(did) = path_res.base_def { + err.fileline_note(trait_path.span, "`type` aliases cannot be used for traits"); + if let Some(sp) = self.ast_map.span_if_local(did) { + err.span_note(sp, "type defined here"); + } } err.emit(); Err(()) diff --git a/src/test/compile-fail/issue-3907.rs b/src/test/compile-fail/issue-3907.rs index a3d90a00d038e..1dbf211b26941 100644 --- a/src/test/compile-fail/issue-3907.rs +++ b/src/test/compile-fail/issue-3907.rs @@ -11,7 +11,7 @@ // aux-build:issue_3907.rs extern crate issue_3907; -type Foo = issue_3907::Foo; +type Foo = issue_3907::Foo; //~ NOTE: type defined here struct S { name: isize diff --git a/src/test/compile-fail/issue-5035.rs b/src/test/compile-fail/issue-5035.rs index cdf9d3bd36ece..dabeb503841c5 100644 --- a/src/test/compile-fail/issue-5035.rs +++ b/src/test/compile-fail/issue-5035.rs @@ -9,7 +9,7 @@ // except according to those terms. trait I {} -type K = I; +type K = I; //~ NOTE: type defined here impl K for isize {} //~ ERROR: `K` is not a trait //~^ NOTE: `type` aliases cannot be used for traits fn main() {}