about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGeorg Semmler <georg_semmler_05@web.de>2018-12-29 02:13:06 +0100
committerGeorg Semmler <georg_semmler_05@web.de>2019-01-03 22:27:12 +0100
commit2bc436e713d4816d66eeb5e0a1691491f68c1067 (patch)
tree5514c62352fb481188d7fbc30ae3c18f1e40eced
parentd6ffd88d21543a78a143b3047ba21b984143a8ca (diff)
downloadrust-2bc436e713d4816d66eeb5e0a1691491f68c1067.tar.gz
rust-2bc436e713d4816d66eeb5e0a1691491f68c1067.zip
Add missing files
-rw-r--r--src/test/ui/coherence/auxiliary/re_rebalance_coherence_lib.rs23
-rw-r--r--src/test/ui/coherence/coherence-all-remote.old.stderr (renamed from src/test/ui/coherence/coherence-all-remote.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-all-remote.re.stderr11
-rw-r--r--src/test/ui/coherence/coherence-bigint-param.old.stderr (renamed from src/test/ui/coherence/coherence-bigint-param.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-bigint-param.re.stderr11
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.old.stderr (renamed from src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.old.stderr (renamed from src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.old.stderr (renamed from src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.re.stderr13
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.old.stderr (renamed from src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.old.stderr (renamed from src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific.old.stderr (renamed from src/test/ui/coherence/coherence-blanket-conflicts-with-specific.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-blanket-conflicts-with-specific.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-conflicting-negative-trait-impl.old.stderr (renamed from src/test/ui/coherence/coherence-conflicting-negative-trait-impl.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-conflicting-negative-trait-impl.re.stderr21
-rw-r--r--src/test/ui/coherence/coherence-cow.a.stderr2
-rw-r--r--src/test/ui/coherence/coherence-cow.b.stderr2
-rw-r--r--src/test/ui/coherence/coherence-cow.c.stderr2
-rw-r--r--src/test/ui/coherence/coherence-cow.re_a.stderr12
-rw-r--r--src/test/ui/coherence/coherence-cow.re_b.stderr12
-rw-r--r--src/test/ui/coherence/coherence-cow.re_c.stderr12
-rw-r--r--src/test/ui/coherence/coherence-cross-crate-conflict.old.stderr (renamed from src/test/ui/coherence/coherence-cross-crate-conflict.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-cross-crate-conflict.re.stderr21
-rw-r--r--src/test/ui/coherence/coherence-default-trait-impl.old.stderr (renamed from src/test/ui/coherence/coherence-default-trait-impl.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-default-trait-impl.re.stderr16
-rw-r--r--src/test/ui/coherence/coherence-error-suppression.old.stderr (renamed from src/test/ui/coherence/coherence-error-suppression.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-error-suppression.re.stderr9
-rw-r--r--src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.old.stderr (renamed from src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.re.stderr11
-rw-r--r--src/test/ui/coherence/coherence-impl-trait-for-trait.old.stderr (renamed from src/test/ui/coherence/coherence-impl-trait-for-trait.stderr)12
-rw-r--r--src/test/ui/coherence/coherence-impl-trait-for-trait.re.stderr21
-rw-r--r--src/test/ui/coherence/coherence-impls-copy.old.stderr (renamed from src/test/ui/coherence/coherence-impls-copy.stderr)20
-rw-r--r--src/test/ui/coherence/coherence-impls-copy.re.stderr87
-rw-r--r--src/test/ui/coherence/coherence-impls-send.old.stderr (renamed from src/test/ui/coherence/coherence-impls-send.stderr)8
-rw-r--r--src/test/ui/coherence/coherence-impls-send.re.stderr37
-rw-r--r--src/test/ui/coherence/coherence-impls-sized.old.stderr (renamed from src/test/ui/coherence/coherence-impls-sized.stderr)36
-rw-r--r--src/test/ui/coherence/coherence-impls-sized.re.stderr67
-rw-r--r--src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.old.stderr (renamed from src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.re.stderr16
-rw-r--r--src/test/ui/coherence/coherence-lone-type-parameter.old.stderr (renamed from src/test/ui/coherence/coherence-lone-type-parameter.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-lone-type-parameter.re.stderr11
-rw-r--r--src/test/ui/coherence/coherence-negative-impls-safe.old.stderr (renamed from src/test/ui/coherence/coherence-negative-impls-safe.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-negative-impls-safe.re.stderr9
-rw-r--r--src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.old.stderr (renamed from src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.re.stderr11
-rw-r--r--src/test/ui/coherence/coherence-orphan.old.stderr (renamed from src/test/ui/coherence/coherence-orphan.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-orphan.re.stderr21
-rw-r--r--src/test/ui/coherence/coherence-overlap-all-t-and-tuple.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-all-t-and-tuple.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-overlap-all-t-and-tuple.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-overlap-downstream-inherent.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-downstream-inherent.stderr)8
-rw-r--r--src/test/ui/coherence/coherence-overlap-downstream-inherent.re.stderr23
-rw-r--r--src/test/ui/coherence/coherence-overlap-downstream.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-downstream.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-overlap-downstream.re.stderr21
-rw-r--r--src/test/ui/coherence/coherence-overlap-issue-23516-inherent.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-issue-23516-inherent.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-overlap-issue-23516-inherent.re.stderr14
-rw-r--r--src/test/ui/coherence/coherence-overlap-issue-23516.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-issue-23516.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-overlap-issue-23516.re.stderr13
-rw-r--r--src/test/ui/coherence/coherence-overlap-messages.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-messages.stderr)22
-rw-r--r--src/test/ui/coherence/coherence-overlap-messages.re.stderr44
-rw-r--r--src/test/ui/coherence/coherence-overlap-upstream-inherent.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-upstream-inherent.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-overlap-upstream-inherent.re.stderr14
-rw-r--r--src/test/ui/coherence/coherence-overlap-upstream.old.stderr (renamed from src/test/ui/coherence/coherence-overlap-upstream.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-overlap-upstream.re.stderr13
-rw-r--r--src/test/ui/coherence/coherence-overlapping-pairs.old.stderr (renamed from src/test/ui/coherence/coherence-overlapping-pairs.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-overlapping-pairs.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-pair-covered-uncovered-1.old.stderr (renamed from src/test/ui/coherence/coherence-pair-covered-uncovered-1.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-pair-covered-uncovered-1.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-pair-covered-uncovered.old.stderr (renamed from src/test/ui/coherence/coherence-pair-covered-uncovered.stderr)2
-rw-r--r--src/test/ui/coherence/coherence-pair-covered-uncovered.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-projection-conflict-orphan.old.stderr (renamed from src/test/ui/coherence/coherence-projection-conflict-orphan.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-projection-conflict-orphan.re.stderr14
-rw-r--r--src/test/ui/coherence/coherence-projection-conflict-ty-param.old.stderr (renamed from src/test/ui/coherence/coherence-projection-conflict-ty-param.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-projection-conflict-ty-param.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-projection-conflict.old.stderr (renamed from src/test/ui/coherence/coherence-projection-conflict.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-projection-conflict.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-tuple-conflict.old.stderr (renamed from src/test/ui/coherence/coherence-tuple-conflict.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-tuple-conflict.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-vec-local-2.old.stderr (renamed from src/test/ui/coherence/coherence-vec-local-2.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-vec-local-2.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence-vec-local.old.stderr (renamed from src/test/ui/coherence/coherence-vec-local.stderr)4
-rw-r--r--src/test/ui/coherence/coherence-vec-local.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.old.stderr (renamed from src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.stderr)4
-rw-r--r--src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.re.stderr14
-rw-r--r--src/test/ui/coherence/coherence_copy_like_err_struct.old.stderr (renamed from src/test/ui/coherence/coherence_copy_like_err_struct.stderr)4
-rw-r--r--src/test/ui/coherence/coherence_copy_like_err_struct.re.stderr14
-rw-r--r--src/test/ui/coherence/coherence_copy_like_err_tuple.old.stderr (renamed from src/test/ui/coherence/coherence_copy_like_err_tuple.stderr)4
-rw-r--r--src/test/ui/coherence/coherence_copy_like_err_tuple.re.stderr14
-rw-r--r--src/test/ui/coherence/coherence_inherent.old.stderr (renamed from src/test/ui/coherence/coherence_inherent.stderr)4
-rw-r--r--src/test/ui/coherence/coherence_inherent.re.stderr13
-rw-r--r--src/test/ui/coherence/coherence_inherent_cc.old.stderr (renamed from src/test/ui/coherence/coherence_inherent_cc.stderr)4
-rw-r--r--src/test/ui/coherence/coherence_inherent_cc.re.stderr13
-rw-r--r--src/test/ui/coherence/coherence_local_err_struct.old.stderr (renamed from src/test/ui/coherence/coherence_local_err_struct.stderr)4
-rw-r--r--src/test/ui/coherence/coherence_local_err_struct.re.stderr12
-rw-r--r--src/test/ui/coherence/coherence_local_err_tuple.old.stderr (renamed from src/test/ui/coherence/coherence_local_err_tuple.stderr)4
-rw-r--r--src/test/ui/coherence/coherence_local_err_tuple.re.stderr12
-rw-r--r--src/test/ui/coherence/re-rebalance-coherence.rs13
100 files changed, 1008 insertions, 127 deletions
diff --git a/src/test/ui/coherence/auxiliary/re_rebalance_coherence_lib.rs b/src/test/ui/coherence/auxiliary/re_rebalance_coherence_lib.rs
new file mode 100644
index 00000000000..c8d027b25c7
--- /dev/null
+++ b/src/test/ui/coherence/auxiliary/re_rebalance_coherence_lib.rs
@@ -0,0 +1,23 @@
+
+pub trait Backend{}
+pub trait SupportsDefaultKeyword {}
+
+impl SupportsDefaultKeyword for Postgres {}
+
+pub struct Postgres;
+
+impl Backend for Postgres {}
+
+pub struct AstPass<DB>(::std::marker::PhantomData<DB>);
+
+pub trait QueryFragment<DB: Backend> {}
+
+
+#[derive(Debug, Clone, Copy)]
+pub struct BatchInsert<'a, T: 'a, Tab> {
+    _marker: ::std::marker::PhantomData<(&'a T, Tab)>,
+}
+
+impl<'a, T:'a, Tab, DB> QueryFragment<DB> for BatchInsert<'a, T, Tab>
+where DB: SupportsDefaultKeyword + Backend,
+{}
diff --git a/src/test/ui/coherence/coherence-all-remote.stderr b/src/test/ui/coherence/coherence-all-remote.old.stderr
index 3d8afc418ea..0389a6228ef 100644
--- a/src/test/ui/coherence/coherence-all-remote.stderr
+++ b/src/test/ui/coherence/coherence-all-remote.old.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-all-remote.rs:6:1
+  --> $DIR/coherence-all-remote.rs:9:1
    |
 LL | impl<T> Remote1<T> for isize { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-all-remote.re.stderr b/src/test/ui/coherence/coherence-all-remote.re.stderr
new file mode 100644
index 00000000000..0389a6228ef
--- /dev/null
+++ b/src/test/ui/coherence/coherence-all-remote.re.stderr
@@ -0,0 +1,11 @@
+error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
+  --> $DIR/coherence-all-remote.rs:9:1
+   |
+LL | impl<T> Remote1<T> for isize { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
+   |
+   = note: only traits defined in the current crate can be implemented for a type parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0210`.
diff --git a/src/test/ui/coherence/coherence-bigint-param.stderr b/src/test/ui/coherence/coherence-bigint-param.old.stderr
index 81d56349a9e..54fec07e65a 100644
--- a/src/test/ui/coherence/coherence-bigint-param.stderr
+++ b/src/test/ui/coherence/coherence-bigint-param.old.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-bigint-param.rs:8:1
+  --> $DIR/coherence-bigint-param.rs:11:1
    |
 LL | impl<T> Remote1<BigInt> for T { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-bigint-param.re.stderr b/src/test/ui/coherence/coherence-bigint-param.re.stderr
new file mode 100644
index 00000000000..54fec07e65a
--- /dev/null
+++ b/src/test/ui/coherence/coherence-bigint-param.re.stderr
@@ -0,0 +1,11 @@
+error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
+  --> $DIR/coherence-bigint-param.rs:11:1
+   |
+LL | impl<T> Remote1<BigInt> for T { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
+   |
+   = note: only traits defined in the current crate can be implemented for a type parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0210`.
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.old.stderr
index 9dd08b9e558..a6d29048b4d 100644
--- a/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.stderr
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait`:
-  --> $DIR/coherence-blanket-conflicts-with-blanket-implemented.rs:24:1
+  --> $DIR/coherence-blanket-conflicts-with-blanket-implemented.rs:28:1
    |
 LL | impl<T:Even> MyTrait for T {
    | -------------------------- first implementation here
 ...
-LL | impl<T:Odd> MyTrait for T { //~ ERROR E0119
+LL | impl<T:Odd> MyTrait for T {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.re.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.re.stderr
new file mode 100644
index 00000000000..a6d29048b4d
--- /dev/null
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-implemented.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `MyTrait`:
+  --> $DIR/coherence-blanket-conflicts-with-blanket-implemented.rs:28:1
+   |
+LL | impl<T:Even> MyTrait for T {
+   | -------------------------- first implementation here
+...
+LL | impl<T:Odd> MyTrait for T {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.old.stderr
index 1719bc60a04..1f3ddd1dc42 100644
--- a/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.stderr
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait`:
-  --> $DIR/coherence-blanket-conflicts-with-blanket-unimplemented.rs:20:1
+  --> $DIR/coherence-blanket-conflicts-with-blanket-unimplemented.rs:24:1
    |
 LL | impl<T:Even> MyTrait for T {
    | -------------------------- first implementation here
 ...
-LL | impl<T:Odd> MyTrait for T { //~ ERROR E0119
+LL | impl<T:Odd> MyTrait for T {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.re.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.re.stderr
new file mode 100644
index 00000000000..1f3ddd1dc42
--- /dev/null
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-blanket-unimplemented.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `MyTrait`:
+  --> $DIR/coherence-blanket-conflicts-with-blanket-unimplemented.rs:24:1
+   |
+LL | impl<T:Even> MyTrait for T {
+   | -------------------------- first implementation here
+...
+LL | impl<T:Odd> MyTrait for T {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.old.stderr
index 5872f609e90..298ac6d1f21 100644
--- a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.stderr
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.old.stderr
@@ -1,7 +1,7 @@
 error[E0119]: conflicting implementations of trait `go_trait::GoMut` for type `MyThingy`:
-  --> $DIR/coherence-blanket-conflicts-with-specific-cross-crate.rs:15:1
+  --> $DIR/coherence-blanket-conflicts-with-specific-cross-crate.rs:18:1
    |
-LL | impl GoMut for MyThingy { //~ ERROR conflicting implementations
+LL | impl GoMut for MyThingy {
    | ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: conflicting implementation in crate `go_trait`:
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.re.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.re.stderr
new file mode 100644
index 00000000000..298ac6d1f21
--- /dev/null
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-cross-crate.re.stderr
@@ -0,0 +1,13 @@
+error[E0119]: conflicting implementations of trait `go_trait::GoMut` for type `MyThingy`:
+  --> $DIR/coherence-blanket-conflicts-with-specific-cross-crate.rs:18:1
+   |
+LL | impl GoMut for MyThingy {
+   | ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: conflicting implementation in crate `go_trait`:
+           - impl<G> go_trait::GoMut for G
+             where G: go_trait::Go;
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.old.stderr
index 9de354d8cf6..94bbbdbe0a4 100644
--- a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.stderr
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait<MyType>` for type `MyType`:
-  --> $DIR/coherence-blanket-conflicts-with-specific-multidispatch.rs:22:1
+  --> $DIR/coherence-blanket-conflicts-with-specific-multidispatch.rs:26:1
    |
 LL | impl<T> MyTrait<T> for T {
    | ------------------------ first implementation here
 ...
-LL | impl MyTrait<MyType> for MyType { //~ ERROR E0119
+LL | impl MyTrait<MyType> for MyType {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `MyType`
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.re.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.re.stderr
new file mode 100644
index 00000000000..94bbbdbe0a4
--- /dev/null
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-multidispatch.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `MyTrait<MyType>` for type `MyType`:
+  --> $DIR/coherence-blanket-conflicts-with-specific-multidispatch.rs:26:1
+   |
+LL | impl<T> MyTrait<T> for T {
+   | ------------------------ first implementation here
+...
+LL | impl MyTrait<MyType> for MyType {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `MyType`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.old.stderr
index c3f06a952c4..cf799c20cb4 100644
--- a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.stderr
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait` for type `MyType`:
-  --> $DIR/coherence-blanket-conflicts-with-specific-trait.rs:20:1
+  --> $DIR/coherence-blanket-conflicts-with-specific-trait.rs:24:1
    |
 LL | impl<T:OtherTrait> MyTrait for T {
    | -------------------------------- first implementation here
 ...
-LL | impl MyTrait for MyType { //~ ERROR E0119
+LL | impl MyTrait for MyType {
    | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `MyType`
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.re.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.re.stderr
new file mode 100644
index 00000000000..cf799c20cb4
--- /dev/null
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific-trait.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `MyTrait` for type `MyType`:
+  --> $DIR/coherence-blanket-conflicts-with-specific-trait.rs:24:1
+   |
+LL | impl<T:OtherTrait> MyTrait for T {
+   | -------------------------------- first implementation here
+...
+LL | impl MyTrait for MyType {
+   | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `MyType`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific.old.stderr
index 0b04c5fd0bd..0807b11a434 100644
--- a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific.stderr
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait` for type `MyType`:
-  --> $DIR/coherence-blanket-conflicts-with-specific.rs:19:1
+  --> $DIR/coherence-blanket-conflicts-with-specific.rs:23:1
    |
 LL | impl<T> MyTrait for T {
    | --------------------- first implementation here
 ...
-LL | impl MyTrait for MyType { //~ ERROR E0119
+LL | impl MyTrait for MyType {
    | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `MyType`
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-blanket-conflicts-with-specific.re.stderr b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific.re.stderr
new file mode 100644
index 00000000000..0807b11a434
--- /dev/null
+++ b/src/test/ui/coherence/coherence-blanket-conflicts-with-specific.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `MyTrait` for type `MyType`:
+  --> $DIR/coherence-blanket-conflicts-with-specific.rs:23:1
+   |
+LL | impl<T> MyTrait for T {
+   | --------------------- first implementation here
+...
+LL | impl MyTrait for MyType {
+   | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `MyType`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-conflicting-negative-trait-impl.stderr b/src/test/ui/coherence/coherence-conflicting-negative-trait-impl.old.stderr
index 0a8bbc4bc50..bb3641f2247 100644
--- a/src/test/ui/coherence/coherence-conflicting-negative-trait-impl.stderr
+++ b/src/test/ui/coherence/coherence-conflicting-negative-trait-impl.old.stderr
@@ -1,5 +1,5 @@
 error[E0119]: conflicting implementations of trait `std::marker::Send` for type `TestType<_>`:
-  --> $DIR/coherence-conflicting-negative-trait-impl.rs:10:1
+  --> $DIR/coherence-conflicting-negative-trait-impl.rs:13:1
    |
 LL | unsafe impl<T: MyTrait+'static> Send for TestType<T> {}
    | ---------------------------------------------------- first implementation here
@@ -8,7 +8,7 @@ LL | impl<T: MyTrait> !Send for TestType<T> {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `TestType<_>`
 
 error[E0119]: conflicting implementations of trait `std::marker::Send` for type `TestType<i32>`:
-  --> $DIR/coherence-conflicting-negative-trait-impl.rs:15:1
+  --> $DIR/coherence-conflicting-negative-trait-impl.rs:19:1
    |
 LL | unsafe impl<T:'static> Send for TestType<T> {}
    | ------------------------------------------- first implementation here
diff --git a/src/test/ui/coherence/coherence-conflicting-negative-trait-impl.re.stderr b/src/test/ui/coherence/coherence-conflicting-negative-trait-impl.re.stderr
new file mode 100644
index 00000000000..bb3641f2247
--- /dev/null
+++ b/src/test/ui/coherence/coherence-conflicting-negative-trait-impl.re.stderr
@@ -0,0 +1,21 @@
+error[E0119]: conflicting implementations of trait `std::marker::Send` for type `TestType<_>`:
+  --> $DIR/coherence-conflicting-negative-trait-impl.rs:13:1
+   |
+LL | unsafe impl<T: MyTrait+'static> Send for TestType<T> {}
+   | ---------------------------------------------------- first implementation here
+LL | 
+LL | impl<T: MyTrait> !Send for TestType<T> {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `TestType<_>`
+
+error[E0119]: conflicting implementations of trait `std::marker::Send` for type `TestType<i32>`:
+  --> $DIR/coherence-conflicting-negative-trait-impl.rs:19:1
+   |
+LL | unsafe impl<T:'static> Send for TestType<T> {}
+   | ------------------------------------------- first implementation here
+LL | 
+LL | impl !Send for TestType<i32> {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `TestType<i32>`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-cow.a.stderr b/src/test/ui/coherence/coherence-cow.a.stderr
index 2a3e57b1ce2..dd9cfab503f 100644
--- a/src/test/ui/coherence/coherence-cow.a.stderr
+++ b/src/test/ui/coherence/coherence-cow.a.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-cow.rs:28:1
+  --> $DIR/coherence-cow.rs:18:1
    |
 LL | impl<T> Remote for Pair<T,Cover<T>> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-cow.b.stderr b/src/test/ui/coherence/coherence-cow.b.stderr
index 0512baef136..fb3ca3fc6b7 100644
--- a/src/test/ui/coherence/coherence-cow.b.stderr
+++ b/src/test/ui/coherence/coherence-cow.b.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-cow.rs:33:1
+  --> $DIR/coherence-cow.rs:23:1
    |
 LL | impl<T> Remote for Pair<Cover<T>,T> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-cow.c.stderr b/src/test/ui/coherence/coherence-cow.c.stderr
index 1a95d82a03a..f17823b7f89 100644
--- a/src/test/ui/coherence/coherence-cow.c.stderr
+++ b/src/test/ui/coherence/coherence-cow.c.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-cow.rs:38:1
+  --> $DIR/coherence-cow.rs:28:1
    |
 LL | impl<T,U> Remote for Pair<Cover<T>,U> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-cow.re_a.stderr b/src/test/ui/coherence/coherence-cow.re_a.stderr
new file mode 100644
index 00000000000..ed627600b0f
--- /dev/null
+++ b/src/test/ui/coherence/coherence-cow.re_a.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-cow.rs:18:1
+   |
+LL | impl<T> Remote for Pair<T,Cover<T>> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-cow.re_b.stderr b/src/test/ui/coherence/coherence-cow.re_b.stderr
new file mode 100644
index 00000000000..1a85887ae7b
--- /dev/null
+++ b/src/test/ui/coherence/coherence-cow.re_b.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-cow.rs:23:1
+   |
+LL | impl<T> Remote for Pair<Cover<T>,T> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-cow.re_c.stderr b/src/test/ui/coherence/coherence-cow.re_c.stderr
new file mode 100644
index 00000000000..8043b6702b0
--- /dev/null
+++ b/src/test/ui/coherence/coherence-cow.re_c.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-cow.rs:28:1
+   |
+LL | impl<T,U> Remote for Pair<Cover<T>,U> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-cross-crate-conflict.stderr b/src/test/ui/coherence/coherence-cross-crate-conflict.old.stderr
index 4a73aa357d0..3ba32a52835 100644
--- a/src/test/ui/coherence/coherence-cross-crate-conflict.stderr
+++ b/src/test/ui/coherence/coherence-cross-crate-conflict.old.stderr
@@ -1,5 +1,5 @@
 error[E0119]: conflicting implementations of trait `trait_impl_conflict::Foo` for type `isize`:
-  --> $DIR/coherence-cross-crate-conflict.rs:8:1
+  --> $DIR/coherence-cross-crate-conflict.rs:12:1
    |
 LL | impl<A> Foo for A {
    | ^^^^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | impl<A> Foo for A {
            - impl trait_impl_conflict::Foo for isize;
 
 error[E0210]: type parameter `A` must be used as the type parameter for some local type (e.g., `MyStruct<A>`)
-  --> $DIR/coherence-cross-crate-conflict.rs:8:1
+  --> $DIR/coherence-cross-crate-conflict.rs:12:1
    |
 LL | impl<A> Foo for A {
    | ^^^^^^^^^^^^^^^^^ type parameter `A` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-cross-crate-conflict.re.stderr b/src/test/ui/coherence/coherence-cross-crate-conflict.re.stderr
new file mode 100644
index 00000000000..3ba32a52835
--- /dev/null
+++ b/src/test/ui/coherence/coherence-cross-crate-conflict.re.stderr
@@ -0,0 +1,21 @@
+error[E0119]: conflicting implementations of trait `trait_impl_conflict::Foo` for type `isize`:
+  --> $DIR/coherence-cross-crate-conflict.rs:12:1
+   |
+LL | impl<A> Foo for A {
+   | ^^^^^^^^^^^^^^^^^
+   |
+   = note: conflicting implementation in crate `trait_impl_conflict`:
+           - impl trait_impl_conflict::Foo for isize;
+
+error[E0210]: type parameter `A` must be used as the type parameter for some local type (e.g., `MyStruct<A>`)
+  --> $DIR/coherence-cross-crate-conflict.rs:12:1
+   |
+LL | impl<A> Foo for A {
+   | ^^^^^^^^^^^^^^^^^ type parameter `A` must be used as the type parameter for some local type
+   |
+   = note: only traits defined in the current crate can be implemented for a type parameter
+
+error: aborting due to 2 previous errors
+
+Some errors occurred: E0119, E0210.
+For more information about an error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-default-trait-impl.stderr b/src/test/ui/coherence/coherence-default-trait-impl.old.stderr
index 6309d60dd96..534f4b0dcdb 100644
--- a/src/test/ui/coherence/coherence-default-trait-impl.stderr
+++ b/src/test/ui/coherence/coherence-default-trait-impl.old.stderr
@@ -1,11 +1,11 @@
 error[E0199]: implementing the trait `MySafeTrait` is not unsafe
-  --> $DIR/coherence-default-trait-impl.rs:7:1
+  --> $DIR/coherence-default-trait-impl.rs:10:1
    |
 LL | unsafe impl MySafeTrait for Foo {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0200]: the trait `MyUnsafeTrait` requires an `unsafe impl` declaration
-  --> $DIR/coherence-default-trait-impl.rs:12:1
+  --> $DIR/coherence-default-trait-impl.rs:16:1
    |
 LL | impl MyUnsafeTrait for Foo {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/coherence/coherence-default-trait-impl.re.stderr b/src/test/ui/coherence/coherence-default-trait-impl.re.stderr
new file mode 100644
index 00000000000..534f4b0dcdb
--- /dev/null
+++ b/src/test/ui/coherence/coherence-default-trait-impl.re.stderr
@@ -0,0 +1,16 @@
+error[E0199]: implementing the trait `MySafeTrait` is not unsafe
+  --> $DIR/coherence-default-trait-impl.rs:10:1
+   |
+LL | unsafe impl MySafeTrait for Foo {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0200]: the trait `MyUnsafeTrait` requires an `unsafe impl` declaration
+  --> $DIR/coherence-default-trait-impl.rs:16:1
+   |
+LL | impl MyUnsafeTrait for Foo {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+Some errors occurred: E0199, E0200.
+For more information about an error, try `rustc --explain E0199`.
diff --git a/src/test/ui/coherence/coherence-error-suppression.stderr b/src/test/ui/coherence/coherence-error-suppression.old.stderr
index 17a3c627720..b81f7553317 100644
--- a/src/test/ui/coherence/coherence-error-suppression.stderr
+++ b/src/test/ui/coherence/coherence-error-suppression.old.stderr
@@ -1,7 +1,7 @@
 error[E0412]: cannot find type `DoesNotExist` in this scope
-  --> $DIR/coherence-error-suppression.rs:9:14
+  --> $DIR/coherence-error-suppression.rs:13:14
    |
-LL | impl Foo for DoesNotExist {} //~ ERROR cannot find type `DoesNotExist` in this scope
+LL | impl Foo for DoesNotExist {}
    |              ^^^^^^^^^^^^ not found in this scope
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-error-suppression.re.stderr b/src/test/ui/coherence/coherence-error-suppression.re.stderr
new file mode 100644
index 00000000000..b81f7553317
--- /dev/null
+++ b/src/test/ui/coherence/coherence-error-suppression.re.stderr
@@ -0,0 +1,9 @@
+error[E0412]: cannot find type `DoesNotExist` in this scope
+  --> $DIR/coherence-error-suppression.rs:13:14
+   |
+LL | impl Foo for DoesNotExist {}
+   |              ^^^^^^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0412`.
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.stderr b/src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.old.stderr
index a19b00194c3..b48f6bbfb94 100644
--- a/src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.stderr
+++ b/src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.old.stderr
@@ -1,7 +1,7 @@
 error[E0038]: the trait `NotObjectSafe` cannot be made into an object
-  --> $DIR/coherence-impl-trait-for-trait-object-safe.rs:7:6
+  --> $DIR/coherence-impl-trait-for-trait-object-safe.rs:11:6
    |
-LL | impl NotObjectSafe for NotObjectSafe { } //~ ERROR E0038
+LL | impl NotObjectSafe for NotObjectSafe { }
    |      ^^^^^^^^^^^^^ the trait `NotObjectSafe` cannot be made into an object
    |
    = note: method `eq` references the `Self` type in its arguments or return type
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.re.stderr b/src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.re.stderr
new file mode 100644
index 00000000000..b48f6bbfb94
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-trait-object-safe.re.stderr
@@ -0,0 +1,11 @@
+error[E0038]: the trait `NotObjectSafe` cannot be made into an object
+  --> $DIR/coherence-impl-trait-for-trait-object-safe.rs:11:6
+   |
+LL | impl NotObjectSafe for NotObjectSafe { }
+   |      ^^^^^^^^^^^^^ the trait `NotObjectSafe` cannot be made into an object
+   |
+   = note: method `eq` references the `Self` type in its arguments or return type
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0038`.
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-trait.stderr b/src/test/ui/coherence/coherence-impl-trait-for-trait.old.stderr
index 05abef145b7..324747603f9 100644
--- a/src/test/ui/coherence/coherence-impl-trait-for-trait.stderr
+++ b/src/test/ui/coherence/coherence-impl-trait-for-trait.old.stderr
@@ -1,19 +1,19 @@
 error[E0371]: the object type `(dyn Baz + 'static)` automatically implements the trait `Foo`
-  --> $DIR/coherence-impl-trait-for-trait.rs:9:1
+  --> $DIR/coherence-impl-trait-for-trait.rs:13:1
    |
-LL | impl Foo for Baz { }   //~ ERROR E0371
+LL | impl Foo for Baz { }
    | ^^^^^^^^^^^^^^^^ `(dyn Baz + 'static)` automatically implements trait `Foo`
 
 error[E0371]: the object type `(dyn Baz + 'static)` automatically implements the trait `Bar`
-  --> $DIR/coherence-impl-trait-for-trait.rs:10:1
+  --> $DIR/coherence-impl-trait-for-trait.rs:16:1
    |
-LL | impl Bar for Baz { }   //~ ERROR E0371
+LL | impl Bar for Baz { }
    | ^^^^^^^^^^^^^^^^ `(dyn Baz + 'static)` automatically implements trait `Bar`
 
 error[E0371]: the object type `(dyn Baz + 'static)` automatically implements the trait `Baz`
-  --> $DIR/coherence-impl-trait-for-trait.rs:11:1
+  --> $DIR/coherence-impl-trait-for-trait.rs:19:1
    |
-LL | impl Baz for Baz { }   //~ ERROR E0371
+LL | impl Baz for Baz { }
    | ^^^^^^^^^^^^^^^^ `(dyn Baz + 'static)` automatically implements trait `Baz`
 
 error: aborting due to 3 previous errors
diff --git a/src/test/ui/coherence/coherence-impl-trait-for-trait.re.stderr b/src/test/ui/coherence/coherence-impl-trait-for-trait.re.stderr
new file mode 100644
index 00000000000..324747603f9
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impl-trait-for-trait.re.stderr
@@ -0,0 +1,21 @@
+error[E0371]: the object type `(dyn Baz + 'static)` automatically implements the trait `Foo`
+  --> $DIR/coherence-impl-trait-for-trait.rs:13:1
+   |
+LL | impl Foo for Baz { }
+   | ^^^^^^^^^^^^^^^^ `(dyn Baz + 'static)` automatically implements trait `Foo`
+
+error[E0371]: the object type `(dyn Baz + 'static)` automatically implements the trait `Bar`
+  --> $DIR/coherence-impl-trait-for-trait.rs:16:1
+   |
+LL | impl Bar for Baz { }
+   | ^^^^^^^^^^^^^^^^ `(dyn Baz + 'static)` automatically implements trait `Bar`
+
+error[E0371]: the object type `(dyn Baz + 'static)` automatically implements the trait `Baz`
+  --> $DIR/coherence-impl-trait-for-trait.rs:19:1
+   |
+LL | impl Baz for Baz { }
+   | ^^^^^^^^^^^^^^^^ `(dyn Baz + 'static)` automatically implements trait `Baz`
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0371`.
diff --git a/src/test/ui/coherence/coherence-impls-copy.stderr b/src/test/ui/coherence/coherence-impls-copy.old.stderr
index b528bf8fa59..defbbbadd55 100644
--- a/src/test/ui/coherence/coherence-impls-copy.stderr
+++ b/src/test/ui/coherence/coherence-impls-copy.old.stderr
@@ -1,5 +1,5 @@
 error[E0119]: conflicting implementations of trait `std::marker::Copy` for type `i32`:
-  --> $DIR/coherence-impls-copy.rs:5:1
+  --> $DIR/coherence-impls-copy.rs:8:1
    |
 LL | impl Copy for i32 {}
    | ^^^^^^^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL | impl Copy for i32 {}
            - impl std::marker::Copy for i32;
 
 error[E0119]: conflicting implementations of trait `std::marker::Copy` for type `&NotSync`:
-  --> $DIR/coherence-impls-copy.rs:31:1
+  --> $DIR/coherence-impls-copy.rs:37:1
    |
 LL | impl Copy for &'static NotSync {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -18,7 +18,7 @@ LL | impl Copy for &'static NotSync {}
              where T: ?Sized;
 
 error[E0119]: conflicting implementations of trait `std::marker::Copy` for type `&[NotSync]`:
-  --> $DIR/coherence-impls-copy.rs:38:1
+  --> $DIR/coherence-impls-copy.rs:45:1
    |
 LL | impl Copy for &'static [NotSync] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -28,25 +28,25 @@ LL | impl Copy for &'static [NotSync] {}
              where T: ?Sized;
 
 error[E0206]: the trait `Copy` may not be implemented for this type
-  --> $DIR/coherence-impls-copy.rs:23:15
+  --> $DIR/coherence-impls-copy.rs:27:15
    |
 LL | impl Copy for &'static mut MyType {}
    |               ^^^^^^^^^^^^^^^^^^^ type is not a structure or enumeration
 
 error[E0206]: the trait `Copy` may not be implemented for this type
-  --> $DIR/coherence-impls-copy.rs:27:15
+  --> $DIR/coherence-impls-copy.rs:32:15
    |
 LL | impl Copy for (MyType, MyType) {}
    |               ^^^^^^^^^^^^^^^^ type is not a structure or enumeration
 
 error[E0206]: the trait `Copy` may not be implemented for this type
-  --> $DIR/coherence-impls-copy.rs:34:15
+  --> $DIR/coherence-impls-copy.rs:40:15
    |
 LL | impl Copy for [MyType] {}
    |               ^^^^^^^^ type is not a structure or enumeration
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-copy.rs:5:1
+  --> $DIR/coherence-impls-copy.rs:8:1
    |
 LL | impl Copy for i32 {}
    | ^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
@@ -55,7 +55,7 @@ LL | impl Copy for i32 {}
    = note: define and implement a trait or new type instead
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-copy.rs:27:1
+  --> $DIR/coherence-impls-copy.rs:32:1
    |
 LL | impl Copy for (MyType, MyType) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
@@ -64,7 +64,7 @@ LL | impl Copy for (MyType, MyType) {}
    = note: define and implement a trait or new type instead
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-copy.rs:34:1
+  --> $DIR/coherence-impls-copy.rs:40:1
    |
 LL | impl Copy for [MyType] {}
    | ^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
@@ -73,7 +73,7 @@ LL | impl Copy for [MyType] {}
    = note: define and implement a trait or new type instead
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-copy.rs:38:1
+  --> $DIR/coherence-impls-copy.rs:45:1
    |
 LL | impl Copy for &'static [NotSync] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
diff --git a/src/test/ui/coherence/coherence-impls-copy.re.stderr b/src/test/ui/coherence/coherence-impls-copy.re.stderr
new file mode 100644
index 00000000000..defbbbadd55
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impls-copy.re.stderr
@@ -0,0 +1,87 @@
+error[E0119]: conflicting implementations of trait `std::marker::Copy` for type `i32`:
+  --> $DIR/coherence-impls-copy.rs:8:1
+   |
+LL | impl Copy for i32 {}
+   | ^^^^^^^^^^^^^^^^^
+   |
+   = note: conflicting implementation in crate `core`:
+           - impl std::marker::Copy for i32;
+
+error[E0119]: conflicting implementations of trait `std::marker::Copy` for type `&NotSync`:
+  --> $DIR/coherence-impls-copy.rs:37:1
+   |
+LL | impl Copy for &'static NotSync {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: conflicting implementation in crate `core`:
+           - impl<T> std::marker::Copy for &T
+             where T: ?Sized;
+
+error[E0119]: conflicting implementations of trait `std::marker::Copy` for type `&[NotSync]`:
+  --> $DIR/coherence-impls-copy.rs:45:1
+   |
+LL | impl Copy for &'static [NotSync] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: conflicting implementation in crate `core`:
+           - impl<T> std::marker::Copy for &T
+             where T: ?Sized;
+
+error[E0206]: the trait `Copy` may not be implemented for this type
+  --> $DIR/coherence-impls-copy.rs:27:15
+   |
+LL | impl Copy for &'static mut MyType {}
+   |               ^^^^^^^^^^^^^^^^^^^ type is not a structure or enumeration
+
+error[E0206]: the trait `Copy` may not be implemented for this type
+  --> $DIR/coherence-impls-copy.rs:32:15
+   |
+LL | impl Copy for (MyType, MyType) {}
+   |               ^^^^^^^^^^^^^^^^ type is not a structure or enumeration
+
+error[E0206]: the trait `Copy` may not be implemented for this type
+  --> $DIR/coherence-impls-copy.rs:40:15
+   |
+LL | impl Copy for [MyType] {}
+   |               ^^^^^^^^ type is not a structure or enumeration
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-copy.rs:8:1
+   |
+LL | impl Copy for i32 {}
+   | ^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-copy.rs:32:1
+   |
+LL | impl Copy for (MyType, MyType) {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-copy.rs:40:1
+   |
+LL | impl Copy for [MyType] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-copy.rs:45:1
+   |
+LL | impl Copy for &'static [NotSync] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to 10 previous errors
+
+Some errors occurred: E0117, E0119, E0206.
+For more information about an error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-impls-send.stderr b/src/test/ui/coherence/coherence-impls-send.old.stderr
index 02d90eea8fe..ca45c28ec2d 100644
--- a/src/test/ui/coherence/coherence-impls-send.stderr
+++ b/src/test/ui/coherence/coherence-impls-send.old.stderr
@@ -1,5 +1,5 @@
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-send.rs:17:1
+  --> $DIR/coherence-impls-send.rs:20:1
    |
 LL | unsafe impl Send for (MyType, MyType) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
@@ -8,13 +8,13 @@ LL | unsafe impl Send for (MyType, MyType) {}
    = note: define and implement a trait or new type instead
 
 error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `&'static NotSync`
-  --> $DIR/coherence-impls-send.rs:20:1
+  --> $DIR/coherence-impls-send.rs:24:1
    |
 LL | unsafe impl Send for &'static NotSync {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-send.rs:23:1
+  --> $DIR/coherence-impls-send.rs:28:1
    |
 LL | unsafe impl Send for [MyType] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
@@ -23,7 +23,7 @@ LL | unsafe impl Send for [MyType] {}
    = note: define and implement a trait or new type instead
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-send.rs:26:1
+  --> $DIR/coherence-impls-send.rs:32:1
    |
 LL | unsafe impl Send for &'static [NotSync] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
diff --git a/src/test/ui/coherence/coherence-impls-send.re.stderr b/src/test/ui/coherence/coherence-impls-send.re.stderr
new file mode 100644
index 00000000000..ca45c28ec2d
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impls-send.re.stderr
@@ -0,0 +1,37 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-send.rs:20:1
+   |
+LL | unsafe impl Send for (MyType, MyType) {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0321]: cross-crate traits with a default impl, like `std::marker::Send`, can only be implemented for a struct/enum type, not `&'static NotSync`
+  --> $DIR/coherence-impls-send.rs:24:1
+   |
+LL | unsafe impl Send for &'static NotSync {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum type
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-send.rs:28:1
+   |
+LL | unsafe impl Send for [MyType] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-send.rs:32:1
+   |
+LL | unsafe impl Send for &'static [NotSync] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to 4 previous errors
+
+Some errors occurred: E0117, E0321.
+For more information about an error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-impls-sized.stderr b/src/test/ui/coherence/coherence-impls-sized.old.stderr
index fbe08a59f52..c9c7dd0ed66 100644
--- a/src/test/ui/coherence/coherence-impls-sized.stderr
+++ b/src/test/ui/coherence/coherence-impls-sized.old.stderr
@@ -1,61 +1,61 @@
 error[E0322]: explicit impls for the `Sized` trait are not permitted
-  --> $DIR/coherence-impls-sized.rs:14:1
+  --> $DIR/coherence-impls-sized.rs:17:1
    |
-LL | impl Sized for TestE {} //~ ERROR E0322
+LL | impl Sized for TestE {}
    | ^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
 
 error[E0322]: explicit impls for the `Sized` trait are not permitted
-  --> $DIR/coherence-impls-sized.rs:17:1
+  --> $DIR/coherence-impls-sized.rs:22:1
    |
-LL | impl Sized for MyType {} //~ ERROR E0322
+LL | impl Sized for MyType {}
    | ^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
 
 error[E0322]: explicit impls for the `Sized` trait are not permitted
-  --> $DIR/coherence-impls-sized.rs:20:1
+  --> $DIR/coherence-impls-sized.rs:27:1
    |
-LL | impl Sized for (MyType, MyType) {} //~ ERROR E0322
+LL | impl Sized for (MyType, MyType) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
 
 error[E0322]: explicit impls for the `Sized` trait are not permitted
-  --> $DIR/coherence-impls-sized.rs:24:1
+  --> $DIR/coherence-impls-sized.rs:34:1
    |
-LL | impl Sized for &'static NotSync {} //~ ERROR E0322
+LL | impl Sized for &'static NotSync {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
 
 error[E0322]: explicit impls for the `Sized` trait are not permitted
-  --> $DIR/coherence-impls-sized.rs:27:1
+  --> $DIR/coherence-impls-sized.rs:39:1
    |
-LL | impl Sized for [MyType] {} //~ ERROR E0322
+LL | impl Sized for [MyType] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
 
 error[E0322]: explicit impls for the `Sized` trait are not permitted
-  --> $DIR/coherence-impls-sized.rs:31:1
+  --> $DIR/coherence-impls-sized.rs:46:1
    |
-LL | impl Sized for &'static [NotSync] {} //~ ERROR E0322
+LL | impl Sized for &'static [NotSync] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-sized.rs:20:1
+  --> $DIR/coherence-impls-sized.rs:27:1
    |
-LL | impl Sized for (MyType, MyType) {} //~ ERROR E0322
+LL | impl Sized for (MyType, MyType) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
    |
    = note: the impl does not reference any types defined in this crate
    = note: define and implement a trait or new type instead
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-sized.rs:27:1
+  --> $DIR/coherence-impls-sized.rs:39:1
    |
-LL | impl Sized for [MyType] {} //~ ERROR E0322
+LL | impl Sized for [MyType] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
    |
    = note: the impl does not reference any types defined in this crate
    = note: define and implement a trait or new type instead
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-impls-sized.rs:31:1
+  --> $DIR/coherence-impls-sized.rs:46:1
    |
-LL | impl Sized for &'static [NotSync] {} //~ ERROR E0322
+LL | impl Sized for &'static [NotSync] {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
    |
    = note: the impl does not reference any types defined in this crate
diff --git a/src/test/ui/coherence/coherence-impls-sized.re.stderr b/src/test/ui/coherence/coherence-impls-sized.re.stderr
new file mode 100644
index 00000000000..c9c7dd0ed66
--- /dev/null
+++ b/src/test/ui/coherence/coherence-impls-sized.re.stderr
@@ -0,0 +1,67 @@
+error[E0322]: explicit impls for the `Sized` trait are not permitted
+  --> $DIR/coherence-impls-sized.rs:17:1
+   |
+LL | impl Sized for TestE {}
+   | ^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
+
+error[E0322]: explicit impls for the `Sized` trait are not permitted
+  --> $DIR/coherence-impls-sized.rs:22:1
+   |
+LL | impl Sized for MyType {}
+   | ^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
+
+error[E0322]: explicit impls for the `Sized` trait are not permitted
+  --> $DIR/coherence-impls-sized.rs:27:1
+   |
+LL | impl Sized for (MyType, MyType) {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
+
+error[E0322]: explicit impls for the `Sized` trait are not permitted
+  --> $DIR/coherence-impls-sized.rs:34:1
+   |
+LL | impl Sized for &'static NotSync {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
+
+error[E0322]: explicit impls for the `Sized` trait are not permitted
+  --> $DIR/coherence-impls-sized.rs:39:1
+   |
+LL | impl Sized for [MyType] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
+
+error[E0322]: explicit impls for the `Sized` trait are not permitted
+  --> $DIR/coherence-impls-sized.rs:46:1
+   |
+LL | impl Sized for &'static [NotSync] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl of 'Sized' not allowed
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-sized.rs:27:1
+   |
+LL | impl Sized for (MyType, MyType) {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-sized.rs:39:1
+   |
+LL | impl Sized for [MyType] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-impls-sized.rs:46:1
+   |
+LL | impl Sized for &'static [NotSync] {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to 9 previous errors
+
+Some errors occurred: E0117, E0322.
+For more information about an error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.stderr b/src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.old.stderr
index 0b9f03db5c6..a2fa49acd2c 100644
--- a/src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.stderr
+++ b/src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.old.stderr
@@ -1,12 +1,12 @@
 error[E0391]: cycle detected when processing `Trait`
-  --> $DIR/coherence-inherited-assoc-ty-cycle-err.rs:9:1
+  --> $DIR/coherence-inherited-assoc-ty-cycle-err.rs:12:1
    |
 LL | trait Trait<T> { type Assoc; }
    | ^^^^^^^^^^^^^^
    |
    = note: ...which again requires processing `Trait`, completing the cycle
 note: cycle used when coherence checking all impls of trait `Trait`
-  --> $DIR/coherence-inherited-assoc-ty-cycle-err.rs:9:1
+  --> $DIR/coherence-inherited-assoc-ty-cycle-err.rs:12:1
    |
 LL | trait Trait<T> { type Assoc; }
    | ^^^^^^^^^^^^^^
diff --git a/src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.re.stderr b/src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.re.stderr
new file mode 100644
index 00000000000..a2fa49acd2c
--- /dev/null
+++ b/src/test/ui/coherence/coherence-inherited-assoc-ty-cycle-err.re.stderr
@@ -0,0 +1,16 @@
+error[E0391]: cycle detected when processing `Trait`
+  --> $DIR/coherence-inherited-assoc-ty-cycle-err.rs:12:1
+   |
+LL | trait Trait<T> { type Assoc; }
+   | ^^^^^^^^^^^^^^
+   |
+   = note: ...which again requires processing `Trait`, completing the cycle
+note: cycle used when coherence checking all impls of trait `Trait`
+  --> $DIR/coherence-inherited-assoc-ty-cycle-err.rs:12:1
+   |
+LL | trait Trait<T> { type Assoc; }
+   | ^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0391`.
diff --git a/src/test/ui/coherence/coherence-lone-type-parameter.stderr b/src/test/ui/coherence/coherence-lone-type-parameter.old.stderr
index 68e2dae095f..ac77241e9e7 100644
--- a/src/test/ui/coherence/coherence-lone-type-parameter.stderr
+++ b/src/test/ui/coherence/coherence-lone-type-parameter.old.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-lone-type-parameter.rs:6:1
+  --> $DIR/coherence-lone-type-parameter.rs:9:1
    |
 LL | impl<T> Remote for T { }
    | ^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-lone-type-parameter.re.stderr b/src/test/ui/coherence/coherence-lone-type-parameter.re.stderr
new file mode 100644
index 00000000000..ac77241e9e7
--- /dev/null
+++ b/src/test/ui/coherence/coherence-lone-type-parameter.re.stderr
@@ -0,0 +1,11 @@
+error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
+  --> $DIR/coherence-lone-type-parameter.rs:9:1
+   |
+LL | impl<T> Remote for T { }
+   | ^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
+   |
+   = note: only traits defined in the current crate can be implemented for a type parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0210`.
diff --git a/src/test/ui/coherence/coherence-negative-impls-safe.stderr b/src/test/ui/coherence/coherence-negative-impls-safe.old.stderr
index c47c9d25e36..7ed47dca497 100644
--- a/src/test/ui/coherence/coherence-negative-impls-safe.stderr
+++ b/src/test/ui/coherence/coherence-negative-impls-safe.old.stderr
@@ -1,5 +1,5 @@
 error[E0198]: negative impls cannot be unsafe
-  --> $DIR/coherence-negative-impls-safe.rs:7:1
+  --> $DIR/coherence-negative-impls-safe.rs:10:1
    |
 LL | unsafe impl !Send for TestType {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/coherence/coherence-negative-impls-safe.re.stderr b/src/test/ui/coherence/coherence-negative-impls-safe.re.stderr
new file mode 100644
index 00000000000..7ed47dca497
--- /dev/null
+++ b/src/test/ui/coherence/coherence-negative-impls-safe.re.stderr
@@ -0,0 +1,9 @@
+error[E0198]: negative impls cannot be unsafe
+  --> $DIR/coherence-negative-impls-safe.rs:10:1
+   |
+LL | unsafe impl !Send for TestType {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0198`.
diff --git a/src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.stderr b/src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.old.stderr
index f1cc0088cf1..81465e71856 100644
--- a/src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.stderr
+++ b/src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.old.stderr
@@ -1,9 +1,9 @@
 error[E0119]: conflicting implementations of trait `MyTrait`:
-  --> $DIR/coherence-no-direct-lifetime-dispatch.rs:6:1
+  --> $DIR/coherence-no-direct-lifetime-dispatch.rs:10:1
    |
 LL | impl<T> MyTrait for T {}
    | --------------------- first implementation here
-LL | impl<T: 'static> MyTrait for T {} //~ ERROR E0119
+LL | impl<T: 'static> MyTrait for T {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.re.stderr b/src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.re.stderr
new file mode 100644
index 00000000000..81465e71856
--- /dev/null
+++ b/src/test/ui/coherence/coherence-no-direct-lifetime-dispatch.re.stderr
@@ -0,0 +1,11 @@
+error[E0119]: conflicting implementations of trait `MyTrait`:
+  --> $DIR/coherence-no-direct-lifetime-dispatch.rs:10:1
+   |
+LL | impl<T> MyTrait for T {}
+   | --------------------- first implementation here
+LL | impl<T: 'static> MyTrait for T {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-orphan.stderr b/src/test/ui/coherence/coherence-orphan.old.stderr
index 1b32faf970c..da5de461bf4 100644
--- a/src/test/ui/coherence/coherence-orphan.stderr
+++ b/src/test/ui/coherence/coherence-orphan.old.stderr
@@ -1,5 +1,5 @@
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-orphan.rs:11:1
+  --> $DIR/coherence-orphan.rs:13:1
    |
 LL | impl TheTrait<usize> for isize { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
@@ -8,7 +8,7 @@ LL | impl TheTrait<usize> for isize { }
    = note: define and implement a trait or new type instead
 
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-orphan.rs:18:1
+  --> $DIR/coherence-orphan.rs:21:1
    |
 LL | impl !Send for Vec<isize> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
diff --git a/src/test/ui/coherence/coherence-orphan.re.stderr b/src/test/ui/coherence/coherence-orphan.re.stderr
new file mode 100644
index 00000000000..da5de461bf4
--- /dev/null
+++ b/src/test/ui/coherence/coherence-orphan.re.stderr
@@ -0,0 +1,21 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-orphan.rs:13:1
+   |
+LL | impl TheTrait<usize> for isize { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-orphan.rs:21:1
+   |
+LL | impl !Send for Vec<isize> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-overlap-all-t-and-tuple.stderr b/src/test/ui/coherence/coherence-overlap-all-t-and-tuple.old.stderr
index 2bb3031edce..c7f85b0b590 100644
--- a/src/test/ui/coherence/coherence-overlap-all-t-and-tuple.stderr
+++ b/src/test/ui/coherence/coherence-overlap-all-t-and-tuple.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `From<(_,)>` for type `(_,)`:
-  --> $DIR/coherence-overlap-all-t-and-tuple.rs:16:1
+  --> $DIR/coherence-overlap-all-t-and-tuple.rs:20:1
    |
 LL | impl <T> From<T> for T {
    | ---------------------- first implementation here
 ...
-LL | impl <T11, U11> From<(U11,)> for (T11,) { //~ ERROR E0119
+LL | impl <T11, U11> From<(U11,)> for (T11,) {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(_,)`
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-overlap-all-t-and-tuple.re.stderr b/src/test/ui/coherence/coherence-overlap-all-t-and-tuple.re.stderr
new file mode 100644
index 00000000000..c7f85b0b590
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-all-t-and-tuple.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `From<(_,)>` for type `(_,)`:
+  --> $DIR/coherence-overlap-all-t-and-tuple.rs:20:1
+   |
+LL | impl <T> From<T> for T {
+   | ---------------------- first implementation here
+...
+LL | impl <T11, U11> From<(U11,)> for (T11,) {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(_,)`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-overlap-downstream-inherent.stderr b/src/test/ui/coherence/coherence-overlap-downstream-inherent.old.stderr
index 9a060edb5b1..dcfc017f1b0 100644
--- a/src/test/ui/coherence/coherence-overlap-downstream-inherent.stderr
+++ b/src/test/ui/coherence/coherence-overlap-downstream-inherent.old.stderr
@@ -1,18 +1,18 @@
 error[E0592]: duplicate definitions with name `dummy`
-  --> $DIR/coherence-overlap-downstream-inherent.rs:7:26
+  --> $DIR/coherence-overlap-downstream-inherent.rs:11:26
    |
 LL | impl<T:Sugar> Sweet<T> { fn dummy(&self) { } }
    |                          ^^^^^^^^^^^^^^^^^^^ duplicate definitions for `dummy`
-LL | //~^ ERROR E0592
+...
 LL | impl<T:Fruit> Sweet<T> { fn dummy(&self) { } }
    |                          ------------------- other definition for `dummy`
 
 error[E0592]: duplicate definitions with name `f`
-  --> $DIR/coherence-overlap-downstream-inherent.rs:13:38
+  --> $DIR/coherence-overlap-downstream-inherent.rs:18:38
    |
 LL | impl<X, T> A<T, X> where T: Bar<X> { fn f(&self) {} }
    |                                      ^^^^^^^^^^^^^^ duplicate definitions for `f`
-LL | //~^ ERROR E0592
+...
 LL | impl<X> A<i32, X> { fn f(&self) {} }
    |                     -------------- other definition for `f`
    |
diff --git a/src/test/ui/coherence/coherence-overlap-downstream-inherent.re.stderr b/src/test/ui/coherence/coherence-overlap-downstream-inherent.re.stderr
new file mode 100644
index 00000000000..dcfc017f1b0
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-downstream-inherent.re.stderr
@@ -0,0 +1,23 @@
+error[E0592]: duplicate definitions with name `dummy`
+  --> $DIR/coherence-overlap-downstream-inherent.rs:11:26
+   |
+LL | impl<T:Sugar> Sweet<T> { fn dummy(&self) { } }
+   |                          ^^^^^^^^^^^^^^^^^^^ duplicate definitions for `dummy`
+...
+LL | impl<T:Fruit> Sweet<T> { fn dummy(&self) { } }
+   |                          ------------------- other definition for `dummy`
+
+error[E0592]: duplicate definitions with name `f`
+  --> $DIR/coherence-overlap-downstream-inherent.rs:18:38
+   |
+LL | impl<X, T> A<T, X> where T: Bar<X> { fn f(&self) {} }
+   |                                      ^^^^^^^^^^^^^^ duplicate definitions for `f`
+...
+LL | impl<X> A<i32, X> { fn f(&self) {} }
+   |                     -------------- other definition for `f`
+   |
+   = note: downstream crates may implement trait `Bar<_>` for type `i32`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0592`.
diff --git a/src/test/ui/coherence/coherence-overlap-downstream.stderr b/src/test/ui/coherence/coherence-overlap-downstream.old.stderr
index 6fb398562d6..b4847c03d41 100644
--- a/src/test/ui/coherence/coherence-overlap-downstream.stderr
+++ b/src/test/ui/coherence/coherence-overlap-downstream.old.stderr
@@ -1,5 +1,5 @@
 error[E0119]: conflicting implementations of trait `Sweet`:
-  --> $DIR/coherence-overlap-downstream.rs:8:1
+  --> $DIR/coherence-overlap-downstream.rs:12:1
    |
 LL | impl<T:Sugar> Sweet for T { }
    | ------------------------- first implementation here
@@ -7,7 +7,7 @@ LL | impl<T:Fruit> Sweet for T { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
 
 error[E0119]: conflicting implementations of trait `Foo<_>` for type `i32`:
-  --> $DIR/coherence-overlap-downstream.rs:14:1
+  --> $DIR/coherence-overlap-downstream.rs:19:1
    |
 LL | impl<X, T> Foo<X> for T where T: Bar<X> {}
    | --------------------------------------- first implementation here
diff --git a/src/test/ui/coherence/coherence-overlap-downstream.re.stderr b/src/test/ui/coherence/coherence-overlap-downstream.re.stderr
new file mode 100644
index 00000000000..b4847c03d41
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-downstream.re.stderr
@@ -0,0 +1,21 @@
+error[E0119]: conflicting implementations of trait `Sweet`:
+  --> $DIR/coherence-overlap-downstream.rs:12:1
+   |
+LL | impl<T:Sugar> Sweet for T { }
+   | ------------------------- first implementation here
+LL | impl<T:Fruit> Sweet for T { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
+
+error[E0119]: conflicting implementations of trait `Foo<_>` for type `i32`:
+  --> $DIR/coherence-overlap-downstream.rs:19:1
+   |
+LL | impl<X, T> Foo<X> for T where T: Bar<X> {}
+   | --------------------------------------- first implementation here
+LL | impl<X> Foo<X> for i32 {}
+   | ^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `i32`
+   |
+   = note: downstream crates may implement trait `Bar<_>` for type `i32`
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-overlap-issue-23516-inherent.stderr b/src/test/ui/coherence/coherence-overlap-issue-23516-inherent.old.stderr
index 6e5d116bce2..6fd93077540 100644
--- a/src/test/ui/coherence/coherence-overlap-issue-23516-inherent.stderr
+++ b/src/test/ui/coherence/coherence-overlap-issue-23516-inherent.old.stderr
@@ -1,9 +1,9 @@
 error[E0592]: duplicate definitions with name `dummy`
-  --> $DIR/coherence-overlap-issue-23516-inherent.rs:9:25
+  --> $DIR/coherence-overlap-issue-23516-inherent.rs:13:25
    |
 LL | impl<T:Sugar> Cake<T> { fn dummy(&self) { } }
    |                         ^^^^^^^^^^^^^^^^^^^ duplicate definitions for `dummy`
-LL | //~^ ERROR E0592
+...
 LL | impl<U:Sugar> Cake<Box<U>> { fn dummy(&self) { } }
    |                              ------------------- other definition for `dummy`
    |
diff --git a/src/test/ui/coherence/coherence-overlap-issue-23516-inherent.re.stderr b/src/test/ui/coherence/coherence-overlap-issue-23516-inherent.re.stderr
new file mode 100644
index 00000000000..6fd93077540
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-issue-23516-inherent.re.stderr
@@ -0,0 +1,14 @@
+error[E0592]: duplicate definitions with name `dummy`
+  --> $DIR/coherence-overlap-issue-23516-inherent.rs:13:25
+   |
+LL | impl<T:Sugar> Cake<T> { fn dummy(&self) { } }
+   |                         ^^^^^^^^^^^^^^^^^^^ duplicate definitions for `dummy`
+...
+LL | impl<U:Sugar> Cake<Box<U>> { fn dummy(&self) { } }
+   |                              ------------------- other definition for `dummy`
+   |
+   = note: downstream crates may implement trait `Sugar` for type `std::boxed::Box<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0592`.
diff --git a/src/test/ui/coherence/coherence-overlap-issue-23516.stderr b/src/test/ui/coherence/coherence-overlap-issue-23516.old.stderr
index fe4c5cf3490..d17d67adf0e 100644
--- a/src/test/ui/coherence/coherence-overlap-issue-23516.stderr
+++ b/src/test/ui/coherence/coherence-overlap-issue-23516.old.stderr
@@ -1,5 +1,5 @@
 error[E0119]: conflicting implementations of trait `Sweet` for type `std::boxed::Box<_>`:
-  --> $DIR/coherence-overlap-issue-23516.rs:8:1
+  --> $DIR/coherence-overlap-issue-23516.rs:12:1
    |
 LL | impl<T:Sugar> Sweet for T { }
    | ------------------------- first implementation here
diff --git a/src/test/ui/coherence/coherence-overlap-issue-23516.re.stderr b/src/test/ui/coherence/coherence-overlap-issue-23516.re.stderr
new file mode 100644
index 00000000000..d17d67adf0e
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-issue-23516.re.stderr
@@ -0,0 +1,13 @@
+error[E0119]: conflicting implementations of trait `Sweet` for type `std::boxed::Box<_>`:
+  --> $DIR/coherence-overlap-issue-23516.rs:12:1
+   |
+LL | impl<T:Sugar> Sweet for T { }
+   | ------------------------- first implementation here
+LL | impl<U:Sugar> Sweet for Box<U> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `std::boxed::Box<_>`
+   |
+   = note: downstream crates may implement trait `Sugar` for type `std::boxed::Box<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-overlap-messages.stderr b/src/test/ui/coherence/coherence-overlap-messages.old.stderr
index f78482fc597..429e67573b5 100644
--- a/src/test/ui/coherence/coherence-overlap-messages.stderr
+++ b/src/test/ui/coherence/coherence-overlap-messages.old.stderr
@@ -1,42 +1,42 @@
 error[E0119]: conflicting implementations of trait `Foo`:
-  --> $DIR/coherence-overlap-messages.rs:4:1
+  --> $DIR/coherence-overlap-messages.rs:8:1
    |
 LL | impl<T> Foo for T {}
    | ----------------- first implementation here
-LL | impl<U> Foo for U {} //~ ERROR conflicting implementations of trait `Foo`:
+LL | impl<U> Foo for U {}
    | ^^^^^^^^^^^^^^^^^ conflicting implementation
 
 error[E0119]: conflicting implementations of trait `Bar` for type `(u8, u8)`:
-  --> $DIR/coherence-overlap-messages.rs:9:1
+  --> $DIR/coherence-overlap-messages.rs:16:1
    |
 LL | impl<T> Bar for (T, u8) {}
    | ----------------------- first implementation here
-LL | impl<T> Bar for (u8, T) {} //~ ERROR conflicting implementations of trait `Bar` for type `(u8, u8)`:
+LL | impl<T> Bar for (u8, T) {}
    | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(u8, u8)`
 
 error[E0119]: conflicting implementations of trait `Baz<u8>` for type `u8`:
-  --> $DIR/coherence-overlap-messages.rs:14:1
+  --> $DIR/coherence-overlap-messages.rs:23:1
    |
 LL | impl<T> Baz<u8> for T {}
    | --------------------- first implementation here
-LL | impl<T> Baz<T> for u8 {} //~ ERROR conflicting implementations of trait `Baz<u8>` for type `u8`:
+LL | impl<T> Baz<T> for u8 {}
    | ^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `u8`
 
 error[E0119]: conflicting implementations of trait `Quux<_, _>`:
-  --> $DIR/coherence-overlap-messages.rs:19:1
+  --> $DIR/coherence-overlap-messages.rs:30:1
    |
 LL | impl<T, U, V> Quux<U, V> for T {}
    | ------------------------------ first implementation here
-LL | impl<T, U> Quux<U, U> for T {} //~ ERROR conflicting implementations of trait `Quux<_, _>`:
+LL | impl<T, U> Quux<U, U> for T {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
 
 error[E0119]: conflicting implementations of trait `Quux<_, _>`:
-  --> $DIR/coherence-overlap-messages.rs:20:1
+  --> $DIR/coherence-overlap-messages.rs:33:1
    |
 LL | impl<T, U, V> Quux<U, V> for T {}
    | ------------------------------ first implementation here
-LL | impl<T, U> Quux<U, U> for T {} //~ ERROR conflicting implementations of trait `Quux<_, _>`:
-LL | impl<T, V> Quux<T, V> for T {} //~ ERROR conflicting implementations of trait `Quux<_, _>`:
+...
+LL | impl<T, V> Quux<T, V> for T {}
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
 
 error: aborting due to 5 previous errors
diff --git a/src/test/ui/coherence/coherence-overlap-messages.re.stderr b/src/test/ui/coherence/coherence-overlap-messages.re.stderr
new file mode 100644
index 00000000000..429e67573b5
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-messages.re.stderr
@@ -0,0 +1,44 @@
+error[E0119]: conflicting implementations of trait `Foo`:
+  --> $DIR/coherence-overlap-messages.rs:8:1
+   |
+LL | impl<T> Foo for T {}
+   | ----------------- first implementation here
+LL | impl<U> Foo for U {}
+   | ^^^^^^^^^^^^^^^^^ conflicting implementation
+
+error[E0119]: conflicting implementations of trait `Bar` for type `(u8, u8)`:
+  --> $DIR/coherence-overlap-messages.rs:16:1
+   |
+LL | impl<T> Bar for (T, u8) {}
+   | ----------------------- first implementation here
+LL | impl<T> Bar for (u8, T) {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(u8, u8)`
+
+error[E0119]: conflicting implementations of trait `Baz<u8>` for type `u8`:
+  --> $DIR/coherence-overlap-messages.rs:23:1
+   |
+LL | impl<T> Baz<u8> for T {}
+   | --------------------- first implementation here
+LL | impl<T> Baz<T> for u8 {}
+   | ^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `u8`
+
+error[E0119]: conflicting implementations of trait `Quux<_, _>`:
+  --> $DIR/coherence-overlap-messages.rs:30:1
+   |
+LL | impl<T, U, V> Quux<U, V> for T {}
+   | ------------------------------ first implementation here
+LL | impl<T, U> Quux<U, U> for T {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
+
+error[E0119]: conflicting implementations of trait `Quux<_, _>`:
+  --> $DIR/coherence-overlap-messages.rs:33:1
+   |
+LL | impl<T, U, V> Quux<U, V> for T {}
+   | ------------------------------ first implementation here
+...
+LL | impl<T, V> Quux<T, V> for T {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
+
+error: aborting due to 5 previous errors
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-overlap-upstream-inherent.stderr b/src/test/ui/coherence/coherence-overlap-upstream-inherent.old.stderr
index 195b7dba74d..928b65e0039 100644
--- a/src/test/ui/coherence/coherence-overlap-upstream-inherent.stderr
+++ b/src/test/ui/coherence/coherence-overlap-upstream-inherent.old.stderr
@@ -1,9 +1,9 @@
 error[E0592]: duplicate definitions with name `dummy`
-  --> $DIR/coherence-overlap-upstream-inherent.rs:11:32
+  --> $DIR/coherence-overlap-upstream-inherent.rs:15:32
    |
 LL | impl<T> A<T> where T: Remote { fn dummy(&self) { } }
    |                                ^^^^^^^^^^^^^^^^^^^ duplicate definitions for `dummy`
-LL | //~^ ERROR E0592
+...
 LL | impl A<i16> { fn dummy(&self) { } }
    |               ------------------- other definition for `dummy`
    |
diff --git a/src/test/ui/coherence/coherence-overlap-upstream-inherent.re.stderr b/src/test/ui/coherence/coherence-overlap-upstream-inherent.re.stderr
new file mode 100644
index 00000000000..928b65e0039
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-upstream-inherent.re.stderr
@@ -0,0 +1,14 @@
+error[E0592]: duplicate definitions with name `dummy`
+  --> $DIR/coherence-overlap-upstream-inherent.rs:15:32
+   |
+LL | impl<T> A<T> where T: Remote { fn dummy(&self) { } }
+   |                                ^^^^^^^^^^^^^^^^^^^ duplicate definitions for `dummy`
+...
+LL | impl A<i16> { fn dummy(&self) { } }
+   |               ------------------- other definition for `dummy`
+   |
+   = note: upstream crates may add new impl of trait `coherence_lib::Remote` for type `i16` in future versions
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0592`.
diff --git a/src/test/ui/coherence/coherence-overlap-upstream.stderr b/src/test/ui/coherence/coherence-overlap-upstream.old.stderr
index 4095949df13..6c3484c2d8c 100644
--- a/src/test/ui/coherence/coherence-overlap-upstream.stderr
+++ b/src/test/ui/coherence/coherence-overlap-upstream.old.stderr
@@ -1,5 +1,5 @@
 error[E0119]: conflicting implementations of trait `Foo` for type `i16`:
-  --> $DIR/coherence-overlap-upstream.rs:12:1
+  --> $DIR/coherence-overlap-upstream.rs:16:1
    |
 LL | impl<T> Foo for T where T: Remote {}
    | --------------------------------- first implementation here
diff --git a/src/test/ui/coherence/coherence-overlap-upstream.re.stderr b/src/test/ui/coherence/coherence-overlap-upstream.re.stderr
new file mode 100644
index 00000000000..6c3484c2d8c
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlap-upstream.re.stderr
@@ -0,0 +1,13 @@
+error[E0119]: conflicting implementations of trait `Foo` for type `i16`:
+  --> $DIR/coherence-overlap-upstream.rs:16:1
+   |
+LL | impl<T> Foo for T where T: Remote {}
+   | --------------------------------- first implementation here
+LL | impl Foo for i16 {}
+   | ^^^^^^^^^^^^^^^^ conflicting implementation for `i16`
+   |
+   = note: upstream crates may add new impl of trait `coherence_lib::Remote` for type `i16` in future versions
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-overlapping-pairs.stderr b/src/test/ui/coherence/coherence-overlapping-pairs.old.stderr
index 19f283e89d1..b275af9668d 100644
--- a/src/test/ui/coherence/coherence-overlapping-pairs.stderr
+++ b/src/test/ui/coherence/coherence-overlapping-pairs.old.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-overlapping-pairs.rs:8:1
+  --> $DIR/coherence-overlapping-pairs.rs:11:1
    |
 LL | impl<T> Remote for lib::Pair<T,Foo> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-overlapping-pairs.re.stderr b/src/test/ui/coherence/coherence-overlapping-pairs.re.stderr
new file mode 100644
index 00000000000..0f2ec6f4ce0
--- /dev/null
+++ b/src/test/ui/coherence/coherence-overlapping-pairs.re.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-overlapping-pairs.rs:11:1
+   |
+LL | impl<T> Remote for lib::Pair<T,Foo> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-pair-covered-uncovered-1.stderr b/src/test/ui/coherence/coherence-pair-covered-uncovered-1.old.stderr
index 072a98cf358..8b25bee6e2f 100644
--- a/src/test/ui/coherence/coherence-pair-covered-uncovered-1.stderr
+++ b/src/test/ui/coherence/coherence-pair-covered-uncovered-1.old.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-pair-covered-uncovered-1.rs:11:1
+  --> $DIR/coherence-pair-covered-uncovered-1.rs:15:1
    |
 LL | impl<T, U> Remote1<Pair<T, Local<U>>> for i32 { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-pair-covered-uncovered-1.re.stderr b/src/test/ui/coherence/coherence-pair-covered-uncovered-1.re.stderr
new file mode 100644
index 00000000000..0c654ca4183
--- /dev/null
+++ b/src/test/ui/coherence/coherence-pair-covered-uncovered-1.re.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-pair-covered-uncovered-1.rs:15:1
+   |
+LL | impl<T, U> Remote1<Pair<T, Local<U>>> for i32 { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-pair-covered-uncovered.stderr b/src/test/ui/coherence/coherence-pair-covered-uncovered.old.stderr
index 3ba53829e34..39558d8dcc0 100644
--- a/src/test/ui/coherence/coherence-pair-covered-uncovered.stderr
+++ b/src/test/ui/coherence/coherence-pair-covered-uncovered.old.stderr
@@ -1,5 +1,5 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-pair-covered-uncovered.rs:8:1
+  --> $DIR/coherence-pair-covered-uncovered.rs:11:1
    |
 LL | impl<T,U> Remote for Pair<T,Local<U>> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
diff --git a/src/test/ui/coherence/coherence-pair-covered-uncovered.re.stderr b/src/test/ui/coherence/coherence-pair-covered-uncovered.re.stderr
new file mode 100644
index 00000000000..9bddc153902
--- /dev/null
+++ b/src/test/ui/coherence/coherence-pair-covered-uncovered.re.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-pair-covered-uncovered.rs:11:1
+   |
+LL | impl<T,U> Remote for Pair<T,Local<U>> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-projection-conflict-orphan.stderr b/src/test/ui/coherence/coherence-projection-conflict-orphan.old.stderr
index 6929d9f3312..cde9360ddf2 100644
--- a/src/test/ui/coherence/coherence-projection-conflict-orphan.stderr
+++ b/src/test/ui/coherence/coherence-projection-conflict-orphan.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `Foo<i32>` for type `i32`:
-  --> $DIR/coherence-projection-conflict-orphan.rs:16:1
+  --> $DIR/coherence-projection-conflict-orphan.rs:19:1
    |
 LL | impl Foo<i32> for i32 { }
    | --------------------- first implementation here
 LL | 
-LL | impl<A:Iterator> Foo<A::Item> for A { }  //~ ERROR E0119
+LL | impl<A:Iterator> Foo<A::Item> for A { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `i32`
    |
    = note: upstream crates may add new impl of trait `std::iter::Iterator` for type `i32` in future versions
diff --git a/src/test/ui/coherence/coherence-projection-conflict-orphan.re.stderr b/src/test/ui/coherence/coherence-projection-conflict-orphan.re.stderr
new file mode 100644
index 00000000000..cde9360ddf2
--- /dev/null
+++ b/src/test/ui/coherence/coherence-projection-conflict-orphan.re.stderr
@@ -0,0 +1,14 @@
+error[E0119]: conflicting implementations of trait `Foo<i32>` for type `i32`:
+  --> $DIR/coherence-projection-conflict-orphan.rs:19:1
+   |
+LL | impl Foo<i32> for i32 { }
+   | --------------------- first implementation here
+LL | 
+LL | impl<A:Iterator> Foo<A::Item> for A { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `i32`
+   |
+   = note: upstream crates may add new impl of trait `std::iter::Iterator` for type `i32` in future versions
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-projection-conflict-ty-param.stderr b/src/test/ui/coherence/coherence-projection-conflict-ty-param.old.stderr
index 92717e3f67a..b53a4c973ed 100644
--- a/src/test/ui/coherence/coherence-projection-conflict-ty-param.stderr
+++ b/src/test/ui/coherence/coherence-projection-conflict-ty-param.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `Foo<_>` for type `std::option::Option<_>`:
-  --> $DIR/coherence-projection-conflict-ty-param.rs:10:1
+  --> $DIR/coherence-projection-conflict-ty-param.rs:14:1
    |
 LL | impl <P, T: Foo<P>> Foo<P> for Option<T> {}
    | ---------------------------------------- first implementation here
 LL | 
-LL | impl<T, U> Foo<T> for Option<U> { } //~ ERROR E0119
+LL | impl<T, U> Foo<T> for Option<U> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `std::option::Option<_>`
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-projection-conflict-ty-param.re.stderr b/src/test/ui/coherence/coherence-projection-conflict-ty-param.re.stderr
new file mode 100644
index 00000000000..b53a4c973ed
--- /dev/null
+++ b/src/test/ui/coherence/coherence-projection-conflict-ty-param.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `Foo<_>` for type `std::option::Option<_>`:
+  --> $DIR/coherence-projection-conflict-ty-param.rs:14:1
+   |
+LL | impl <P, T: Foo<P>> Foo<P> for Option<T> {}
+   | ---------------------------------------- first implementation here
+LL | 
+LL | impl<T, U> Foo<T> for Option<U> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `std::option::Option<_>`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-projection-conflict.stderr b/src/test/ui/coherence/coherence-projection-conflict.old.stderr
index 1b0b4e1708f..c2e5fc86175 100644
--- a/src/test/ui/coherence/coherence-projection-conflict.stderr
+++ b/src/test/ui/coherence/coherence-projection-conflict.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `Foo<i32>` for type `i32`:
-  --> $DIR/coherence-projection-conflict.rs:11:1
+  --> $DIR/coherence-projection-conflict.rs:15:1
    |
 LL | impl Foo<i32> for i32 { }
    | --------------------- first implementation here
 LL | 
-LL | impl<A:Bar> Foo<A::Output> for A { } //~ ERROR E0119
+LL | impl<A:Bar> Foo<A::Output> for A { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `i32`
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-projection-conflict.re.stderr b/src/test/ui/coherence/coherence-projection-conflict.re.stderr
new file mode 100644
index 00000000000..c2e5fc86175
--- /dev/null
+++ b/src/test/ui/coherence/coherence-projection-conflict.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `Foo<i32>` for type `i32`:
+  --> $DIR/coherence-projection-conflict.rs:15:1
+   |
+LL | impl Foo<i32> for i32 { }
+   | --------------------- first implementation here
+LL | 
+LL | impl<A:Bar> Foo<A::Output> for A { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `i32`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-tuple-conflict.stderr b/src/test/ui/coherence/coherence-tuple-conflict.old.stderr
index 4baf71ebf09..e832bdebbdd 100644
--- a/src/test/ui/coherence/coherence-tuple-conflict.stderr
+++ b/src/test/ui/coherence/coherence-tuple-conflict.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait` for type `(_, _)`:
-  --> $DIR/coherence-tuple-conflict.rs:15:1
+  --> $DIR/coherence-tuple-conflict.rs:19:1
    |
 LL | impl<T> MyTrait for (T,T) {
    | ------------------------- first implementation here
 ...
-LL | impl<A,B> MyTrait for (A,B) { //~ ERROR E0119
+LL | impl<A,B> MyTrait for (A,B) {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(_, _)`
 
 error: aborting due to previous error
diff --git a/src/test/ui/coherence/coherence-tuple-conflict.re.stderr b/src/test/ui/coherence/coherence-tuple-conflict.re.stderr
new file mode 100644
index 00000000000..e832bdebbdd
--- /dev/null
+++ b/src/test/ui/coherence/coherence-tuple-conflict.re.stderr
@@ -0,0 +1,12 @@
+error[E0119]: conflicting implementations of trait `MyTrait` for type `(_, _)`:
+  --> $DIR/coherence-tuple-conflict.rs:19:1
+   |
+LL | impl<T> MyTrait for (T,T) {
+   | ------------------------- first implementation here
+...
+LL | impl<A,B> MyTrait for (A,B) {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(_, _)`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence-vec-local-2.stderr b/src/test/ui/coherence/coherence-vec-local-2.old.stderr
index 3cdcd957709..1c1118a58c6 100644
--- a/src/test/ui/coherence/coherence-vec-local-2.stderr
+++ b/src/test/ui/coherence/coherence-vec-local-2.old.stderr
@@ -1,7 +1,7 @@
 error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
-  --> $DIR/coherence-vec-local-2.rs:11:1
+  --> $DIR/coherence-vec-local-2.rs:14:1
    |
-LL | impl<T> Remote for Vec<Local<T>> { } //~ ERROR E0210
+LL | impl<T> Remote for Vec<Local<T>> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
    |
    = note: only traits defined in the current crate can be implemented for a type parameter
diff --git a/src/test/ui/coherence/coherence-vec-local-2.re.stderr b/src/test/ui/coherence/coherence-vec-local-2.re.stderr
new file mode 100644
index 00000000000..37859f7cfa2
--- /dev/null
+++ b/src/test/ui/coherence/coherence-vec-local-2.re.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-vec-local-2.rs:14:1
+   |
+LL | impl<T> Remote for Vec<Local<T>> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence-vec-local.stderr b/src/test/ui/coherence/coherence-vec-local.old.stderr
index 319d2ebabd7..304aaaf3687 100644
--- a/src/test/ui/coherence/coherence-vec-local.stderr
+++ b/src/test/ui/coherence/coherence-vec-local.old.stderr
@@ -1,7 +1,7 @@
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence-vec-local.rs:11:1
+  --> $DIR/coherence-vec-local.rs:14:1
    |
-LL | impl Remote for Vec<Local> { } //~ ERROR E0117
+LL | impl Remote for Vec<Local> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
    |
    = note: the impl does not reference any types defined in this crate
diff --git a/src/test/ui/coherence/coherence-vec-local.re.stderr b/src/test/ui/coherence/coherence-vec-local.re.stderr
new file mode 100644
index 00000000000..304aaaf3687
--- /dev/null
+++ b/src/test/ui/coherence/coherence-vec-local.re.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence-vec-local.rs:14:1
+   |
+LL | impl Remote for Vec<Local> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.stderr b/src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.old.stderr
index 0aa7320bc33..12c7a1f977c 100644
--- a/src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.stderr
+++ b/src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait` for type `lib::MyFundamentalStruct<(MyType,)>`:
-  --> $DIR/coherence_copy_like_err_fundamental_struct_tuple.rs:17:1
+  --> $DIR/coherence_copy_like_err_fundamental_struct_tuple.rs:19:1
    |
 LL | impl<T: lib::MyCopy> MyTrait for T { }
    | ---------------------------------- first implementation here
 ...
-LL | impl MyTrait for lib::MyFundamentalStruct<(MyType,)> { } //~ ERROR E0119
+LL | impl MyTrait for lib::MyFundamentalStruct<(MyType,)> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `lib::MyFundamentalStruct<(MyType,)>`
    |
    = note: upstream crates may add new impl of trait `lib::MyCopy` for type `lib::MyFundamentalStruct<(MyType,)>` in future versions
diff --git a/src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.re.stderr b/src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.re.stderr
new file mode 100644
index 00000000000..12c7a1f977c
--- /dev/null
+++ b/src/test/ui/coherence/coherence_copy_like_err_fundamental_struct_tuple.re.stderr
@@ -0,0 +1,14 @@
+error[E0119]: conflicting implementations of trait `MyTrait` for type `lib::MyFundamentalStruct<(MyType,)>`:
+  --> $DIR/coherence_copy_like_err_fundamental_struct_tuple.rs:19:1
+   |
+LL | impl<T: lib::MyCopy> MyTrait for T { }
+   | ---------------------------------- first implementation here
+...
+LL | impl MyTrait for lib::MyFundamentalStruct<(MyType,)> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `lib::MyFundamentalStruct<(MyType,)>`
+   |
+   = note: upstream crates may add new impl of trait `lib::MyCopy` for type `lib::MyFundamentalStruct<(MyType,)>` in future versions
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence_copy_like_err_struct.stderr b/src/test/ui/coherence/coherence_copy_like_err_struct.old.stderr
index 03b4b7d8072..1b6c62e9bf3 100644
--- a/src/test/ui/coherence/coherence_copy_like_err_struct.stderr
+++ b/src/test/ui/coherence/coherence_copy_like_err_struct.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait` for type `lib::MyStruct<MyType>`:
-  --> $DIR/coherence_copy_like_err_struct.rs:19:1
+  --> $DIR/coherence_copy_like_err_struct.rs:22:1
    |
 LL | impl<T: lib::MyCopy> MyTrait for T { }
    | ---------------------------------- first implementation here
 ...
-LL | impl MyTrait for lib::MyStruct<MyType> { } //~ ERROR E0119
+LL | impl MyTrait for lib::MyStruct<MyType> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `lib::MyStruct<MyType>`
    |
    = note: upstream crates may add new impl of trait `lib::MyCopy` for type `lib::MyStruct<MyType>` in future versions
diff --git a/src/test/ui/coherence/coherence_copy_like_err_struct.re.stderr b/src/test/ui/coherence/coherence_copy_like_err_struct.re.stderr
new file mode 100644
index 00000000000..1b6c62e9bf3
--- /dev/null
+++ b/src/test/ui/coherence/coherence_copy_like_err_struct.re.stderr
@@ -0,0 +1,14 @@
+error[E0119]: conflicting implementations of trait `MyTrait` for type `lib::MyStruct<MyType>`:
+  --> $DIR/coherence_copy_like_err_struct.rs:22:1
+   |
+LL | impl<T: lib::MyCopy> MyTrait for T { }
+   | ---------------------------------- first implementation here
+...
+LL | impl MyTrait for lib::MyStruct<MyType> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `lib::MyStruct<MyType>`
+   |
+   = note: upstream crates may add new impl of trait `lib::MyCopy` for type `lib::MyStruct<MyType>` in future versions
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence_copy_like_err_tuple.stderr b/src/test/ui/coherence/coherence_copy_like_err_tuple.old.stderr
index 71c1a9173af..11bd788c761 100644
--- a/src/test/ui/coherence/coherence_copy_like_err_tuple.stderr
+++ b/src/test/ui/coherence/coherence_copy_like_err_tuple.old.stderr
@@ -1,10 +1,10 @@
 error[E0119]: conflicting implementations of trait `MyTrait` for type `(MyType,)`:
-  --> $DIR/coherence_copy_like_err_tuple.rs:18:1
+  --> $DIR/coherence_copy_like_err_tuple.rs:21:1
    |
 LL | impl<T: lib::MyCopy> MyTrait for T { }
    | ---------------------------------- first implementation here
 ...
-LL | impl MyTrait for (MyType,) { } //~ ERROR E0119
+LL | impl MyTrait for (MyType,) { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(MyType,)`
    |
    = note: upstream crates may add new impl of trait `lib::MyCopy` for type `(MyType,)` in future versions
diff --git a/src/test/ui/coherence/coherence_copy_like_err_tuple.re.stderr b/src/test/ui/coherence/coherence_copy_like_err_tuple.re.stderr
new file mode 100644
index 00000000000..11bd788c761
--- /dev/null
+++ b/src/test/ui/coherence/coherence_copy_like_err_tuple.re.stderr
@@ -0,0 +1,14 @@
+error[E0119]: conflicting implementations of trait `MyTrait` for type `(MyType,)`:
+  --> $DIR/coherence_copy_like_err_tuple.rs:21:1
+   |
+LL | impl<T: lib::MyCopy> MyTrait for T { }
+   | ---------------------------------- first implementation here
+...
+LL | impl MyTrait for (MyType,) { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(MyType,)`
+   |
+   = note: upstream crates may add new impl of trait `lib::MyCopy` for type `(MyType,)` in future versions
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0119`.
diff --git a/src/test/ui/coherence/coherence_inherent.stderr b/src/test/ui/coherence/coherence_inherent.old.stderr
index 3974cfe94ad..fa564459b21 100644
--- a/src/test/ui/coherence/coherence_inherent.stderr
+++ b/src/test/ui/coherence/coherence_inherent.old.stderr
@@ -1,7 +1,7 @@
 error[E0599]: no method named `the_fn` found for type `&Lib::TheStruct` in the current scope
-  --> $DIR/coherence_inherent.rs:31:11
+  --> $DIR/coherence_inherent.rs:35:11
    |
-LL |         s.the_fn(); //~ ERROR no method named `the_fn` found
+LL |         s.the_fn();
    |           ^^^^^^
    |
    = help: items from traits can only be used if the trait is in scope
diff --git a/src/test/ui/coherence/coherence_inherent.re.stderr b/src/test/ui/coherence/coherence_inherent.re.stderr
new file mode 100644
index 00000000000..fa564459b21
--- /dev/null
+++ b/src/test/ui/coherence/coherence_inherent.re.stderr
@@ -0,0 +1,13 @@
+error[E0599]: no method named `the_fn` found for type `&Lib::TheStruct` in the current scope
+  --> $DIR/coherence_inherent.rs:35:11
+   |
+LL |         s.the_fn();
+   |           ^^^^^^
+   |
+   = help: items from traits can only be used if the trait is in scope
+   = note: the following trait is implemented but not in scope, perhaps add a `use` for it:
+           `use Lib::TheTrait;`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/src/test/ui/coherence/coherence_inherent_cc.stderr b/src/test/ui/coherence/coherence_inherent_cc.old.stderr
index fcb3db711a0..4d93e699031 100644
--- a/src/test/ui/coherence/coherence_inherent_cc.stderr
+++ b/src/test/ui/coherence/coherence_inherent_cc.old.stderr
@@ -1,7 +1,7 @@
 error[E0599]: no method named `the_fn` found for type `&coherence_inherent_cc_lib::TheStruct` in the current scope
-  --> $DIR/coherence_inherent_cc.rs:23:11
+  --> $DIR/coherence_inherent_cc.rs:26:11
    |
-LL |         s.the_fn(); //~ ERROR no method named `the_fn` found
+LL |         s.the_fn();
    |           ^^^^^^
    |
    = help: items from traits can only be used if the trait is in scope
diff --git a/src/test/ui/coherence/coherence_inherent_cc.re.stderr b/src/test/ui/coherence/coherence_inherent_cc.re.stderr
new file mode 100644
index 00000000000..4d93e699031
--- /dev/null
+++ b/src/test/ui/coherence/coherence_inherent_cc.re.stderr
@@ -0,0 +1,13 @@
+error[E0599]: no method named `the_fn` found for type `&coherence_inherent_cc_lib::TheStruct` in the current scope
+  --> $DIR/coherence_inherent_cc.rs:26:11
+   |
+LL |         s.the_fn();
+   |           ^^^^^^
+   |
+   = help: items from traits can only be used if the trait is in scope
+   = note: the following trait is implemented but not in scope, perhaps add a `use` for it:
+           `use coherence_inherent_cc_lib::TheTrait;`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.
diff --git a/src/test/ui/coherence/coherence_local_err_struct.stderr b/src/test/ui/coherence/coherence_local_err_struct.old.stderr
index 7ff88c55b06..61c94c1c7ca 100644
--- a/src/test/ui/coherence/coherence_local_err_struct.stderr
+++ b/src/test/ui/coherence/coherence_local_err_struct.old.stderr
@@ -1,7 +1,7 @@
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence_local_err_struct.rs:16:1
+  --> $DIR/coherence_local_err_struct.rs:17:1
    |
-LL | impl lib::MyCopy for lib::MyStruct<MyType> { } //~ ERROR E0117
+LL | impl lib::MyCopy for lib::MyStruct<MyType> { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
    |
    = note: the impl does not reference any types defined in this crate
diff --git a/src/test/ui/coherence/coherence_local_err_struct.re.stderr b/src/test/ui/coherence/coherence_local_err_struct.re.stderr
new file mode 100644
index 00000000000..61c94c1c7ca
--- /dev/null
+++ b/src/test/ui/coherence/coherence_local_err_struct.re.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence_local_err_struct.rs:17:1
+   |
+LL | impl lib::MyCopy for lib::MyStruct<MyType> { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/coherence_local_err_tuple.stderr b/src/test/ui/coherence/coherence_local_err_tuple.old.stderr
index eab59579cb6..934e2fcb890 100644
--- a/src/test/ui/coherence/coherence_local_err_tuple.stderr
+++ b/src/test/ui/coherence/coherence_local_err_tuple.old.stderr
@@ -1,7 +1,7 @@
 error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
-  --> $DIR/coherence_local_err_tuple.rs:16:1
+  --> $DIR/coherence_local_err_tuple.rs:17:1
    |
-LL | impl lib::MyCopy for (MyType,) { } //~ ERROR E0117
+LL | impl lib::MyCopy for (MyType,) { }
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
    |
    = note: the impl does not reference any types defined in this crate
diff --git a/src/test/ui/coherence/coherence_local_err_tuple.re.stderr b/src/test/ui/coherence/coherence_local_err_tuple.re.stderr
new file mode 100644
index 00000000000..934e2fcb890
--- /dev/null
+++ b/src/test/ui/coherence/coherence_local_err_tuple.re.stderr
@@ -0,0 +1,12 @@
+error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
+  --> $DIR/coherence_local_err_tuple.rs:17:1
+   |
+LL | impl lib::MyCopy for (MyType,) { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl doesn't use types inside crate
+   |
+   = note: the impl does not reference any types defined in this crate
+   = note: define and implement a trait or new type instead
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0117`.
diff --git a/src/test/ui/coherence/re-rebalance-coherence.rs b/src/test/ui/coherence/re-rebalance-coherence.rs
new file mode 100644
index 00000000000..33ad4e97536
--- /dev/null
+++ b/src/test/ui/coherence/re-rebalance-coherence.rs
@@ -0,0 +1,13 @@
+#![feature(re_rebalance_coherence)]
+
+// run-pass
+// aux-build:re_rebalance_coherence_lib.rs
+
+extern crate re_rebalance_coherence_lib as lib;
+use lib::*;
+
+struct Oracle;
+impl Backend for Oracle {}
+impl<'a, T:'a, Tab> QueryFragment<Oracle> for BatchInsert<'a, T, Tab> {}
+
+fn main() {}