about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-06-30 01:02:24 +0000
committerbors <bors@rust-lang.org>2022-06-30 01:02:24 +0000
commit5d3c6d6c83edc4ef245e77397c8e32d3ee453b67 (patch)
treece333ccdb674699e75945489d85d18b87f8be9de /src/test
parentbf45371f262e184b4a77adea88c8ac01ac79759b (diff)
parent943c6c74440584eb789439e96e3365ba401c0d7c (diff)
Auto merge of #98691 - matthiaskrgr:rollup-ymsa64p, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #96727 (Make TAIT behave exactly like RPIT)
 - #98681 (rustdoc-json: Make default value of blanket impl assoc types work)
 - #98682 (add tests for ICE 94432)
 - #98683 (add test for ice 68875)
 - #98685 (Replace `sort_modules_alphabetically` boolean with enum)
 - #98687 (add test for 47814)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'src/test')
-rw-r--r--src/test/rustdoc-json/blanket_impls.rs9
-rw-r--r--src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs2
-rw-r--r--src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr8
-rw-r--r--src/test/ui/associated-types/issue-47814.rs13
-rw-r--r--src/test/ui/associated-types/issue-47814.stderr14
-rw-r--r--src/test/ui/async-await/issues/issue-65159.rs1
-rw-r--r--src/test/ui/async-await/issues/issue-65159.stderr16
-rw-r--r--src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.rs1
-rw-r--r--src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.stderr18
-rw-r--r--src/test/ui/chalkify/bugs/async.stderr9
-rw-r--r--src/test/ui/const-generics/ice-68875.rs11
-rw-r--r--src/test/ui/const-generics/ice-68875.stderr8
-rw-r--r--src/test/ui/generic-associated-types/bugs/issue-89008.stderr8
-rw-r--r--src/test/ui/generics/issue-94432-garbage-ice.rs10
-rw-r--r--src/test/ui/impl-trait/issue-55872-1.rs4
-rw-r--r--src/test/ui/impl-trait/issue-55872-1.stderr12
-rw-r--r--src/test/ui/impl-trait/issue-55872-3.rs2
-rw-r--r--src/test/ui/impl-trait/issue-55872-3.stderr6
-rw-r--r--src/test/ui/impl-trait/issues/issue-70877.rs2
-rw-r--r--src/test/ui/impl-trait/issues/issue-70877.stderr17
-rw-r--r--src/test/ui/impl-trait/issues/issue-78722.rs3
-rw-r--r--src/test/ui/impl-trait/issues/issue-78722.stderr10
-rw-r--r--src/test/ui/impl-trait/issues/issue-83919.rs3
-rw-r--r--src/test/ui/impl-trait/issues/issue-83919.stderr11
-rw-r--r--src/test/ui/impl-trait/nested-return-type2-tait2.rs2
-rw-r--r--src/test/ui/impl-trait/nested-return-type2-tait2.stderr8
-rw-r--r--src/test/ui/impl-trait/nested-return-type2-tait3.rs2
-rw-r--r--src/test/ui/impl-trait/nested-return-type2-tait3.stderr8
-rw-r--r--src/test/ui/lazy-type-alias-impl-trait/branches.rs13
-rw-r--r--src/test/ui/lazy-type-alias-impl-trait/branches.stderr8
-rw-r--r--src/test/ui/lazy-type-alias-impl-trait/branches2.rs2
-rw-r--r--src/test/ui/lazy-type-alias-impl-trait/branches3.rs36
-rw-r--r--src/test/ui/lazy-type-alias-impl-trait/branches3.stderr51
-rw-r--r--src/test/ui/lazy-type-alias-impl-trait/recursion2.rs4
-rw-r--r--src/test/ui/lazy-type-alias-impl-trait/recursion2.stderr16
-rw-r--r--src/test/ui/never_type/impl_trait_fallback2.rs1
-rw-r--r--src/test/ui/never_type/impl_trait_fallback2.stderr10
-rw-r--r--src/test/ui/never_type/impl_trait_fallback3.rs2
-rw-r--r--src/test/ui/never_type/impl_trait_fallback3.stderr11
-rw-r--r--src/test/ui/type-alias-impl-trait/closures_in_branches.rs2
-rw-r--r--src/test/ui/type-alias-impl-trait/closures_in_branches.stderr14
-rw-r--r--src/test/ui/type-alias-impl-trait/fallback.rs2
-rw-r--r--src/test/ui/type-alias-impl-trait/fallback.stderr15
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs3
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr6
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-60371.stderr2
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-63279.rs1
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-63279.stderr32
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-74280.stderr8
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-94429.rs3
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-94429.stderr10
-rw-r--r--src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs2
-rw-r--r--src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr6
-rw-r--r--src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.stderr7
-rw-r--r--src/test/ui/type-alias-impl-trait/self-referential-2.rs2
-rw-r--r--src/test/ui/type-alias-impl-trait/self-referential-2.stderr6
-rw-r--r--src/test/ui/type-alias-impl-trait/self-referential-4.rs6
-rw-r--r--src/test/ui/type-alias-impl-trait/self-referential-4.stderr18
-rw-r--r--src/test/ui/type-alias-impl-trait/self-referential.rs9
-rw-r--r--src/test/ui/type-alias-impl-trait/self-referential.stderr21
60 files changed, 376 insertions, 171 deletions
diff --git a/src/test/rustdoc-json/blanket_impls.rs b/src/test/rustdoc-json/blanket_impls.rs
new file mode 100644
index 00000000000..edf1a9fe2fc
--- /dev/null
+++ b/src/test/rustdoc-json/blanket_impls.rs
@@ -0,0 +1,9 @@
+// Regression test for <https://github.com/rust-lang/rust/issues/98658>
+
+#![no_std]
+
+// @has blanket_impls.json
+// @has - "$.index[*][?(@.name=='Error')].kind" \"assoc_type\"
+// @has - "$.index[*][?(@.name=='Error')].inner.default.kind" \"resolved_path\"
+// @has - "$.index[*][?(@.name=='Error')].inner.default.inner.name" \"Infallible\"
+pub struct ForBlanketTryFromImpl;
diff --git a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs
index 67b97c21805..4c36289f47b 100644
--- a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs
+++ b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.rs
@@ -30,7 +30,7 @@ impl Thing for AssocNoCopy {
     type Out = Box<dyn Bar<Assoc: Copy>>;
 
     fn func() -> Self::Out {
-        Box::new(AssocNoCopy)
         //~^ ERROR the trait bound `String: Copy` is not satisfied
+        Box::new(AssocNoCopy)
     }
 }
diff --git a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr
index f40e6585b38..a32ab453152 100644
--- a/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr
+++ b/src/test/ui/associated-type-bounds/assoc-type-eq-with-dyn-atb-fail.stderr
@@ -1,10 +1,8 @@
 error[E0277]: the trait bound `String: Copy` is not satisfied
-  --> $DIR/assoc-type-eq-with-dyn-atb-fail.rs:33:9
+  --> $DIR/assoc-type-eq-with-dyn-atb-fail.rs:32:18
    |
-LL |         Box::new(AssocNoCopy)
-   |         ^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `String`
-   |
-   = note: required for the cast from `AssocNoCopy` to the object type `dyn Bar<Assoc = <AssocNoCopy as Thing>::Out::{opaque#0}>`
+LL |     fn func() -> Self::Out {
+   |                  ^^^^^^^^^ the trait `Copy` is not implemented for `String`
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/associated-types/issue-47814.rs b/src/test/ui/associated-types/issue-47814.rs
new file mode 100644
index 00000000000..90e8a3bc2f2
--- /dev/null
+++ b/src/test/ui/associated-types/issue-47814.rs
@@ -0,0 +1,13 @@
+struct ArpIPv4<'a> {
+    s: &'a u8
+}
+
+impl<'a> ArpIPv4<'a> {
+    const LENGTH: usize = 20;
+
+    pub fn to_buffer() -> [u8; Self::LENGTH] { //~ ERROR generic `Self` types are currently not permitted in anonymous constants
+        unimplemented!()
+    }
+}
+
+pub fn main() {}
diff --git a/src/test/ui/associated-types/issue-47814.stderr b/src/test/ui/associated-types/issue-47814.stderr
new file mode 100644
index 00000000000..2e4ddb81166
--- /dev/null
+++ b/src/test/ui/associated-types/issue-47814.stderr
@@ -0,0 +1,14 @@
+error: generic `Self` types are currently not permitted in anonymous constants
+  --> $DIR/issue-47814.rs:8:32
+   |
+LL |     pub fn to_buffer() -> [u8; Self::LENGTH] {
+   |                                ^^^^
+   |
+note: not a concrete type
+  --> $DIR/issue-47814.rs:5:10
+   |
+LL | impl<'a> ArpIPv4<'a> {
+   |          ^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/async-await/issues/issue-65159.rs b/src/test/ui/async-await/issues/issue-65159.rs
index df2ca025705..1dbf5db6c32 100644
--- a/src/test/ui/async-await/issues/issue-65159.rs
+++ b/src/test/ui/async-await/issues/issue-65159.rs
@@ -6,6 +6,7 @@ async fn copy() -> Result<()>
 //~^ ERROR this enum takes 2 generic arguments
 {
     Ok(())
+    //~^ ERROR type annotations needed
 }
 
 fn main() { }
diff --git a/src/test/ui/async-await/issues/issue-65159.stderr b/src/test/ui/async-await/issues/issue-65159.stderr
index 45f5ec40cd7..9918f569cbc 100644
--- a/src/test/ui/async-await/issues/issue-65159.stderr
+++ b/src/test/ui/async-await/issues/issue-65159.stderr
@@ -16,6 +16,18 @@ help: add missing generic argument
 LL | async fn copy() -> Result<(), E>
    |                             +++
 
-error: aborting due to previous error
+error[E0282]: type annotations needed
+  --> $DIR/issue-65159.rs:8:5
+   |
+LL |     Ok(())
+   |     ^^ cannot infer type of the type parameter `E` declared on the enum `Result`
+   |
+help: consider specifying the generic arguments
+   |
+LL |     Ok::<(), E>(())
+   |       +++++++++
+
+error: aborting due to 2 previous errors
 
-For more information about this error, try `rustc --explain E0107`.
+Some errors have detailed explanations: E0107, E0282.
+For more information about an error, try `rustc --explain E0107`.
diff --git a/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.rs b/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.rs
index dd0320bc53b..2c8a700bc2e 100644
--- a/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.rs
+++ b/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.rs
@@ -17,6 +17,7 @@ async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_> {
     //~^ ERROR this struct takes 0 lifetime arguments but 1 lifetime argument was supplied
     //~^^ ERROR this struct takes 1 generic argument but 0 generic arguments were supplied
     LockedMarket(generator.lock().unwrap().buy())
+    //~^ ERROR cannot return value referencing temporary
 }
 
 struct LockedMarket<T>(T);
diff --git a/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.stderr b/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.stderr
index d2b927fb664..4bd06673043 100644
--- a/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.stderr
+++ b/src/test/ui/borrowck/issue-82126-mismatched-subst-and-hir.stderr
@@ -7,7 +7,7 @@ LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
    |                                                           expected 0 lifetime arguments
    |
 note: struct defined here, with 0 lifetime parameters
-  --> $DIR/issue-82126-mismatched-subst-and-hir.rs:22:8
+  --> $DIR/issue-82126-mismatched-subst-and-hir.rs:23:8
    |
 LL | struct LockedMarket<T>(T);
    |        ^^^^^^^^^^^^
@@ -19,7 +19,7 @@ LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_>
    |                                                           ^^^^^^^^^^^^ expected 1 generic argument
    |
 note: struct defined here, with 1 generic parameter: `T`
-  --> $DIR/issue-82126-mismatched-subst-and-hir.rs:22:8
+  --> $DIR/issue-82126-mismatched-subst-and-hir.rs:23:8
    |
 LL | struct LockedMarket<T>(T);
    |        ^^^^^^^^^^^^ -
@@ -28,6 +28,16 @@ help: add missing generic argument
 LL | async fn buy_lock(generator: &Mutex<MarketMultiplier>) -> LockedMarket<'_, T> {
    |                                                                          +++
 
-error: aborting due to 2 previous errors
+error[E0515]: cannot return value referencing temporary value
+  --> $DIR/issue-82126-mismatched-subst-and-hir.rs:19:5
+   |
+LL |     LockedMarket(generator.lock().unwrap().buy())
+   |     ^^^^^^^^^^^^^-------------------------^^^^^^^
+   |     |            |
+   |     |            temporary value created here
+   |     returns a value referencing data owned by the current function
+
+error: aborting due to 3 previous errors
 
-For more information about this error, try `rustc --explain E0107`.
+Some errors have detailed explanations: E0107, E0515.
+For more information about an error, try `rustc --explain E0107`.
diff --git a/src/test/ui/chalkify/bugs/async.stderr b/src/test/ui/chalkify/bugs/async.stderr
index 5b7ca8d46cf..f53ed53f73c 100644
--- a/src/test/ui/chalkify/bugs/async.stderr
+++ b/src/test/ui/chalkify/bugs/async.stderr
@@ -29,13 +29,10 @@ LL |     T: Generator<ResumeTy, Yield = ()>,
    |                            ^^^^^^^^^^ required by this bound in `std::future::from_generator`
 
 error[E0280]: the requirement `<impl Future<Output = u32> as Future>::Output == u32` is not satisfied
-  --> $DIR/async.rs:7:29
+  --> $DIR/async.rs:7:25
    |
-LL |   async fn foo(x: u32) -> u32 {
-   |  _____________________________^
-LL | |     x
-LL | | }
-   | |_^
+LL | async fn foo(x: u32) -> u32 {
+   |                         ^^^
 
 error: aborting due to 3 previous errors
 
diff --git a/src/test/ui/const-generics/ice-68875.rs b/src/test/ui/const-generics/ice-68875.rs
new file mode 100644
index 00000000000..2ef7cfdbe27
--- /dev/null
+++ b/src/test/ui/const-generics/ice-68875.rs
@@ -0,0 +1,11 @@
+// check-fail
+
+struct DataWrapper<'a> {
+    data: &'a [u8; Self::SIZE], //~ ERROR generic `Self` types are currently not permitted in anonymous constants
+}
+
+impl DataWrapper<'_> {
+    const SIZE: usize = 14;
+}
+
+pub fn main() {}
diff --git a/src/test/ui/const-generics/ice-68875.stderr b/src/test/ui/const-generics/ice-68875.stderr
new file mode 100644
index 00000000000..1db62c57fd4
--- /dev/null
+++ b/src/test/ui/const-generics/ice-68875.stderr
@@ -0,0 +1,8 @@
+error: generic `Self` types are currently not permitted in anonymous constants
+  --> $DIR/ice-68875.rs:4:20
+   |
+LL |     data: &'a [u8; Self::SIZE],
+   |                    ^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/generic-associated-types/bugs/issue-89008.stderr b/src/test/ui/generic-associated-types/bugs/issue-89008.stderr
index 5cbadfacc1b..50844fdc14d 100644
--- a/src/test/ui/generic-associated-types/bugs/issue-89008.stderr
+++ b/src/test/ui/generic-associated-types/bugs/issue-89008.stderr
@@ -1,10 +1,10 @@
 error[E0271]: type mismatch resolving `<Empty<_> as Stream>::Item == Repr`
-  --> $DIR/issue-89008.rs:40:9
+  --> $DIR/issue-89008.rs:39:43
    |
 LL |     fn line_stream<'a, Repr>(&'a self) -> Self::LineStreamFut<'a, Repr> {
-   |                        ---- this type parameter
-LL |         async {empty()}
-   |         ^^^^^^^^^^^^^^^ type mismatch resolving `<Empty<_> as Stream>::Item == Repr`
+   |                        ----               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type mismatch resolving `<Empty<_> as Stream>::Item == Repr`
+   |                        |
+   |                        this type parameter
    |
 note: expected this to be `()`
   --> $DIR/issue-89008.rs:18:17
diff --git a/src/test/ui/generics/issue-94432-garbage-ice.rs b/src/test/ui/generics/issue-94432-garbage-ice.rs
new file mode 100644
index 00000000000..d0709e2d2a4
--- /dev/null
+++ b/src/test/ui/generics/issue-94432-garbage-ice.rs
@@ -0,0 +1,10 @@
+// check-fail
+// dont-check-compiler-stdout
+// dont-check-compiler-stderr
+
+fn�a<e>(){fn�p(){e}} //~ ERROR unknown start of token: \u{fffd}
+//~^ ERROR unknown start of token: \u{fffd}
+//~^^ ERROR can't use generic parameters from outer function [E0401]
+//~^^^ WARN type parameter `e` should have an upper camel case name
+
+fn main(){}
diff --git a/src/test/ui/impl-trait/issue-55872-1.rs b/src/test/ui/impl-trait/issue-55872-1.rs
index a75b9b43b3e..22ff7ffa23c 100644
--- a/src/test/ui/impl-trait/issue-55872-1.rs
+++ b/src/test/ui/impl-trait/issue-55872-1.rs
@@ -11,9 +11,9 @@ impl<S: Default> Bar for S {
 
     fn foo<T: Default>() -> Self::E {
         //~^ ERROR impl has stricter requirements than trait
-        (S::default(), T::default())
-        //~^ ERROR the trait bound `S: Copy` is not satisfied in `(S, T)` [E0277]
+        //~| ERROR the trait bound `S: Copy` is not satisfied in `(S, T)` [E0277]
         //~| ERROR the trait bound `T: Copy` is not satisfied in `(S, T)` [E0277]
+        (S::default(), T::default())
     }
 }
 
diff --git a/src/test/ui/impl-trait/issue-55872-1.stderr b/src/test/ui/impl-trait/issue-55872-1.stderr
index efc57da7461..8912cce1b4b 100644
--- a/src/test/ui/impl-trait/issue-55872-1.stderr
+++ b/src/test/ui/impl-trait/issue-55872-1.stderr
@@ -8,10 +8,10 @@ LL |     fn foo<T: Default>() -> Self::E {
    |               ^^^^^^^ impl has extra requirement `T: Default`
 
 error[E0277]: the trait bound `S: Copy` is not satisfied in `(S, T)`
-  --> $DIR/issue-55872-1.rs:14:9
+  --> $DIR/issue-55872-1.rs:12:29
    |
-LL |         (S::default(), T::default())
-   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `S`
+LL |     fn foo<T: Default>() -> Self::E {
+   |                             ^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `S`
    |
    = note: required because it appears within the type `(S, T)`
 help: consider further restricting this bound
@@ -20,10 +20,10 @@ LL | impl<S: Default + std::marker::Copy> Bar for S {
    |                 +++++++++++++++++++
 
 error[E0277]: the trait bound `T: Copy` is not satisfied in `(S, T)`
-  --> $DIR/issue-55872-1.rs:14:9
+  --> $DIR/issue-55872-1.rs:12:29
    |
-LL |         (S::default(), T::default())
-   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `T`
+LL |     fn foo<T: Default>() -> Self::E {
+   |                             ^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `T`
    |
    = note: required because it appears within the type `(S, T)`
 help: consider further restricting this bound
diff --git a/src/test/ui/impl-trait/issue-55872-3.rs b/src/test/ui/impl-trait/issue-55872-3.rs
index 36d9fdede10..3ffce85e61b 100644
--- a/src/test/ui/impl-trait/issue-55872-3.rs
+++ b/src/test/ui/impl-trait/issue-55872-3.rs
@@ -12,8 +12,8 @@ pub trait Bar {
 impl<S> Bar for S {
     type E = impl std::marker::Copy;
     fn foo<T>() -> Self::E {
+    //~^ ERROR the trait bound `impl Future<Output = ()>: Copy` is not satisfied [E0277]
         async {}
-        //~^ ERROR the trait bound `impl Future<Output = ()>: Copy` is not satisfied [E0277]
     }
 }
 
diff --git a/src/test/ui/impl-trait/issue-55872-3.stderr b/src/test/ui/impl-trait/issue-55872-3.stderr
index e7023e8127c..6ab540e8751 100644
--- a/src/test/ui/impl-trait/issue-55872-3.stderr
+++ b/src/test/ui/impl-trait/issue-55872-3.stderr
@@ -1,8 +1,8 @@
 error[E0277]: the trait bound `impl Future<Output = ()>: Copy` is not satisfied
-  --> $DIR/issue-55872-3.rs:15:9
+  --> $DIR/issue-55872-3.rs:14:20
    |
-LL |         async {}
-   |         ^^^^^^^^ the trait `Copy` is not implemented for `impl Future<Output = ()>`
+LL |     fn foo<T>() -> Self::E {
+   |                    ^^^^^^^ the trait `Copy` is not implemented for `impl Future<Output = ()>`
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/impl-trait/issues/issue-70877.rs b/src/test/ui/impl-trait/issues/issue-70877.rs
index 1a86fa00ed1..8169cfafac7 100644
--- a/src/test/ui/impl-trait/issues/issue-70877.rs
+++ b/src/test/ui/impl-trait/issues/issue-70877.rs
@@ -13,7 +13,7 @@ impl Iterator for Bar {
     type Item = FooItem;
 
     fn next(&mut self) -> Option<Self::Item> {
-        Some(Box::new(quux)) //~ ERROR mismatched types
+        Some(Box::new(quux))
     }
 }
 
diff --git a/src/test/ui/impl-trait/issues/issue-70877.stderr b/src/test/ui/impl-trait/issues/issue-70877.stderr
index 7cbd58bdabf..8813bff3c35 100644
--- a/src/test/ui/impl-trait/issues/issue-70877.stderr
+++ b/src/test/ui/impl-trait/issues/issue-70877.stderr
@@ -1,17 +1,3 @@
-error[E0308]: mismatched types
-  --> $DIR/issue-70877.rs:16:9
-   |
-LL | type FooRet = impl std::fmt::Debug;
-   |               -------------------- the expected opaque type
-...
-LL |     fn next(&mut self) -> Option<Self::Item> {
-   |                           ------------------ expected `Option<Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> FooRet + 'static)>>` because of return type
-LL |         Some(Box::new(quux))
-   |         ^^^^^^^^^^^^^^^^^^^^ expected trait object `dyn Fn`, found fn item
-   |
-   = note: expected enum `Option<Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> FooRet + 'static)>>`
-              found enum `Option<Box<for<'r> fn(&'r (dyn ToString + 'r)) -> FooRet {quux}>>`
-
 error: opaque type's hidden type cannot be another opaque type from the same scope
   --> $DIR/issue-70877.rs:31:12
    |
@@ -29,6 +15,5 @@ note: opaque type being used as hidden type
 LL | type FooRet = impl std::fmt::Debug;
    |               ^^^^^^^^^^^^^^^^^^^^
 
-error: aborting due to 2 previous errors
+error: aborting due to previous error
 
-For more information about this error, try `rustc --explain E0308`.
diff --git a/src/test/ui/impl-trait/issues/issue-78722.rs b/src/test/ui/impl-trait/issues/issue-78722.rs
index 5498793bc28..002e4cde40a 100644
--- a/src/test/ui/impl-trait/issues/issue-78722.rs
+++ b/src/test/ui/impl-trait/issues/issue-78722.rs
@@ -7,7 +7,8 @@ type F = impl core::future::Future<Output = u8>;
 struct Bug {
     V1: [(); {
         fn concrete_use() -> F {
-            async {} //~ ERROR type mismatch
+            //~^ ERROR type mismatch
+            async {}
         }
         let f: F = async { 1 };
         //~^ ERROR `async` blocks are not allowed in constants
diff --git a/src/test/ui/impl-trait/issues/issue-78722.stderr b/src/test/ui/impl-trait/issues/issue-78722.stderr
index 7a057c7f51b..690d6abc766 100644
--- a/src/test/ui/impl-trait/issues/issue-78722.stderr
+++ b/src/test/ui/impl-trait/issues/issue-78722.stderr
@@ -1,5 +1,5 @@
 error[E0658]: `async` blocks are not allowed in constants
-  --> $DIR/issue-78722.rs:12:20
+  --> $DIR/issue-78722.rs:13:20
    |
 LL |         let f: F = async { 1 };
    |                    ^^^^^^^^^^^
@@ -8,7 +8,7 @@ LL |         let f: F = async { 1 };
    = help: add `#![feature(const_async_blocks)]` to the crate attributes to enable
 
 error[E0493]: destructors cannot be evaluated at compile-time
-  --> $DIR/issue-78722.rs:12:13
+  --> $DIR/issue-78722.rs:13:13
    |
 LL |         let f: F = async { 1 };
    |             ^ constants cannot evaluate destructors
@@ -17,10 +17,10 @@ LL |     }],
    |     - value is dropped here
 
 error[E0271]: type mismatch resolving `<impl Future<Output = ()> as Future>::Output == u8`
-  --> $DIR/issue-78722.rs:10:13
+  --> $DIR/issue-78722.rs:9:30
    |
-LL |             async {}
-   |             ^^^^^^^^ expected `()`, found `u8`
+LL |         fn concrete_use() -> F {
+   |                              ^ expected `()`, found `u8`
 
 error: aborting due to 3 previous errors
 
diff --git a/src/test/ui/impl-trait/issues/issue-83919.rs b/src/test/ui/impl-trait/issues/issue-83919.rs
index 58aca77fdf1..e76443a65db 100644
--- a/src/test/ui/impl-trait/issues/issue-83919.rs
+++ b/src/test/ui/impl-trait/issues/issue-83919.rs
@@ -19,8 +19,9 @@ impl Foo for Implementor {
     type Fut = impl Future<Output=Self::Fut2>;
 
     fn get_fut(&self) -> Self::Fut {
+    //~^ ERROR `{integer}` is not a future
         async move {
-            42 //~^ ERROR `{integer}` is not a future
+            42
             // 42 does not impl Future and rustc does actually point out the error,
             // but rustc used to panic.
             // Putting a valid Future here always worked fine.
diff --git a/src/test/ui/impl-trait/issues/issue-83919.stderr b/src/test/ui/impl-trait/issues/issue-83919.stderr
index ebd0130be8d..d39dcf7fbf5 100644
--- a/src/test/ui/impl-trait/issues/issue-83919.stderr
+++ b/src/test/ui/impl-trait/issues/issue-83919.stderr
@@ -1,13 +1,8 @@
 error[E0277]: `{integer}` is not a future
-  --> $DIR/issue-83919.rs:22:9
+  --> $DIR/issue-83919.rs:21:26
    |
-LL | /         async move {
-LL | |             42
-LL | |             // 42 does not impl Future and rustc does actually point out the error,
-LL | |             // but rustc used to panic.
-LL | |             // Putting a valid Future here always worked fine.
-LL | |         }
-   | |_________^ `{integer}` is not a future
+LL |     fn get_fut(&self) -> Self::Fut {
+   |                          ^^^^^^^^^ `{integer}` is not a future
    |
    = help: the trait `Future` is not implemented for `{integer}`
    = note: {integer} must be a future or must implement `IntoFuture` to be awaited
diff --git a/src/test/ui/impl-trait/nested-return-type2-tait2.rs b/src/test/ui/impl-trait/nested-return-type2-tait2.rs
index af8e0663054..fcc077ec18e 100644
--- a/src/test/ui/impl-trait/nested-return-type2-tait2.rs
+++ b/src/test/ui/impl-trait/nested-return-type2-tait2.rs
@@ -24,8 +24,8 @@ type Traitable = impl Trait<Assoc = Sendable>;
 // var to make it uphold the `: Duh` bound on `Trait::Assoc`. The opaque
 // type does not implement `Duh`, even if its hidden type does. So we error out.
 fn foo() -> Traitable {
-    || 42
     //~^ ERROR `Sendable: Duh` is not satisfied
+    || 42
 }
 
 fn main() {
diff --git a/src/test/ui/impl-trait/nested-return-type2-tait2.stderr b/src/test/ui/impl-trait/nested-return-type2-tait2.stderr
index 42e65e69248..3e19ad7b5c6 100644
--- a/src/test/ui/impl-trait/nested-return-type2-tait2.stderr
+++ b/src/test/ui/impl-trait/nested-return-type2-tait2.stderr
@@ -1,11 +1,11 @@
 error[E0277]: the trait bound `Sendable: Duh` is not satisfied
-  --> $DIR/nested-return-type2-tait2.rs:27:5
+  --> $DIR/nested-return-type2-tait2.rs:26:13
    |
-LL |     || 42
-   |     ^^^^^ the trait `Duh` is not implemented for `Sendable`
+LL | fn foo() -> Traitable {
+   |             ^^^^^^^^^ the trait `Duh` is not implemented for `Sendable`
    |
    = help: the trait `Duh` is implemented for `i32`
-note: required because of the requirements on the impl of `Trait` for `[closure@$DIR/nested-return-type2-tait2.rs:27:5: 27:10]`
+note: required because of the requirements on the impl of `Trait` for `[closure@$DIR/nested-return-type2-tait2.rs:28:5: 28:10]`
   --> $DIR/nested-return-type2-tait2.rs:14:31
    |
 LL | impl<R: Duh, F: FnMut() -> R> Trait for F {
diff --git a/src/test/ui/impl-trait/nested-return-type2-tait3.rs b/src/test/ui/impl-trait/nested-return-type2-tait3.rs
index 74fd8a9dda0..665c7a8cab9 100644
--- a/src/test/ui/impl-trait/nested-return-type2-tait3.rs
+++ b/src/test/ui/impl-trait/nested-return-type2-tait3.rs
@@ -23,8 +23,8 @@ type Traitable = impl Trait<Assoc = impl Send>;
 // var to make it uphold the `: Duh` bound on `Trait::Assoc`. The opaque
 // type does not implement `Duh`, even if its hidden type does. So we error out.
 fn foo() -> Traitable {
-    || 42
     //~^ ERROR `impl Send: Duh` is not satisfied
+    || 42
 }
 
 fn main() {
diff --git a/src/test/ui/impl-trait/nested-return-type2-tait3.stderr b/src/test/ui/impl-trait/nested-return-type2-tait3.stderr
index 4d3691d0e07..6185e4872a5 100644
--- a/src/test/ui/impl-trait/nested-return-type2-tait3.stderr
+++ b/src/test/ui/impl-trait/nested-return-type2-tait3.stderr
@@ -1,11 +1,11 @@
 error[E0277]: the trait bound `impl Send: Duh` is not satisfied
-  --> $DIR/nested-return-type2-tait3.rs:26:5
+  --> $DIR/nested-return-type2-tait3.rs:25:13
    |
-LL |     || 42
-   |     ^^^^^ the trait `Duh` is not implemented for `impl Send`
+LL | fn foo() -> Traitable {
+   |             ^^^^^^^^^ the trait `Duh` is not implemented for `impl Send`
    |
    = help: the trait `Duh` is implemented for `i32`
-note: required because of the requirements on the impl of `Trait` for `[closure@$DIR/nested-return-type2-tait3.rs:26:5: 26:10]`
+note: required because of the requirements on the impl of `Trait` for `[closure@$DIR/nested-return-type2-tait3.rs:27:5: 27:10]`
   --> $DIR/nested-return-type2-tait3.rs:14:31
    |
 LL | impl<R: Duh, F: FnMut() -> R> Trait for F {
diff --git a/src/test/ui/lazy-type-alias-impl-trait/branches.rs b/src/test/ui/lazy-type-alias-impl-trait/branches.rs
index aa172f3f19b..95239e2e341 100644
--- a/src/test/ui/lazy-type-alias-impl-trait/branches.rs
+++ b/src/test/ui/lazy-type-alias-impl-trait/branches.rs
@@ -7,8 +7,19 @@ fn foo(b: bool) -> Foo {
         vec![42_i32]
     } else {
         std::iter::empty().collect()
-        //~^ ERROR `Foo` cannot be built from an iterator over elements of type `_`
     }
 }
 
+type Bar = impl std::fmt::Debug;
+
+fn bar(b: bool) -> Bar {
+    let x: Bar = if b {
+        vec![42_i32]
+    } else {
+        std::iter::empty().collect()
+        //~^ ERROR  a value of type `Bar` cannot be built from an iterator over elements of type `_`
+    };
+    x
+}
+
 fn main() {}
diff --git a/src/test/ui/lazy-type-alias-impl-trait/branches.stderr b/src/test/ui/lazy-type-alias-impl-trait/branches.stderr
index c3902f34706..6b87da0c040 100644
--- a/src/test/ui/lazy-type-alias-impl-trait/branches.stderr
+++ b/src/test/ui/lazy-type-alias-impl-trait/branches.stderr
@@ -1,10 +1,10 @@
-error[E0277]: a value of type `Foo` cannot be built from an iterator over elements of type `_`
-  --> $DIR/branches.rs:9:28
+error[E0277]: a value of type `Bar` cannot be built from an iterator over elements of type `_`
+  --> $DIR/branches.rs:19:28
    |
 LL |         std::iter::empty().collect()
-   |                            ^^^^^^^ value of type `Foo` cannot be built from `std::iter::Iterator<Item=_>`
+   |                            ^^^^^^^ value of type `Bar` cannot be built from `std::iter::Iterator<Item=_>`
    |
-   = help: the trait `FromIterator<_>` is not implemented for `Foo`
+   = help: the trait `FromIterator<_>` is not implemented for `Bar`
 note: required by a bound in `collect`
   --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
    |
diff --git a/src/test/ui/lazy-type-alias-impl-trait/branches2.rs b/src/test/ui/lazy-type-alias-impl-trait/branches2.rs
index af605e4d806..04218f5643d 100644
--- a/src/test/ui/lazy-type-alias-impl-trait/branches2.rs
+++ b/src/test/ui/lazy-type-alias-impl-trait/branches2.rs
@@ -1,6 +1,6 @@
 #![feature(type_alias_impl_trait)]
 
-// run-pass
+// check-pass
 
 type Foo = impl std::iter::FromIterator<i32> + PartialEq<Vec<i32>> + std::fmt::Debug;
 
diff --git a/src/test/ui/lazy-type-alias-impl-trait/branches3.rs b/src/test/ui/lazy-type-alias-impl-trait/branches3.rs
new file mode 100644
index 00000000000..30c0af8a5dc
--- /dev/null
+++ b/src/test/ui/lazy-type-alias-impl-trait/branches3.rs
@@ -0,0 +1,36 @@
+#![feature(type_alias_impl_trait)]
+
+type Foo = impl for<'a> FnOnce(&'a str) -> usize;
+type Bar = impl FnOnce(&'static str) -> usize;
+
+fn foo() -> Foo {
+    if true {
+        |s| s.len() //~ ERROR type annotations needed
+    } else {
+        panic!()
+    }
+}
+fn bar() -> Bar {
+    if true {
+        |s| s.len() //~ ERROR type annotations needed
+    } else {
+        panic!()
+    }
+}
+
+fn foo2() -> impl for<'a> FnOnce(&'a str) -> usize {
+    if true {
+        |s| s.len() //~ ERROR type annotations needed
+    } else {
+        panic!()
+    }
+}
+fn bar2() -> impl FnOnce(&'static str) -> usize {
+    if true {
+        |s| s.len() //~ ERROR type annotations needed
+    } else {
+        panic!()
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/lazy-type-alias-impl-trait/branches3.stderr b/src/test/ui/lazy-type-alias-impl-trait/branches3.stderr
new file mode 100644
index 00000000000..77ce1d48480
--- /dev/null
+++ b/src/test/ui/lazy-type-alias-impl-trait/branches3.stderr
@@ -0,0 +1,51 @@
+error[E0282]: type annotations needed
+  --> $DIR/branches3.rs:8:10
+   |
+LL |         |s| s.len()
+   |          ^
+   |
+   = note: type must be known at this point
+help: consider giving this closure parameter an explicit type
+   |
+LL |         |s: _| s.len()
+   |           +++
+
+error[E0282]: type annotations needed
+  --> $DIR/branches3.rs:15:10
+   |
+LL |         |s| s.len()
+   |          ^
+   |
+   = note: type must be known at this point
+help: consider giving this closure parameter an explicit type
+   |
+LL |         |s: _| s.len()
+   |           +++
+
+error[E0282]: type annotations needed
+  --> $DIR/branches3.rs:23:10
+   |
+LL |         |s| s.len()
+   |          ^
+   |
+   = note: type must be known at this point
+help: consider giving this closure parameter an explicit type
+   |
+LL |         |s: _| s.len()
+   |           +++
+
+error[E0282]: type annotations needed
+  --> $DIR/branches3.rs:30:10
+   |
+LL |         |s| s.len()
+   |          ^
+   |
+   = note: type must be known at this point
+help: consider giving this closure parameter an explicit type
+   |
+LL |         |s: _| s.len()
+   |           +++
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0282`.
diff --git a/src/test/ui/lazy-type-alias-impl-trait/recursion2.rs b/src/test/ui/lazy-type-alias-impl-trait/recursion2.rs
index 1cc64ea17e7..6b3d9ff4cde 100644
--- a/src/test/ui/lazy-type-alias-impl-trait/recursion2.rs
+++ b/src/test/ui/lazy-type-alias-impl-trait/recursion2.rs
@@ -1,5 +1,7 @@
 #![feature(type_alias_impl_trait)]
 
+// check-pass
+
 type Foo = impl std::fmt::Debug;
 
 fn foo(b: bool) -> Foo {
@@ -7,7 +9,7 @@ fn foo(b: bool) -> Foo {
         return vec![];
     }
     let x: Vec<i32> = foo(false);
-    std::iter::empty().collect() //~ ERROR `Foo` cannot be built from an iterator
+    std::iter::empty().collect()
 }
 
 fn bar(b: bool) -> impl std::fmt::Debug {
diff --git a/src/test/ui/lazy-type-alias-impl-trait/recursion2.stderr b/src/test/ui/lazy-type-alias-impl-trait/recursion2.stderr
deleted file mode 100644
index 1f6201a8300..00000000000
--- a/src/test/ui/lazy-type-alias-impl-trait/recursion2.stderr
+++ /dev/null
@@ -1,16 +0,0 @@
-error[E0277]: a value of type `Foo` cannot be built from an iterator over elements of type `_`
-  --> $DIR/recursion2.rs:10:24
-   |
-LL |     std::iter::empty().collect()
-   |                        ^^^^^^^ value of type `Foo` cannot be built from `std::iter::Iterator<Item=_>`
-   |
-   = help: the trait `FromIterator<_>` is not implemented for `Foo`
-note: required by a bound in `collect`
-  --> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
-   |
-LL |     fn collect<B: FromIterator<Self::Item>>(self) -> B
-   |                   ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/never_type/impl_trait_fallback2.rs b/src/test/ui/never_type/impl_trait_fallback2.rs
index f73d953bdbd..12c187b9e82 100644
--- a/src/test/ui/never_type/impl_trait_fallback2.rs
+++ b/src/test/ui/never_type/impl_trait_fallback2.rs
@@ -13,6 +13,7 @@ fn should_ret_unit() -> impl T {
 type Foo = impl T;
 
 fn a() -> Foo {
+    //~^ ERROR `(): T` is not satisfied
     panic!()
 }
 
diff --git a/src/test/ui/never_type/impl_trait_fallback2.stderr b/src/test/ui/never_type/impl_trait_fallback2.stderr
index 4a78e73e5f6..78cc83bdbfa 100644
--- a/src/test/ui/never_type/impl_trait_fallback2.stderr
+++ b/src/test/ui/never_type/impl_trait_fallback2.stderr
@@ -6,6 +6,14 @@ LL | fn should_ret_unit() -> impl T {
    |
    = help: the trait `T` is implemented for `i32`
 
-error: aborting due to previous error
+error[E0277]: the trait bound `(): T` is not satisfied
+  --> $DIR/impl_trait_fallback2.rs:15:11
+   |
+LL | fn a() -> Foo {
+   |           ^^^ the trait `T` is not implemented for `()`
+   |
+   = help: the trait `T` is implemented for `i32`
+
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/never_type/impl_trait_fallback3.rs b/src/test/ui/never_type/impl_trait_fallback3.rs
index 26ce9b93105..ed645b82394 100644
--- a/src/test/ui/never_type/impl_trait_fallback3.rs
+++ b/src/test/ui/never_type/impl_trait_fallback3.rs
@@ -7,9 +7,9 @@ trait T {
 }
 
 type Foo = impl T;
-//~^ ERROR unconstrained opaque type
 
 fn a() -> Foo {
+    //~^ ERROR the trait bound `(): T` is not satisfied
     // This is not a defining use, it doesn't actually constrain the opaque type.
     panic!()
 }
diff --git a/src/test/ui/never_type/impl_trait_fallback3.stderr b/src/test/ui/never_type/impl_trait_fallback3.stderr
index 121019d5f69..5d5d216fb9b 100644
--- a/src/test/ui/never_type/impl_trait_fallback3.stderr
+++ b/src/test/ui/never_type/impl_trait_fallback3.stderr
@@ -1,10 +1,9 @@
-error: unconstrained opaque type
-  --> $DIR/impl_trait_fallback3.rs:9:12
+error[E0277]: the trait bound `(): T` is not satisfied
+  --> $DIR/impl_trait_fallback3.rs:11:11
    |
-LL | type Foo = impl T;
-   |            ^^^^^^
-   |
-   = note: `Foo` must be used in combination with a concrete type within the same module
+LL | fn a() -> Foo {
+   |           ^^^ the trait `T` is not implemented for `()`
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/type-alias-impl-trait/closures_in_branches.rs b/src/test/ui/type-alias-impl-trait/closures_in_branches.rs
index a1a9401acc2..7bb490bbec8 100644
--- a/src/test/ui/type-alias-impl-trait/closures_in_branches.rs
+++ b/src/test/ui/type-alias-impl-trait/closures_in_branches.rs
@@ -4,7 +4,7 @@ type Foo = impl std::ops::FnOnce(String) -> usize;
 
 fn foo(b: bool) -> Foo {
     if b {
-        |x| x.len()
+        |x| x.len() //~ ERROR type annotations needed
     } else {
         panic!()
     }
diff --git a/src/test/ui/type-alias-impl-trait/closures_in_branches.stderr b/src/test/ui/type-alias-impl-trait/closures_in_branches.stderr
index b3ca260894b..b7a7871143c 100644
--- a/src/test/ui/type-alias-impl-trait/closures_in_branches.stderr
+++ b/src/test/ui/type-alias-impl-trait/closures_in_branches.stderr
@@ -1,4 +1,16 @@
 error[E0282]: type annotations needed
+  --> $DIR/closures_in_branches.rs:7:10
+   |
+LL |         |x| x.len()
+   |          ^
+   |
+   = note: type must be known at this point
+help: consider giving this closure parameter an explicit type
+   |
+LL |         |x: _| x.len()
+   |           +++
+
+error[E0282]: type annotations needed
   --> $DIR/closures_in_branches.rs:21:10
    |
 LL |         |x| x.len()
@@ -10,6 +22,6 @@ help: consider giving this closure parameter an explicit type
 LL |         |x: _| x.len()
    |           +++
 
-error: aborting due to previous error
+error: aborting due to 2 previous errors
 
 For more information about this error, try `rustc --explain E0282`.
diff --git a/src/test/ui/type-alias-impl-trait/fallback.rs b/src/test/ui/type-alias-impl-trait/fallback.rs
index d7e93335f47..d8cf7d71fef 100644
--- a/src/test/ui/type-alias-impl-trait/fallback.rs
+++ b/src/test/ui/type-alias-impl-trait/fallback.rs
@@ -1,7 +1,6 @@
 // Tests that we correctly handle opaque types being used opaquely,
 // even within their defining scope.
 //
-// check-pass
 #![feature(type_alias_impl_trait)]
 
 type Foo = impl Copy;
@@ -23,6 +22,7 @@ fn constrained_foo() -> Foo {
 // constraints on it.
 fn unconstrained_foo() -> Wrapper<Foo> {
     Wrapper::Second
+    //~^ ERROR: type annotations needed
 }
 
 fn main() {}
diff --git a/src/test/ui/type-alias-impl-trait/fallback.stderr b/src/test/ui/type-alias-impl-trait/fallback.stderr
new file mode 100644
index 00000000000..e009399a60a
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/fallback.stderr
@@ -0,0 +1,15 @@
+error[E0283]: type annotations needed
+  --> $DIR/fallback.rs:24:5
+   |
+LL |     Wrapper::Second
+   |     ^^^^^^^^^^^^^^^ cannot infer type of the type parameter `T` declared on the enum `Wrapper`
+   |
+   = note: cannot satisfy `_: Copy`
+help: consider specifying the generic argument
+   |
+LL |     Wrapper::<T>::Second
+   |            +++++
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0283`.
diff --git a/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs b/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs
index 6c838f41003..377ce85e8b2 100644
--- a/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs
+++ b/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.rs
@@ -3,7 +3,8 @@
 type Foo = impl Fn() -> Foo;
 
 fn foo() -> Foo {
-    foo //~ ERROR: overflow evaluating the requirement `fn() -> Foo {foo}: Sized`
+//~^ ERROR: overflow evaluating the requirement `fn() -> Foo {foo}: Sized`
+    foo
 }
 
 fn main() {}
diff --git a/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr b/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr
index a9c2c18630c..d20b1cc6d85 100644
--- a/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr
+++ b/src/test/ui/type-alias-impl-trait/issue-53398-cyclic-types.stderr
@@ -1,8 +1,8 @@
 error[E0275]: overflow evaluating the requirement `fn() -> Foo {foo}: Sized`
-  --> $DIR/issue-53398-cyclic-types.rs:6:5
+  --> $DIR/issue-53398-cyclic-types.rs:5:13
    |
-LL |     foo
-   |     ^^^
+LL | fn foo() -> Foo {
+   |             ^^^
    |
    = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_53398_cyclic_types`)
 
diff --git a/src/test/ui/type-alias-impl-trait/issue-60371.stderr b/src/test/ui/type-alias-impl-trait/issue-60371.stderr
index d0c04371bd7..082b0f0c309 100644
--- a/src/test/ui/type-alias-impl-trait/issue-60371.stderr
+++ b/src/test/ui/type-alias-impl-trait/issue-60371.stderr
@@ -11,7 +11,7 @@ error[E0277]: the trait bound `(): Bug` is not satisfied
   --> $DIR/issue-60371.rs:10:40
    |
 LL |     const FUN: fn() -> Self::Item = || ();
-   |                                        ^^ the trait `Bug` is not implemented for `()`
+   |                                        ^ the trait `Bug` is not implemented for `()`
    |
    = help: the trait `Bug` is implemented for `&()`
 
diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.rs b/src/test/ui/type-alias-impl-trait/issue-63279.rs
index 057a908bbee..97332e16d84 100644
--- a/src/test/ui/type-alias-impl-trait/issue-63279.rs
+++ b/src/test/ui/type-alias-impl-trait/issue-63279.rs
@@ -5,6 +5,7 @@
 type Closure = impl FnOnce();
 
 fn c() -> Closure {
+    //~^ ERROR: expected a `FnOnce<()>` closure, found `()`
     || -> Closure { || () }
     //~^ ERROR: mismatched types
     //~| ERROR: mismatched types
diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.stderr b/src/test/ui/type-alias-impl-trait/issue-63279.stderr
index ab39ee74be4..57fc660901c 100644
--- a/src/test/ui/type-alias-impl-trait/issue-63279.stderr
+++ b/src/test/ui/type-alias-impl-trait/issue-63279.stderr
@@ -1,5 +1,14 @@
 error[E0277]: expected a `FnOnce<()>` closure, found `()`
-  --> $DIR/issue-63279.rs:8:11
+  --> $DIR/issue-63279.rs:7:11
+   |
+LL | fn c() -> Closure {
+   |           ^^^^^^^ expected an `FnOnce<()>` closure, found `()`
+   |
+   = help: the trait `FnOnce<()>` is not implemented for `()`
+   = note: wrap the `()` in a closure with no arguments: `|| { /* code */ }`
+
+error[E0277]: expected a `FnOnce<()>` closure, found `()`
+  --> $DIR/issue-63279.rs:9:11
    |
 LL |     || -> Closure { || () }
    |           ^^^^^^^ expected an `FnOnce<()>` closure, found `()`
@@ -8,33 +17,32 @@ LL |     || -> Closure { || () }
    = note: wrap the `()` in a closure with no arguments: `|| { /* code */ }`
 
 error[E0308]: mismatched types
-  --> $DIR/issue-63279.rs:8:21
+  --> $DIR/issue-63279.rs:9:21
    |
 LL |     || -> Closure { || () }
    |                     ^^^^^ expected `()`, found closure
    |
    = note: expected unit type `()`
-                found closure `[closure@$DIR/issue-63279.rs:8:21: 8:26]`
+                found closure `[closure@$DIR/issue-63279.rs:9:21: 9:26]`
 help: use parentheses to call this closure
    |
 LL |     || -> Closure { (|| ())() }
    |                     +     +++
 
 error[E0308]: mismatched types
-  --> $DIR/issue-63279.rs:8:5
+  --> $DIR/issue-63279.rs:9:5
    |
-LL | type Closure = impl FnOnce();
-   |                ------------- the expected opaque type
-LL |
-LL | fn c() -> Closure {
-   |           ------- expected `Closure` because of return type
 LL |     || -> Closure { || () }
    |     ^^^^^^^^^^^^^^^^^^^^^^^ expected `()`, found closure
    |
-   = note: expected opaque type `Closure`
-                  found closure `[closure@$DIR/issue-63279.rs:8:5: 8:28]`
+   = note: expected unit type `()`
+                found closure `[closure@$DIR/issue-63279.rs:9:5: 9:28]`
+help: use parentheses to call this closure
+   |
+LL |     (|| -> Closure { || () })()
+   |     +                       +++
 
-error: aborting due to 3 previous errors
+error: aborting due to 4 previous errors
 
 Some errors have detailed explanations: E0277, E0308.
 For more information about an error, try `rustc --explain E0277`.
diff --git a/src/test/ui/type-alias-impl-trait/issue-74280.stderr b/src/test/ui/type-alias-impl-trait/issue-74280.stderr
index 573e691b4cc..5ed29e0ac94 100644
--- a/src/test/ui/type-alias-impl-trait/issue-74280.stderr
+++ b/src/test/ui/type-alias-impl-trait/issue-74280.stderr
@@ -1,17 +1,11 @@
 error[E0308]: mismatched types
   --> $DIR/issue-74280.rs:9:5
    |
-LL | type Test = impl Copy;
-   |             --------- the expected opaque type
-LL |
 LL | fn test() -> Test {
-   |              ---- expected `Test` because of return type
+   |              ---- expected `_` because of return type
 LL |     let y = || -> Test { () };
 LL |     7
    |     ^ expected `()`, found integer
-   |
-   = note: expected opaque type `Test`
-                     found type `{integer}`
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/type-alias-impl-trait/issue-94429.rs b/src/test/ui/type-alias-impl-trait/issue-94429.rs
index 51d69c1271e..2c965b875a0 100644
--- a/src/test/ui/type-alias-impl-trait/issue-94429.rs
+++ b/src/test/ui/type-alias-impl-trait/issue-94429.rs
@@ -13,7 +13,8 @@ impl Runnable for Implementor {
     type Gen = impl Generator<Yield = (), Return = ()>;
 
     fn run(&mut self) -> Self::Gen {
-        move || { //~ ERROR: type mismatch resolving
+    //~^ ERROR: type mismatch resolving
+        move || {
             yield 1;
         }
     }
diff --git a/src/test/ui/type-alias-impl-trait/issue-94429.stderr b/src/test/ui/type-alias-impl-trait/issue-94429.stderr
index 4546f82b83b..57550104087 100644
--- a/src/test/ui/type-alias-impl-trait/issue-94429.stderr
+++ b/src/test/ui/type-alias-impl-trait/issue-94429.stderr
@@ -1,10 +1,8 @@
-error[E0271]: type mismatch resolving `<[generator@$DIR/issue-94429.rs:16:9: 18:10] as Generator>::Yield == ()`
-  --> $DIR/issue-94429.rs:16:9
+error[E0271]: type mismatch resolving `<[generator@$DIR/issue-94429.rs:17:9: 19:10] as Generator>::Yield == ()`
+  --> $DIR/issue-94429.rs:15:26
    |
-LL | /         move || {
-LL | |             yield 1;
-LL | |         }
-   | |_________^ expected integer, found `()`
+LL |     fn run(&mut self) -> Self::Gen {
+   |                          ^^^^^^^^^ expected integer, found `()`
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs
index 46bac5a34f5..da845e86147 100644
--- a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs
+++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs
@@ -7,8 +7,8 @@
 type X<A, B> = impl Into<&'static A>;
 
 fn f<A, B: 'static>(a: &'static A, b: B) -> (X<A, B>, X<B, A>) {
-    (a, a)
     //~^ ERROR the trait bound `&'static B: From<&A>` is not satisfied
+    (a, a)
 }
 
 fn main() {
diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr
index 198f3e26393..cdaae99e286 100644
--- a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr
+++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.stderr
@@ -1,8 +1,8 @@
 error[E0277]: the trait bound `&'static B: From<&A>` is not satisfied
-  --> $DIR/multiple-def-uses-in-one-fn.rs:10:9
+  --> $DIR/multiple-def-uses-in-one-fn.rs:9:45
    |
-LL |     (a, a)
-   |         ^ the trait `From<&A>` is not implemented for `&'static B`
+LL | fn f<A, B: 'static>(a: &'static A, b: B) -> (X<A, B>, X<B, A>) {
+   |                                             ^^^^^^^^^^^^^^^^^^ the trait `From<&A>` is not implemented for `&'static B`
    |
    = note: required because of the requirements on the impl of `Into<&'static B>` for `&A`
 help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.stderr b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.stderr
index db4b60461ef..bbe709dccab 100644
--- a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.stderr
+++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.stderr
@@ -1,9 +1,6 @@
 error[E0308]: mismatched types
   --> $DIR/multiple-def-uses-in-one-fn3.rs:14:9
    |
-LL | type X<A: ToString + Clone, B: ToString + Clone> = impl ToString;
-   |                                                    ------------- the expected opaque type
-...
 LL | fn g<A: ToString + Clone, B: ToString + Clone>(a: A, b: B) -> (X<A, B>, X<A, B>) {
    |      -                    - found type parameter
    |      |
@@ -11,8 +8,8 @@ LL | fn g<A: ToString + Clone, B: ToString + Clone>(a: A, b: B) -> (X<A, B>, X<A
 LL |     (a, b)
    |         ^ expected type parameter `A`, found type parameter `B`
    |
-   = note: expected opaque type `X<A, B>`
-           found type parameter `B`
+   = note: expected type parameter `A`
+              found type parameter `B`
    = note: a type parameter was expected, but a different one was found; you might be missing a type parameter or trait bound
    = note: for more information, visit https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters
 
diff --git a/src/test/ui/type-alias-impl-trait/self-referential-2.rs b/src/test/ui/type-alias-impl-trait/self-referential-2.rs
index dc7054da5ec..8781196c39f 100644
--- a/src/test/ui/type-alias-impl-trait/self-referential-2.rs
+++ b/src/test/ui/type-alias-impl-trait/self-referential-2.rs
@@ -4,7 +4,7 @@ type Foo = impl std::fmt::Debug;
 type Bar = impl PartialEq<Foo>;
 
 fn bar() -> Bar {
-    42_i32 //~ ERROR can't compare `i32` with `Foo`
+    42_i32 //~^ ERROR can't compare `i32` with `Foo`
 }
 
 fn main() {}
diff --git a/src/test/ui/type-alias-impl-trait/self-referential-2.stderr b/src/test/ui/type-alias-impl-trait/self-referential-2.stderr
index 348696f25e3..2b505d30730 100644
--- a/src/test/ui/type-alias-impl-trait/self-referential-2.stderr
+++ b/src/test/ui/type-alias-impl-trait/self-referential-2.stderr
@@ -1,8 +1,10 @@
 error[E0277]: can't compare `i32` with `Foo`
-  --> $DIR/self-referential-2.rs:7:5
+  --> $DIR/self-referential-2.rs:6:13
    |
+LL | fn bar() -> Bar {
+   |             ^^^ no implementation for `i32 == Foo`
 LL |     42_i32
-   |     ^^^^^^ no implementation for `i32 == Foo`
+   |     ------ return type was inferred to be `i32` here
    |
    = help: the trait `PartialEq<Foo>` is not implemented for `i32`
    = help: the following other types implement trait `PartialEq<Rhs>`:
diff --git a/src/test/ui/type-alias-impl-trait/self-referential-4.rs b/src/test/ui/type-alias-impl-trait/self-referential-4.rs
index 697ec56825a..36742c8ad57 100644
--- a/src/test/ui/type-alias-impl-trait/self-referential-4.rs
+++ b/src/test/ui/type-alias-impl-trait/self-referential-4.rs
@@ -3,19 +3,19 @@
 type Bar<'a, 'b> = impl PartialEq<Bar<'b, 'static>> + std::fmt::Debug;
 
 fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
-    i //~ ERROR can't compare `&i32` with `Bar<'b, 'static>`
+    i //~^ ERROR can't compare `&i32` with `Bar<'b, 'static>`
 }
 
 type Foo<'a, 'b> = impl PartialEq<Foo<'static, 'b>> + std::fmt::Debug;
 
 fn foo<'a, 'b>(i: &'a i32) -> Foo<'a, 'b> {
-    i //~ ERROR can't compare `&i32` with `Foo<'static, 'b>`
+    i //~^ ERROR can't compare `&i32` with `Foo<'static, 'b>`
 }
 
 type Moo<'a, 'b> = impl PartialEq<Moo<'static, 'a>> + std::fmt::Debug;
 
 fn moo<'a, 'b>(i: &'a i32) -> Moo<'a, 'b> {
-    i //~ ERROR can't compare `&i32` with `Moo<'static, 'a>`
+    i //~^ ERROR can't compare `&i32` with `Moo<'static, 'a>`
 }
 
 fn main() {
diff --git a/src/test/ui/type-alias-impl-trait/self-referential-4.stderr b/src/test/ui/type-alias-impl-trait/self-referential-4.stderr
index 83826479419..27880f792f4 100644
--- a/src/test/ui/type-alias-impl-trait/self-referential-4.stderr
+++ b/src/test/ui/type-alias-impl-trait/self-referential-4.stderr
@@ -1,8 +1,10 @@
 error[E0277]: can't compare `&i32` with `Bar<'b, 'static>`
-  --> $DIR/self-referential-4.rs:6:5
+  --> $DIR/self-referential-4.rs:5:31
    |
+LL | fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
+   |                               ^^^^^^^^^^^ no implementation for `&i32 == Bar<'b, 'static>`
 LL |     i
-   |     ^ no implementation for `&i32 == Bar<'b, 'static>`
+   |     - return type was inferred to be `&i32` here
    |
    = help: the trait `PartialEq<Bar<'b, 'static>>` is not implemented for `&i32`
    = help: the following other types implement trait `PartialEq<Rhs>`:
@@ -17,10 +19,12 @@ LL |     i
            and 6 others
 
 error[E0277]: can't compare `&i32` with `Foo<'static, 'b>`
-  --> $DIR/self-referential-4.rs:12:5
+  --> $DIR/self-referential-4.rs:11:31
    |
+LL | fn foo<'a, 'b>(i: &'a i32) -> Foo<'a, 'b> {
+   |                               ^^^^^^^^^^^ no implementation for `&i32 == Foo<'static, 'b>`
 LL |     i
-   |     ^ no implementation for `&i32 == Foo<'static, 'b>`
+   |     - return type was inferred to be `&i32` here
    |
    = help: the trait `PartialEq<Foo<'static, 'b>>` is not implemented for `&i32`
    = help: the following other types implement trait `PartialEq<Rhs>`:
@@ -35,10 +39,12 @@ LL |     i
            and 6 others
 
 error[E0277]: can't compare `&i32` with `Moo<'static, 'a>`
-  --> $DIR/self-referential-4.rs:18:5
+  --> $DIR/self-referential-4.rs:17:31
    |
+LL | fn moo<'a, 'b>(i: &'a i32) -> Moo<'a, 'b> {
+   |                               ^^^^^^^^^^^ no implementation for `&i32 == Moo<'static, 'a>`
 LL |     i
-   |     ^ no implementation for `&i32 == Moo<'static, 'a>`
+   |     - return type was inferred to be `&i32` here
    |
    = help: the trait `PartialEq<Moo<'static, 'a>>` is not implemented for `&i32`
    = help: the following other types implement trait `PartialEq<Rhs>`:
diff --git a/src/test/ui/type-alias-impl-trait/self-referential.rs b/src/test/ui/type-alias-impl-trait/self-referential.rs
index 4974ac72dad..3ff5406a382 100644
--- a/src/test/ui/type-alias-impl-trait/self-referential.rs
+++ b/src/test/ui/type-alias-impl-trait/self-referential.rs
@@ -3,19 +3,22 @@
 type Bar<'a, 'b> = impl PartialEq<Bar<'b, 'a>> + std::fmt::Debug;
 
 fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
-    i //~ ERROR can't compare `&i32` with `Bar<'b, 'a>`
+    //~^ ERROR can't compare `&i32` with `Bar<'b, 'a>`
+    i
 }
 
 type Foo<'a, 'b> = (i32, impl PartialEq<Foo<'a, 'b>> + std::fmt::Debug);
 
 fn foo<'a, 'b>(i: &'a i32) -> Foo<'a, 'b> {
-    (42, i) //~ ERROR can't compare `&i32` with `(i32, &i32)`
+    //~^ ERROR can't compare `&i32` with `(i32, &i32)`
+    (42, i)
 }
 
 type Moo<'a, 'b> = (i32, impl PartialEq<Moo<'b, 'a>> + std::fmt::Debug);
 
 fn moo<'a, 'b>(i: &'a i32) -> Moo<'a, 'b> {
-    (42, i) //~ ERROR can't compare `&i32` with `(i32, Moo<'b, 'a>::{opaque#0})`
+    //~^ ERROR can't compare `&i32` with `(i32, Moo<'b, 'a>::{opaque#0})`
+    (42, i)
 }
 
 fn main() {
diff --git a/src/test/ui/type-alias-impl-trait/self-referential.stderr b/src/test/ui/type-alias-impl-trait/self-referential.stderr
index 2ebb15b8803..97d510f6830 100644
--- a/src/test/ui/type-alias-impl-trait/self-referential.stderr
+++ b/src/test/ui/type-alias-impl-trait/self-referential.stderr
@@ -1,8 +1,11 @@
 error[E0277]: can't compare `&i32` with `Bar<'b, 'a>`
-  --> $DIR/self-referential.rs:6:5
+  --> $DIR/self-referential.rs:5:31
    |
+LL | fn bar<'a, 'b>(i: &'a i32) -> Bar<'a, 'b> {
+   |                               ^^^^^^^^^^^ no implementation for `&i32 == Bar<'b, 'a>`
+LL |
 LL |     i
-   |     ^ no implementation for `&i32 == Bar<'b, 'a>`
+   |     - return type was inferred to be `&i32` here
    |
    = help: the trait `PartialEq<Bar<'b, 'a>>` is not implemented for `&i32`
    = help: the following other types implement trait `PartialEq<Rhs>`:
@@ -17,10 +20,13 @@ LL |     i
            and 6 others
 
 error[E0277]: can't compare `&i32` with `(i32, &i32)`
-  --> $DIR/self-referential.rs:12:10
+  --> $DIR/self-referential.rs:12:31
    |
+LL | fn foo<'a, 'b>(i: &'a i32) -> Foo<'a, 'b> {
+   |                               ^^^^^^^^^^^ no implementation for `&i32 == (i32, &i32)`
+LL |
 LL |     (42, i)
-   |          ^ no implementation for `&i32 == (i32, &i32)`
+   |     ------- return type was inferred to be `(i32, &i32)` here
    |
    = help: the trait `PartialEq<(i32, &i32)>` is not implemented for `&i32`
    = help: the following other types implement trait `PartialEq<Rhs>`:
@@ -35,10 +41,13 @@ LL |     (42, i)
            and 6 others
 
 error[E0277]: can't compare `&i32` with `(i32, Moo<'b, 'a>::{opaque#0})`
-  --> $DIR/self-referential.rs:18:10
+  --> $DIR/self-referential.rs:19:31
    |
+LL | fn moo<'a, 'b>(i: &'a i32) -> Moo<'a, 'b> {
+   |                               ^^^^^^^^^^^ no implementation for `&i32 == (i32, Moo<'b, 'a>::{opaque#0})`
+LL |
 LL |     (42, i)
-   |          ^ no implementation for `&i32 == (i32, Moo<'b, 'a>::{opaque#0})`
+   |     ------- return type was inferred to be `(i32, &i32)` here
    |
    = help: the trait `PartialEq<(i32, Moo<'b, 'a>::{opaque#0})>` is not implemented for `&i32`
    = help: the following other types implement trait `PartialEq<Rhs>`: