diff --git a/src/librustc_typeck/coherence/mod.rs b/src/librustc_typeck/coherence/mod.rs index 939d81bf847..f0ab1984286 100644 --- a/src/librustc_typeck/coherence/mod.rs +++ b/src/librustc_typeck/coherence/mod.rs @@ -321,13 +321,18 @@ impl<'a, 'gcx, 'tcx> CoherenceChecker<'a, 'gcx, 'tcx> { } Err(CopyImplementationError::InfrigingVariant(name)) => { - struct_span_err!(tcx.sess, span, E0205, - "the trait `Copy` may not be \ - implemented for this type") - .span_label(span, &format!("variant \ - `{}` does not implement `Copy`", - name)) - .emit() + let item = tcx.map.expect_item(impl_node_id); + let span = if let ItemImpl(_, _, _, Some(ref tr), _, _) = item.node { + tr.path.span + } else { + span + }; + + struct_span_err!(tcx.sess, span, E0205, + "the trait `Copy` may not be implemented for this type") + .span_label(span, &format!("variant `{}` does not implement `Copy`", + name)) + .emit() } Err(CopyImplementationError::NotAnAdt) => { span_err!(tcx.sess, span, E0206, diff --git a/src/test/compile-fail/E0205.rs b/src/test/compile-fail/E0205.rs index 37ac57af524..c73e7534301 100644 --- a/src/test/compile-fail/E0205.rs +++ b/src/test/compile-fail/E0205.rs @@ -14,11 +14,11 @@ enum Foo { } impl Copy for Foo { } -//~^ ERROR E0205 +//~^ ERROR the trait `Copy` may not be implemented for this type //~| NOTE variant `Bar` does not implement `Copy` #[derive(Copy)] -//~^ ERROR E0205 +//~^ ERROR the trait `Copy` may not be implemented for this type //~| NOTE variant `Bar` does not implement `Copy` //~| NOTE in this expansion of #[derive(Copy)] enum Foo2<'a> {