From 54e1e98eabe4d89e28f5d096dd60c91b75bafe2d Mon Sep 17 00:00:00 2001 From: "Panashe M. Fundira" Date: Sun, 7 Aug 2016 03:53:32 -0400 Subject: [PATCH] Update E0204 to the new error format --- src/librustc_typeck/coherence/mod.rs | 13 ++++++++----- src/test/compile-fail/E0204.rs | 9 +++++++-- src/test/compile-fail/issue-27340.rs | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/librustc_typeck/coherence/mod.rs b/src/librustc_typeck/coherence/mod.rs index 2d14b0dacf24c..1cc81580a6f9b 100644 --- a/src/librustc_typeck/coherence/mod.rs +++ b/src/librustc_typeck/coherence/mod.rs @@ -311,11 +311,14 @@ impl<'a, 'gcx, 'tcx> CoherenceChecker<'a, 'gcx, 'tcx> { match param_env.can_type_implement_copy(tcx, self_type, span) { Ok(()) => {} Err(CopyImplementationError::InfrigingField(name)) => { - span_err!(tcx.sess, span, E0204, - "the trait `Copy` may not be \ - implemented for this type; field \ - `{}` does not implement `Copy`", - name) + struct_span_err!(tcx.sess, span, E0204, + "the trait `Copy` may not be implemented for \ + this type") + .span_label(span, &format!( + "field `{}` does not implement `Copy`", name) + ) + .emit() + } Err(CopyImplementationError::InfrigingVariant(name)) => { span_err!(tcx.sess, span, E0205, diff --git a/src/test/compile-fail/E0204.rs b/src/test/compile-fail/E0204.rs index 2fa2afa12eb43..0f108a17c95db 100644 --- a/src/test/compile-fail/E0204.rs +++ b/src/test/compile-fail/E0204.rs @@ -12,9 +12,14 @@ struct Foo { foo: Vec, } -impl Copy for Foo { } //~ ERROR E0204 +impl Copy for Foo { } +//~^ ERROR E0204 +//~| NOTE field `foo` does not implement `Copy` -#[derive(Copy)] //~ ERROR E0204 +#[derive(Copy)] +//~^ ERROR E0204 +//~| NOTE field `ty` does not implement `Copy` +//~| NOTE in this expansion of #[derive(Copy)] struct Foo2<'a> { ty: &'a mut bool, } diff --git a/src/test/compile-fail/issue-27340.rs b/src/test/compile-fail/issue-27340.rs index 6a97ae82ddf31..ce3fa487d4e02 100644 --- a/src/test/compile-fail/issue-27340.rs +++ b/src/test/compile-fail/issue-27340.rs @@ -10,7 +10,7 @@ struct Foo; #[derive(Copy, Clone)] -//~^ ERROR the trait `Copy` may not be implemented for this type; field `0` does not implement +//~^ ERROR the trait `Copy` may not be implemented for this type struct Bar(Foo); fn main() {}