about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorleonardo.yvens <leoyvens@gmail.com>2018-05-09 10:05:59 -0300
committerleonardo.yvens <leoyvens@gmail.com>2018-05-12 14:24:02 -0300
commit3deb75729eb08d930da90f2e9407b2f79f0025b7 (patch)
tree7570a304f11b9264b9ce8960fb8e2e2195c884f9 /src
parent804bcf7716f14a55e85c599733a58348b5c05c82 (diff)
downloadrust-3deb75729eb08d930da90f2e9407b2f79f0025b7.tar.gz
rust-3deb75729eb08d930da90f2e9407b2f79f0025b7.zip
Merge all "Copy not implemented" errors
Diffstat (limited to 'src')
-rw-r--r--src/librustc_typeck/coherence/builtin.rs16
-rw-r--r--src/test/ui/issue-50480.rs1
-rw-r--r--src/test/ui/issue-50480.stderr21
3 files changed, 14 insertions, 24 deletions
diff --git a/src/librustc_typeck/coherence/builtin.rs b/src/librustc_typeck/coherence/builtin.rs
index 7627d9071dc..2f08a54e10f 100644
--- a/src/librustc_typeck/coherence/builtin.rs
+++ b/src/librustc_typeck/coherence/builtin.rs
@@ -121,16 +121,14 @@ fn visit_implementation_of_copy<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
                 span
             };
 
-            for field in fields {
-                struct_span_err!(tcx.sess,
-                                span,
-                                E0204,
-                                "the trait `Copy` may not be implemented for this type")
-                    .span_label(
-                        tcx.def_span(field.did),
-                        "this field does not implement `Copy`")
-                    .emit()
+            let mut err = struct_span_err!(tcx.sess,
+                                          span,
+                                          E0204,
+                                          "the trait `Copy` may not be implemented for this type");
+            for span in fields.iter().map(|f| tcx.def_span(f.did)) {
+                    err.span_label(span, "this field does not implement `Copy`");
             }
+            err.emit()
         }
         Err(CopyImplementationError::NotAnAdt) => {
             let item = tcx.hir.expect_item(impl_node_id);
diff --git a/src/test/ui/issue-50480.rs b/src/test/ui/issue-50480.rs
index 20af6d4cf83..3427cf6bf9c 100644
--- a/src/test/ui/issue-50480.rs
+++ b/src/test/ui/issue-50480.rs
@@ -10,7 +10,6 @@
 
 #[derive(Clone, Copy)]
 //~^ ERROR the trait `Copy` may not be implemented for this type
-//~| ERROR the trait `Copy` may not be implemented for this type
 struct Foo(NotDefined, <i32 as Iterator>::Item, Vec<i32>, String);
 //~^ ERROR cannot find type `NotDefined` in this scope
 //~| ERROR the trait bound `i32: std::iter::Iterator` is not satisfied
diff --git a/src/test/ui/issue-50480.stderr b/src/test/ui/issue-50480.stderr
index 7aeecfaabb3..3714a0b72b7 100644
--- a/src/test/ui/issue-50480.stderr
+++ b/src/test/ui/issue-50480.stderr
@@ -1,11 +1,11 @@
 error[E0412]: cannot find type `NotDefined` in this scope
-  --> $DIR/issue-50480.rs:14:12
+  --> $DIR/issue-50480.rs:13:12
    |
 LL | struct Foo(NotDefined, <i32 as Iterator>::Item, Vec<i32>, String);
    |            ^^^^^^^^^^ not found in this scope
 
 error[E0277]: the trait bound `i32: std::iter::Iterator` is not satisfied
-  --> $DIR/issue-50480.rs:14:24
+  --> $DIR/issue-50480.rs:13:24
    |
 LL | struct Foo(NotDefined, <i32 as Iterator>::Item, Vec<i32>, String);
    |                        ^^^^^^^^^^^^^^^^^^^^^^^^ `i32` is not an iterator; maybe try calling `.iter()` or a similar method
@@ -17,20 +17,13 @@ error[E0204]: the trait `Copy` may not be implemented for this type
    |
 LL | #[derive(Clone, Copy)]
    |                 ^^^^
-...
+LL | //~^ ERROR the trait `Copy` may not be implemented for this type
 LL | struct Foo(NotDefined, <i32 as Iterator>::Item, Vec<i32>, String);
-   |                                                 --------- this field does not implement `Copy`
+   |                                                 --------- ------- this field does not implement `Copy`
+   |                                                 |
+   |                                                 this field does not implement `Copy`
 
-error[E0204]: the trait `Copy` may not be implemented for this type
-  --> $DIR/issue-50480.rs:11:17
-   |
-LL | #[derive(Clone, Copy)]
-   |                 ^^^^
-...
-LL | struct Foo(NotDefined, <i32 as Iterator>::Item, Vec<i32>, String);
-   |                                                           ------- this field does not implement `Copy`
-
-error: aborting due to 4 previous errors
+error: aborting due to 3 previous errors
 
 Some errors occurred: E0204, E0277, E0412.
 For more information about an error, try `rustc --explain E0204`.