about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-88022.rs6
-rw-r--r--tests/ui/box/suggest-box-for-expr-field-issue-139631.rs14
-rw-r--r--tests/ui/box/suggest-box-for-expr-field-issue-139631.stderr44
-rw-r--r--tests/ui/codegen/equal-pointers-unequal/as-cast/inline2.rs2
-rw-r--r--tests/ui/codegen/equal-pointers-unequal/as-cast/zero.rs2
-rw-r--r--tests/ui/codegen/equal-pointers-unequal/exposed-provenance/inline2.rs2
-rw-r--r--tests/ui/codegen/equal-pointers-unequal/exposed-provenance/zero.rs2
-rw-r--r--tests/ui/codegen/equal-pointers-unequal/strict-provenance/inline2.rs2
-rw-r--r--tests/ui/codegen/equal-pointers-unequal/strict-provenance/zero.rs2
-rw-r--r--tests/ui/drop/dropck-normalize-errors.rs31
-rw-r--r--tests/ui/drop/dropck-normalize-errors.stderr76
-rw-r--r--tests/ui/dropck/explicit-drop-bounds.bad1.stderr18
-rw-r--r--tests/ui/dropck/explicit-drop-bounds.bad2.stderr22
-rw-r--r--tests/ui/dropck/explicit-drop-bounds.rs2
-rw-r--r--tests/ui/generic-associated-types/guide-inference-in-gat-arg-deeper.rs6
-rw-r--r--tests/ui/generic-associated-types/no-incomplete-gat-arg-inference.rs33
-rw-r--r--tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.rs (renamed from tests/ui/impl-trait/arg-position-impl-trait-too-long.rs)0
-rw-r--r--tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.stderr (renamed from tests/ui/impl-trait/arg-position-impl-trait-too-long.stderr)0
-rw-r--r--tests/ui/impl-trait/apit/impl-generic-mismatch-ab.rs (renamed from tests/ui/impl-trait/impl-generic-mismatch-ab.rs)0
-rw-r--r--tests/ui/impl-trait/apit/impl-generic-mismatch-ab.stderr (renamed from tests/ui/impl-trait/impl-generic-mismatch-ab.stderr)0
-rw-r--r--tests/ui/impl-trait/can-return-unconstrained-closure.rs23
-rw-r--r--tests/ui/impl-trait/issues/issue-100075-2.rs (renamed from tests/ui/impl-trait/issue-100075-2.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-100075-2.stderr (renamed from tests/ui/impl-trait/issue-100075-2.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-100075.rs (renamed from tests/ui/impl-trait/issue-100075.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-100075.stderr (renamed from tests/ui/impl-trait/issue-100075.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-100187.rs (renamed from tests/ui/impl-trait/issue-100187.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-102605.rs (renamed from tests/ui/impl-trait/issue-102605.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-102605.stderr (renamed from tests/ui/impl-trait/issue-102605.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-103181-1.current.stderr (renamed from tests/ui/impl-trait/issue-103181-1.current.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-103181-1.next.stderr (renamed from tests/ui/impl-trait/issue-103181-1.next.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-103181-1.rs (renamed from tests/ui/impl-trait/issue-103181-1.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-103181-2.rs (renamed from tests/ui/impl-trait/issue-103181-2.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-103181-2.stderr (renamed from tests/ui/impl-trait/issue-103181-2.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-103599.rs (renamed from tests/ui/impl-trait/issue-103599.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-103599.stderr (renamed from tests/ui/impl-trait/issue-103599.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-108591.rs (renamed from tests/ui/impl-trait/issue-108591.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-108592.rs (renamed from tests/ui/impl-trait/issue-108592.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-35668.rs (renamed from tests/ui/impl-trait/issue-35668.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-35668.stderr (renamed from tests/ui/impl-trait/issue-35668.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-36792.rs (renamed from tests/ui/impl-trait/issue-36792.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-46959.rs (renamed from tests/ui/impl-trait/issue-46959.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-49556.rs (renamed from tests/ui/impl-trait/issue-49556.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-49579.rs (renamed from tests/ui/impl-trait/issue-49579.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-49685.rs (renamed from tests/ui/impl-trait/issue-49685.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-51185.rs (renamed from tests/ui/impl-trait/issue-51185.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-54966.rs (renamed from tests/ui/impl-trait/issue-54966.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-54966.stderr (renamed from tests/ui/impl-trait/issue-54966.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872-1.rs (renamed from tests/ui/impl-trait/issue-55872-1.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872-1.stderr (renamed from tests/ui/impl-trait/issue-55872-1.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872-2.rs (renamed from tests/ui/impl-trait/issue-55872-2.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872-2.stderr (renamed from tests/ui/impl-trait/issue-55872-2.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872-3.rs (renamed from tests/ui/impl-trait/issue-55872-3.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872-3.stderr (renamed from tests/ui/impl-trait/issue-55872-3.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872.rs (renamed from tests/ui/impl-trait/issue-55872.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-55872.stderr (renamed from tests/ui/impl-trait/issue-55872.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-56445.rs (renamed from tests/ui/impl-trait/issue-56445.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-68532.rs (renamed from tests/ui/impl-trait/issue-68532.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-72911.rs (renamed from tests/ui/impl-trait/issue-72911.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-72911.stderr (renamed from tests/ui/impl-trait/issue-72911.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-87450.rs (renamed from tests/ui/impl-trait/issue-87450.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-87450.stderr (renamed from tests/ui/impl-trait/issue-87450.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99073-2.rs (renamed from tests/ui/impl-trait/issue-99073-2.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99073-2.stderr (renamed from tests/ui/impl-trait/issue-99073-2.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99073.rs (renamed from tests/ui/impl-trait/issue-99073.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99073.stderr (renamed from tests/ui/impl-trait/issue-99073.stderr)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99642-2.rs (renamed from tests/ui/impl-trait/issue-99642-2.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99642.rs (renamed from tests/ui/impl-trait/issue-99642.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99914.rs (renamed from tests/ui/impl-trait/issue-99914.rs)0
-rw-r--r--tests/ui/impl-trait/issues/issue-99914.stderr (renamed from tests/ui/impl-trait/issue-99914.stderr)0
-rw-r--r--tests/ui/impl-trait/lifetimes2.rs10
-rw-r--r--tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.rs4
-rw-r--r--tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.stderr44
-rw-r--r--tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr2
-rw-r--r--tests/ui/linking/link-self-contained-malformed.no_value.stderr2
-rw-r--r--tests/ui/linking/link-self-contained-malformed.rs23
-rw-r--r--tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr2
-rw-r--r--tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr2
-rw-r--r--tests/ui/linking/link-self-contained-malformed.unknown_value.stderr2
-rw-r--r--tests/ui/linking/linker-features-malformed.invalid_modifier.stderr2
-rw-r--r--tests/ui/linking/linker-features-malformed.invalid_separator.stderr2
-rw-r--r--tests/ui/linking/linker-features-malformed.no_value.stderr2
-rw-r--r--tests/ui/linking/linker-features-malformed.rs27
-rw-r--r--tests/ui/linking/linker-features-malformed.unknown_boolean.stderr2
-rw-r--r--tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr2
-rw-r--r--tests/ui/linking/linker-features-malformed.unknown_value.stderr2
-rw-r--r--tests/ui/lint/implicit_autorefs.fixed6
-rw-r--r--tests/ui/lint/implicit_autorefs.rs6
-rw-r--r--tests/ui/lint/implicit_autorefs.stderr208
-rw-r--r--tests/ui/parser/ternary_operator.rs6
-rw-r--r--tests/ui/parser/ternary_operator.stderr22
-rw-r--r--tests/ui/traits/vtable/impossible-method.rs38
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/auxiliary/coherence_cross_crate_trait_decl.rs (renamed from tests/ui/type-alias-impl-trait/auxiliary/coherence_cross_crate_trait_decl.rs)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/auxiliary/foreign-crate.rs (renamed from tests/ui/type-alias-impl-trait/auxiliary/foreign-crate.rs)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.rs (renamed from tests/ui/impl-trait/coherence-treats-tait-ambig.rs)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.stderr (renamed from tests/ui/impl-trait/coherence-treats-tait-ambig.stderr)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence.classic.stderr (renamed from tests/ui/type-alias-impl-trait/coherence.classic.stderr)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence.next.stderr (renamed from tests/ui/type-alias-impl-trait/coherence.next.stderr)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence.rs (renamed from tests/ui/type-alias-impl-trait/coherence.rs)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.rs (renamed from tests/ui/type-alias-impl-trait/coherence_cross_crate.rs)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.stderr (renamed from tests/ui/type-alias-impl-trait/coherence_cross_crate.stderr)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.rs (renamed from tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.stderr (renamed from tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr)0
-rw-r--r--tests/ui/type-alias-impl-trait/coherence/coherence_generalization.rs (renamed from tests/ui/type-alias-impl-trait/coherence_generalization.rs)0
-rw-r--r--tests/ui/typeck/gather-locals-twice.rs7
-rw-r--r--tests/ui/typeck/gather-locals-twice.stderr20
-rw-r--r--tests/ui/where-clauses/method-suggestion-no-duplication.rs (renamed from tests/ui/impl-trait/method-suggestion-no-duplication.rs)0
-rw-r--r--tests/ui/where-clauses/method-suggestion-no-duplication.stderr (renamed from tests/ui/impl-trait/method-suggestion-no-duplication.stderr)0
107 files changed, 650 insertions, 80 deletions
diff --git a/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-88022.rs b/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-88022.rs
index 99eb92f432c..76f6aaee6dc 100644
--- a/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-88022.rs
+++ b/tests/incremental/const-generics/try_unify_abstract_const_regression_tests/issue-88022.rs
@@ -15,12 +15,14 @@ where
 
 impl<'a, T, const S: usize> Iterator for BufferIter<'a, T, S> {
     //~^ error: the trait bound
-    //~^^ error: unconstrained generic constant
+    //~| error: unconstrained generic constant
     type Item = &'a T;
 
     fn next(&mut self) -> Option<Self::Item> {
         //~^ error: the trait bound
-        //~^^ error: unconstrained generic constant
+        //~| error: unconstrained generic constant
+        //~| error: the trait bound
+        //~| error: unconstrained generic constant
         None
     }
 }
diff --git a/tests/ui/box/suggest-box-for-expr-field-issue-139631.rs b/tests/ui/box/suggest-box-for-expr-field-issue-139631.rs
new file mode 100644
index 00000000000..8d040da1ef7
--- /dev/null
+++ b/tests/ui/box/suggest-box-for-expr-field-issue-139631.rs
@@ -0,0 +1,14 @@
+struct X {
+    a: Box<u32>,
+}
+
+struct Y {
+    y: Box<u32>,
+}
+
+fn main() {
+    let a = 8;
+    let v2 = X { a }; //~ ERROR mismatched types [E0308]
+    let v3 = Y { y: a }; //~ ERROR mismatched types [E0308]
+    let v4 = Y { a }; //~ ERROR struct `Y` has no field named `a` [E0560]
+}
diff --git a/tests/ui/box/suggest-box-for-expr-field-issue-139631.stderr b/tests/ui/box/suggest-box-for-expr-field-issue-139631.stderr
new file mode 100644
index 00000000000..01bd0523a16
--- /dev/null
+++ b/tests/ui/box/suggest-box-for-expr-field-issue-139631.stderr
@@ -0,0 +1,44 @@
+error[E0308]: mismatched types
+  --> $DIR/suggest-box-for-expr-field-issue-139631.rs:11:18
+   |
+LL |     let v2 = X { a };
+   |                  ^ expected `Box<u32>`, found integer
+   |
+   = note: expected struct `Box<u32>`
+                found type `{integer}`
+   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
+help: store this in the heap by calling `Box::new`
+   |
+LL |     let v2 = X { a: Box::new(a) };
+   |                  ++++++++++++ +
+
+error[E0308]: mismatched types
+  --> $DIR/suggest-box-for-expr-field-issue-139631.rs:12:21
+   |
+LL |     let v3 = Y { y: a };
+   |                     ^ expected `Box<u32>`, found integer
+   |
+   = note: expected struct `Box<u32>`
+                found type `{integer}`
+   = note: for more on the distinction between the stack and the heap, read https://doc.rust-lang.org/book/ch15-01-box.html, https://doc.rust-lang.org/rust-by-example/std/box.html, and https://doc.rust-lang.org/std/boxed/index.html
+help: store this in the heap by calling `Box::new`
+   |
+LL |     let v3 = Y { y: Box::new(a) };
+   |                     +++++++++ +
+
+error[E0560]: struct `Y` has no field named `a`
+  --> $DIR/suggest-box-for-expr-field-issue-139631.rs:13:18
+   |
+LL |     let v4 = Y { a };
+   |                  ^ unknown field
+   |
+help: a field with a similar name exists
+   |
+LL -     let v4 = Y { a };
+LL +     let v4 = Y { y };
+   |
+
+error: aborting due to 3 previous errors
+
+Some errors have detailed explanations: E0308, E0560.
+For more information about an error, try `rustc --explain E0308`.
diff --git a/tests/ui/codegen/equal-pointers-unequal/as-cast/inline2.rs b/tests/ui/codegen/equal-pointers-unequal/as-cast/inline2.rs
index 9a1ace86e4d..5ec3c7cbdf5 100644
--- a/tests/ui/codegen/equal-pointers-unequal/as-cast/inline2.rs
+++ b/tests/ui/codegen/equal-pointers-unequal/as-cast/inline2.rs
@@ -23,7 +23,7 @@ fn main() {
         let v = 0;
         &v as *const _ as usize
     };
-    assert_eq!(a.to_string(), b.to_string());
+    assert_eq!(format!("{a}"), format!("{b}"));
     assert_eq!(format!("{}", a == b), "true");
     assert_eq!(format!("{}", cmp_in(a, b)), "true");
     assert_eq!(format!("{}", cmp(a, b)), "true");
diff --git a/tests/ui/codegen/equal-pointers-unequal/as-cast/zero.rs b/tests/ui/codegen/equal-pointers-unequal/as-cast/zero.rs
index d1aa95a9a56..731c5b67882 100644
--- a/tests/ui/codegen/equal-pointers-unequal/as-cast/zero.rs
+++ b/tests/ui/codegen/equal-pointers-unequal/as-cast/zero.rs
@@ -21,7 +21,7 @@ fn main() {
     // It's not zero, which means `a` and `b` are not equal.
     assert_ne!(i, 0);
     // But it looks like zero...
-    assert_eq!(i.to_string(), "0");
+    assert_eq!(format!("{i}"), "0");
     // ...and now it *is* zero?
     assert_eq!(i, 0);
     // So `a` and `b` are equal after all?
diff --git a/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/inline2.rs b/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/inline2.rs
index f128e1bb084..94739708ab8 100644
--- a/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/inline2.rs
+++ b/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/inline2.rs
@@ -25,7 +25,7 @@ fn main() {
         let v = 0;
         ptr::from_ref(&v).expose_provenance()
     };
-    assert_eq!(a.to_string(), b.to_string());
+    assert_eq!(format!("{a}"), format!("{b}"));
     assert_eq!(format!("{}", a == b), "true");
     assert_eq!(format!("{}", cmp_in(a, b)), "true");
     assert_eq!(format!("{}", cmp(a, b)), "true");
diff --git a/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/zero.rs b/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/zero.rs
index 7ccff8d0848..b7824f53d77 100644
--- a/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/zero.rs
+++ b/tests/ui/codegen/equal-pointers-unequal/exposed-provenance/zero.rs
@@ -23,7 +23,7 @@ fn main() {
     // It's not zero, which means `a` and `b` are not equal.
     assert_ne!(i, 0);
     // But it looks like zero...
-    assert_eq!(i.to_string(), "0");
+    assert_eq!(format!("{i}"), "0");
     // ...and now it *is* zero?
     assert_eq!(i, 0);
     // So `a` and `b` are equal after all?
diff --git a/tests/ui/codegen/equal-pointers-unequal/strict-provenance/inline2.rs b/tests/ui/codegen/equal-pointers-unequal/strict-provenance/inline2.rs
index 0414879804a..0f838af1fb1 100644
--- a/tests/ui/codegen/equal-pointers-unequal/strict-provenance/inline2.rs
+++ b/tests/ui/codegen/equal-pointers-unequal/strict-provenance/inline2.rs
@@ -25,7 +25,7 @@ fn main() {
         let v = 0;
         ptr::from_ref(&v).addr()
     };
-    assert_eq!(a.to_string(), b.to_string());
+    assert_eq!(format!("{a}"), format!("{b}"));
     assert_eq!(format!("{}", a == b), "true");
     assert_eq!(format!("{}", cmp_in(a, b)), "true");
     assert_eq!(format!("{}", cmp(a, b)), "true");
diff --git a/tests/ui/codegen/equal-pointers-unequal/strict-provenance/zero.rs b/tests/ui/codegen/equal-pointers-unequal/strict-provenance/zero.rs
index d963e45e4cd..20ed991ed3d 100644
--- a/tests/ui/codegen/equal-pointers-unequal/strict-provenance/zero.rs
+++ b/tests/ui/codegen/equal-pointers-unequal/strict-provenance/zero.rs
@@ -23,7 +23,7 @@ fn main() {
     // It's not zero, which means `a` and `b` are not equal.
     assert_ne!(i, 0);
     // But it looks like zero...
-    assert_eq!(i.to_string(), "0");
+    assert_eq!(format!("{i}"), "0");
     // ...and now it *is* zero?
     assert_eq!(i, 0);
     // So `a` and `b` are equal after all?
diff --git a/tests/ui/drop/dropck-normalize-errors.rs b/tests/ui/drop/dropck-normalize-errors.rs
new file mode 100644
index 00000000000..793122bd33d
--- /dev/null
+++ b/tests/ui/drop/dropck-normalize-errors.rs
@@ -0,0 +1,31 @@
+// Test that we don't ICE when computing the drop types for
+
+trait Decode<'a> {
+    type Decoder;
+}
+
+trait NonImplementedTrait {
+    type Assoc;
+}
+struct NonImplementedStruct;
+
+pub struct ADecoder<'a> {
+    b: <B as Decode<'a>>::Decoder,
+}
+fn make_a_decoder<'a>() -> ADecoder<'a> {
+    //~^ ERROR the trait bound
+    //~| ERROR the trait bound
+    panic!()
+}
+
+struct B;
+impl<'a> Decode<'a> for B {
+    type Decoder = BDecoder;
+    //~^ ERROR the trait bound
+}
+pub struct BDecoder {
+    non_implemented: <NonImplementedStruct as NonImplementedTrait>::Assoc,
+    //~^ ERROR the trait bound
+}
+
+fn main() {}
diff --git a/tests/ui/drop/dropck-normalize-errors.stderr b/tests/ui/drop/dropck-normalize-errors.stderr
new file mode 100644
index 00000000000..2bb5909c6b2
--- /dev/null
+++ b/tests/ui/drop/dropck-normalize-errors.stderr
@@ -0,0 +1,76 @@
+error[E0277]: the trait bound `NonImplementedStruct: NonImplementedTrait` is not satisfied in `ADecoder<'a>`
+  --> $DIR/dropck-normalize-errors.rs:15:28
+   |
+LL | fn make_a_decoder<'a>() -> ADecoder<'a> {
+   |                            ^^^^^^^^^^^^ within `ADecoder<'a>`, the trait `NonImplementedTrait` is not implemented for `NonImplementedStruct`
+   |
+help: this trait has no implementations, consider adding one
+  --> $DIR/dropck-normalize-errors.rs:7:1
+   |
+LL | trait NonImplementedTrait {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^
+note: required because it appears within the type `BDecoder`
+  --> $DIR/dropck-normalize-errors.rs:26:12
+   |
+LL | pub struct BDecoder {
+   |            ^^^^^^^^
+note: required because it appears within the type `ADecoder<'a>`
+  --> $DIR/dropck-normalize-errors.rs:12:12
+   |
+LL | pub struct ADecoder<'a> {
+   |            ^^^^^^^^
+   = note: the return type of a function must have a statically known size
+
+error[E0277]: the trait bound `NonImplementedStruct: NonImplementedTrait` is not satisfied in `BDecoder`
+  --> $DIR/dropck-normalize-errors.rs:23:20
+   |
+LL |     type Decoder = BDecoder;
+   |                    ^^^^^^^^ within `BDecoder`, the trait `NonImplementedTrait` is not implemented for `NonImplementedStruct`
+   |
+help: this trait has no implementations, consider adding one
+  --> $DIR/dropck-normalize-errors.rs:7:1
+   |
+LL | trait NonImplementedTrait {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^
+note: required because it appears within the type `BDecoder`
+  --> $DIR/dropck-normalize-errors.rs:26:12
+   |
+LL | pub struct BDecoder {
+   |            ^^^^^^^^
+note: required by a bound in `Decode::Decoder`
+  --> $DIR/dropck-normalize-errors.rs:4:5
+   |
+LL |     type Decoder;
+   |     ^^^^^^^^^^^^^ required by this bound in `Decode::Decoder`
+help: consider relaxing the implicit `Sized` restriction
+   |
+LL |     type Decoder: ?Sized;
+   |                 ++++++++
+
+error[E0277]: the trait bound `NonImplementedStruct: NonImplementedTrait` is not satisfied
+  --> $DIR/dropck-normalize-errors.rs:27:22
+   |
+LL |     non_implemented: <NonImplementedStruct as NonImplementedTrait>::Assoc,
+   |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NonImplementedTrait` is not implemented for `NonImplementedStruct`
+   |
+help: this trait has no implementations, consider adding one
+  --> $DIR/dropck-normalize-errors.rs:7:1
+   |
+LL | trait NonImplementedTrait {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0277]: the trait bound `NonImplementedStruct: NonImplementedTrait` is not satisfied
+  --> $DIR/dropck-normalize-errors.rs:15:28
+   |
+LL | fn make_a_decoder<'a>() -> ADecoder<'a> {
+   |                            ^^^^^^^^^^^^ the trait `NonImplementedTrait` is not implemented for `NonImplementedStruct`
+   |
+help: this trait has no implementations, consider adding one
+  --> $DIR/dropck-normalize-errors.rs:7:1
+   |
+LL | trait NonImplementedTrait {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/dropck/explicit-drop-bounds.bad1.stderr b/tests/ui/dropck/explicit-drop-bounds.bad1.stderr
index 12d7f5b6cd3..28d7546d0c9 100644
--- a/tests/ui/dropck/explicit-drop-bounds.bad1.stderr
+++ b/tests/ui/dropck/explicit-drop-bounds.bad1.stderr
@@ -15,6 +15,22 @@ LL |     [T; 1]: Copy, T: std::marker::Copy // But `[T; 1]: Copy` does not imply
    |                   ++++++++++++++++++++
 
 error[E0277]: the trait bound `T: Copy` is not satisfied
+  --> $DIR/explicit-drop-bounds.rs:32:5
+   |
+LL |     fn drop(&mut self) {}
+   |     ^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `T`
+   |
+note: required by a bound in `DropMe`
+  --> $DIR/explicit-drop-bounds.rs:7:18
+   |
+LL | struct DropMe<T: Copy>(T);
+   |                  ^^^^ required by this bound in `DropMe`
+help: consider further restricting type parameter `T` with trait `Copy`
+   |
+LL |     [T; 1]: Copy, T: std::marker::Copy // But `[T; 1]: Copy` does not imply `T: Copy`
+   |                   ++++++++++++++++++++
+
+error[E0277]: the trait bound `T: Copy` is not satisfied
   --> $DIR/explicit-drop-bounds.rs:32:18
    |
 LL |     fn drop(&mut self) {}
@@ -30,6 +46,6 @@ help: consider further restricting type parameter `T` with trait `Copy`
 LL |     [T; 1]: Copy, T: std::marker::Copy // But `[T; 1]: Copy` does not imply `T: Copy`
    |                   ++++++++++++++++++++
 
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/dropck/explicit-drop-bounds.bad2.stderr b/tests/ui/dropck/explicit-drop-bounds.bad2.stderr
index 5851731e834..c363676edea 100644
--- a/tests/ui/dropck/explicit-drop-bounds.bad2.stderr
+++ b/tests/ui/dropck/explicit-drop-bounds.bad2.stderr
@@ -1,5 +1,5 @@
 error[E0277]: the trait bound `T: Copy` is not satisfied
-  --> $DIR/explicit-drop-bounds.rs:37:18
+  --> $DIR/explicit-drop-bounds.rs:38:18
    |
 LL | impl<T> Drop for DropMe<T>
    |                  ^^^^^^^^^ the trait `Copy` is not implemented for `T`
@@ -15,7 +15,23 @@ LL | impl<T: std::marker::Copy> Drop for DropMe<T>
    |       +++++++++++++++++++
 
 error[E0277]: the trait bound `T: Copy` is not satisfied
-  --> $DIR/explicit-drop-bounds.rs:40:18
+  --> $DIR/explicit-drop-bounds.rs:41:5
+   |
+LL |     fn drop(&mut self) {}
+   |     ^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `T`
+   |
+note: required by a bound in `DropMe`
+  --> $DIR/explicit-drop-bounds.rs:7:18
+   |
+LL | struct DropMe<T: Copy>(T);
+   |                  ^^^^ required by this bound in `DropMe`
+help: consider restricting type parameter `T` with trait `Copy`
+   |
+LL | impl<T: std::marker::Copy> Drop for DropMe<T>
+   |       +++++++++++++++++++
+
+error[E0277]: the trait bound `T: Copy` is not satisfied
+  --> $DIR/explicit-drop-bounds.rs:41:18
    |
 LL |     fn drop(&mut self) {}
    |                  ^^^^ the trait `Copy` is not implemented for `T`
@@ -30,6 +46,6 @@ help: consider restricting type parameter `T` with trait `Copy`
 LL | impl<T: std::marker::Copy> Drop for DropMe<T>
    |       +++++++++++++++++++
 
-error: aborting due to 2 previous errors
+error: aborting due to 3 previous errors
 
 For more information about this error, try `rustc --explain E0277`.
diff --git a/tests/ui/dropck/explicit-drop-bounds.rs b/tests/ui/dropck/explicit-drop-bounds.rs
index 6ddac4d314f..cd1d89ed9db 100644
--- a/tests/ui/dropck/explicit-drop-bounds.rs
+++ b/tests/ui/dropck/explicit-drop-bounds.rs
@@ -31,6 +31,7 @@ where
 {
     fn drop(&mut self) {}
     //[bad1]~^ ERROR the trait bound `T: Copy` is not satisfied
+    //[bad1]~| ERROR the trait bound `T: Copy` is not satisfied
 }
 
 #[cfg(bad2)]
@@ -39,6 +40,7 @@ impl<T> Drop for DropMe<T>
 {
     fn drop(&mut self) {}
     //[bad2]~^ ERROR the trait bound `T: Copy` is not satisfied
+    //[bad2]~| ERROR the trait bound `T: Copy` is not satisfied
 }
 
 fn main() {}
diff --git a/tests/ui/generic-associated-types/guide-inference-in-gat-arg-deeper.rs b/tests/ui/generic-associated-types/guide-inference-in-gat-arg-deeper.rs
index 96a0f2f40bf..82ffa0221b9 100644
--- a/tests/ui/generic-associated-types/guide-inference-in-gat-arg-deeper.rs
+++ b/tests/ui/generic-associated-types/guide-inference-in-gat-arg-deeper.rs
@@ -1,5 +1,9 @@
-// Fix for <https://github.com/rust-lang/rust/issues/125196>.
 //@ check-pass
+//@ revisions: current next
+//@ ignore-compare-mode-next-solver (explicit revisions)
+//@[next] compile-flags: -Znext-solver
+
+// Fix for <https://github.com/rust-lang/rust/issues/125196>.
 
 trait Tr {
     type Gat<T>;
diff --git a/tests/ui/generic-associated-types/no-incomplete-gat-arg-inference.rs b/tests/ui/generic-associated-types/no-incomplete-gat-arg-inference.rs
new file mode 100644
index 00000000000..0c25c64224b
--- /dev/null
+++ b/tests/ui/generic-associated-types/no-incomplete-gat-arg-inference.rs
@@ -0,0 +1,33 @@
+//@ check-pass
+//@ revisions: current next
+//@ ignore-compare-mode-next-solver (explicit revisions)
+//@[next] compile-flags: -Znext-solver
+
+// Regression test for trait-system-refactor-initiative#202. We have
+// to make sure we don't constrain ambiguous GAT args when normalizing
+// via where bounds or item bounds.
+
+trait Trait {
+    type Assoc<U>;
+}
+
+fn ret<T: Trait, U>(x: U) -> <T as Trait>::Assoc<U> {
+    loop {}
+}
+
+fn where_bound<T: Trait<Assoc<u32> = u32>>() {
+    let inf = Default::default();
+    let x = ret::<T, _>(inf);
+    let _: i32 = inf;
+}
+
+trait ItemBound {
+    type Bound: Trait<Assoc<u32> = u32>;
+}
+fn item_bound<T: ItemBound>() {
+    let inf = Default::default();
+    let x = ret::<T::Bound, _>(inf);
+    let _: i32 = inf;
+}
+
+fn main() {}
diff --git a/tests/ui/impl-trait/arg-position-impl-trait-too-long.rs b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.rs
index 8ef9281c9d3..8ef9281c9d3 100644
--- a/tests/ui/impl-trait/arg-position-impl-trait-too-long.rs
+++ b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.rs
diff --git a/tests/ui/impl-trait/arg-position-impl-trait-too-long.stderr b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.stderr
index 158cfc8347c..158cfc8347c 100644
--- a/tests/ui/impl-trait/arg-position-impl-trait-too-long.stderr
+++ b/tests/ui/impl-trait/apit/arg-position-impl-trait-too-long.stderr
diff --git a/tests/ui/impl-trait/impl-generic-mismatch-ab.rs b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.rs
index 6c9b119de74..6c9b119de74 100644
--- a/tests/ui/impl-trait/impl-generic-mismatch-ab.rs
+++ b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.rs
diff --git a/tests/ui/impl-trait/impl-generic-mismatch-ab.stderr b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.stderr
index 9db996cf9ce..9db996cf9ce 100644
--- a/tests/ui/impl-trait/impl-generic-mismatch-ab.stderr
+++ b/tests/ui/impl-trait/apit/impl-generic-mismatch-ab.stderr
diff --git a/tests/ui/impl-trait/can-return-unconstrained-closure.rs b/tests/ui/impl-trait/can-return-unconstrained-closure.rs
deleted file mode 100644
index 1f8bdbc5054..00000000000
--- a/tests/ui/impl-trait/can-return-unconstrained-closure.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Test that we are special casing "outlives" for opaque types.
-//
-// The return type of a closure is not required to outlive the closure. As such
-// the following code would not compile if we used a standard outlives check
-// when checking the return type, because the return type of the closure would
-// be `&ReEmpty i32`, and we don't allow `ReEmpty` to occur in the concrete
-// type used for an opaque type.
-//
-// However, opaque types are special cased to include check all regions in the
-// concrete type against the bound, which forces the return type to be
-// `&'static i32` here.
-
-//@ build-pass (FIXME(62277): could be check-pass?)
-
-fn make_identity() -> impl Sized {
-    |x: &'static i32| x
-}
-
-fn make_identity_static() -> impl Sized + 'static {
-    |x: &'static i32| x
-}
-
-fn main() {}
diff --git a/tests/ui/impl-trait/issue-100075-2.rs b/tests/ui/impl-trait/issues/issue-100075-2.rs
index cf059af1925..cf059af1925 100644
--- a/tests/ui/impl-trait/issue-100075-2.rs
+++ b/tests/ui/impl-trait/issues/issue-100075-2.rs
diff --git a/tests/ui/impl-trait/issue-100075-2.stderr b/tests/ui/impl-trait/issues/issue-100075-2.stderr
index b3b69677507..b3b69677507 100644
--- a/tests/ui/impl-trait/issue-100075-2.stderr
+++ b/tests/ui/impl-trait/issues/issue-100075-2.stderr
diff --git a/tests/ui/impl-trait/issue-100075.rs b/tests/ui/impl-trait/issues/issue-100075.rs
index ea30abb4855..ea30abb4855 100644
--- a/tests/ui/impl-trait/issue-100075.rs
+++ b/tests/ui/impl-trait/issues/issue-100075.rs
diff --git a/tests/ui/impl-trait/issue-100075.stderr b/tests/ui/impl-trait/issues/issue-100075.stderr
index 75963489236..75963489236 100644
--- a/tests/ui/impl-trait/issue-100075.stderr
+++ b/tests/ui/impl-trait/issues/issue-100075.stderr
diff --git a/tests/ui/impl-trait/issue-100187.rs b/tests/ui/impl-trait/issues/issue-100187.rs
index ed693c824ad..ed693c824ad 100644
--- a/tests/ui/impl-trait/issue-100187.rs
+++ b/tests/ui/impl-trait/issues/issue-100187.rs
diff --git a/tests/ui/impl-trait/issue-102605.rs b/tests/ui/impl-trait/issues/issue-102605.rs
index c04dbf47599..c04dbf47599 100644
--- a/tests/ui/impl-trait/issue-102605.rs
+++ b/tests/ui/impl-trait/issues/issue-102605.rs
diff --git a/tests/ui/impl-trait/issue-102605.stderr b/tests/ui/impl-trait/issues/issue-102605.stderr
index ed6663fa61f..ed6663fa61f 100644
--- a/tests/ui/impl-trait/issue-102605.stderr
+++ b/tests/ui/impl-trait/issues/issue-102605.stderr
diff --git a/tests/ui/impl-trait/issue-103181-1.current.stderr b/tests/ui/impl-trait/issues/issue-103181-1.current.stderr
index c15b7e04c26..c15b7e04c26 100644
--- a/tests/ui/impl-trait/issue-103181-1.current.stderr
+++ b/tests/ui/impl-trait/issues/issue-103181-1.current.stderr
diff --git a/tests/ui/impl-trait/issue-103181-1.next.stderr b/tests/ui/impl-trait/issues/issue-103181-1.next.stderr
index c15b7e04c26..c15b7e04c26 100644
--- a/tests/ui/impl-trait/issue-103181-1.next.stderr
+++ b/tests/ui/impl-trait/issues/issue-103181-1.next.stderr
diff --git a/tests/ui/impl-trait/issue-103181-1.rs b/tests/ui/impl-trait/issues/issue-103181-1.rs
index fd8b72c1c75..fd8b72c1c75 100644
--- a/tests/ui/impl-trait/issue-103181-1.rs
+++ b/tests/ui/impl-trait/issues/issue-103181-1.rs
diff --git a/tests/ui/impl-trait/issue-103181-2.rs b/tests/ui/impl-trait/issues/issue-103181-2.rs
index 72729e851e3..72729e851e3 100644
--- a/tests/ui/impl-trait/issue-103181-2.rs
+++ b/tests/ui/impl-trait/issues/issue-103181-2.rs
diff --git a/tests/ui/impl-trait/issue-103181-2.stderr b/tests/ui/impl-trait/issues/issue-103181-2.stderr
index cef4449dbb9..cef4449dbb9 100644
--- a/tests/ui/impl-trait/issue-103181-2.stderr
+++ b/tests/ui/impl-trait/issues/issue-103181-2.stderr
diff --git a/tests/ui/impl-trait/issue-103599.rs b/tests/ui/impl-trait/issues/issue-103599.rs
index 62741a7454c..62741a7454c 100644
--- a/tests/ui/impl-trait/issue-103599.rs
+++ b/tests/ui/impl-trait/issues/issue-103599.rs
diff --git a/tests/ui/impl-trait/issue-103599.stderr b/tests/ui/impl-trait/issues/issue-103599.stderr
index 82038c1dceb..82038c1dceb 100644
--- a/tests/ui/impl-trait/issue-103599.stderr
+++ b/tests/ui/impl-trait/issues/issue-103599.stderr
diff --git a/tests/ui/impl-trait/issue-108591.rs b/tests/ui/impl-trait/issues/issue-108591.rs
index db1c73831ee..db1c73831ee 100644
--- a/tests/ui/impl-trait/issue-108591.rs
+++ b/tests/ui/impl-trait/issues/issue-108591.rs
diff --git a/tests/ui/impl-trait/issue-108592.rs b/tests/ui/impl-trait/issues/issue-108592.rs
index facb8be9d23..facb8be9d23 100644
--- a/tests/ui/impl-trait/issue-108592.rs
+++ b/tests/ui/impl-trait/issues/issue-108592.rs
diff --git a/tests/ui/impl-trait/issue-35668.rs b/tests/ui/impl-trait/issues/issue-35668.rs
index c970163fcab..c970163fcab 100644
--- a/tests/ui/impl-trait/issue-35668.rs
+++ b/tests/ui/impl-trait/issues/issue-35668.rs
diff --git a/tests/ui/impl-trait/issue-35668.stderr b/tests/ui/impl-trait/issues/issue-35668.stderr
index ba02d2898e9..ba02d2898e9 100644
--- a/tests/ui/impl-trait/issue-35668.stderr
+++ b/tests/ui/impl-trait/issues/issue-35668.stderr
diff --git a/tests/ui/impl-trait/issue-36792.rs b/tests/ui/impl-trait/issues/issue-36792.rs
index 6682a953fa0..6682a953fa0 100644
--- a/tests/ui/impl-trait/issue-36792.rs
+++ b/tests/ui/impl-trait/issues/issue-36792.rs
diff --git a/tests/ui/impl-trait/issue-46959.rs b/tests/ui/impl-trait/issues/issue-46959.rs
index 0acb293384c..0acb293384c 100644
--- a/tests/ui/impl-trait/issue-46959.rs
+++ b/tests/ui/impl-trait/issues/issue-46959.rs
diff --git a/tests/ui/impl-trait/issue-49556.rs b/tests/ui/impl-trait/issues/issue-49556.rs
index 82275bf12b4..82275bf12b4 100644
--- a/tests/ui/impl-trait/issue-49556.rs
+++ b/tests/ui/impl-trait/issues/issue-49556.rs
diff --git a/tests/ui/impl-trait/issue-49579.rs b/tests/ui/impl-trait/issues/issue-49579.rs
index 4b2f186e38a..4b2f186e38a 100644
--- a/tests/ui/impl-trait/issue-49579.rs
+++ b/tests/ui/impl-trait/issues/issue-49579.rs
diff --git a/tests/ui/impl-trait/issue-49685.rs b/tests/ui/impl-trait/issues/issue-49685.rs
index 82556cc242c..82556cc242c 100644
--- a/tests/ui/impl-trait/issue-49685.rs
+++ b/tests/ui/impl-trait/issues/issue-49685.rs
diff --git a/tests/ui/impl-trait/issue-51185.rs b/tests/ui/impl-trait/issues/issue-51185.rs
index ddba905835f..ddba905835f 100644
--- a/tests/ui/impl-trait/issue-51185.rs
+++ b/tests/ui/impl-trait/issues/issue-51185.rs
diff --git a/tests/ui/impl-trait/issue-54966.rs b/tests/ui/impl-trait/issues/issue-54966.rs
index 0ed3c4b3ca9..0ed3c4b3ca9 100644
--- a/tests/ui/impl-trait/issue-54966.rs
+++ b/tests/ui/impl-trait/issues/issue-54966.rs
diff --git a/tests/ui/impl-trait/issue-54966.stderr b/tests/ui/impl-trait/issues/issue-54966.stderr
index 4024c5afa80..4024c5afa80 100644
--- a/tests/ui/impl-trait/issue-54966.stderr
+++ b/tests/ui/impl-trait/issues/issue-54966.stderr
diff --git a/tests/ui/impl-trait/issue-55872-1.rs b/tests/ui/impl-trait/issues/issue-55872-1.rs
index 663cdbc2f5c..663cdbc2f5c 100644
--- a/tests/ui/impl-trait/issue-55872-1.rs
+++ b/tests/ui/impl-trait/issues/issue-55872-1.rs
diff --git a/tests/ui/impl-trait/issue-55872-1.stderr b/tests/ui/impl-trait/issues/issue-55872-1.stderr
index e048bec1b6d..e048bec1b6d 100644
--- a/tests/ui/impl-trait/issue-55872-1.stderr
+++ b/tests/ui/impl-trait/issues/issue-55872-1.stderr
diff --git a/tests/ui/impl-trait/issue-55872-2.rs b/tests/ui/impl-trait/issues/issue-55872-2.rs
index a3b2225126a..a3b2225126a 100644
--- a/tests/ui/impl-trait/issue-55872-2.rs
+++ b/tests/ui/impl-trait/issues/issue-55872-2.rs
diff --git a/tests/ui/impl-trait/issue-55872-2.stderr b/tests/ui/impl-trait/issues/issue-55872-2.stderr
index 51a7dd00ade..51a7dd00ade 100644
--- a/tests/ui/impl-trait/issue-55872-2.stderr
+++ b/tests/ui/impl-trait/issues/issue-55872-2.stderr
diff --git a/tests/ui/impl-trait/issue-55872-3.rs b/tests/ui/impl-trait/issues/issue-55872-3.rs
index 698e7f36234..698e7f36234 100644
--- a/tests/ui/impl-trait/issue-55872-3.rs
+++ b/tests/ui/impl-trait/issues/issue-55872-3.rs
diff --git a/tests/ui/impl-trait/issue-55872-3.stderr b/tests/ui/impl-trait/issues/issue-55872-3.stderr
index 3281dcc3501..3281dcc3501 100644
--- a/tests/ui/impl-trait/issue-55872-3.stderr
+++ b/tests/ui/impl-trait/issues/issue-55872-3.stderr
diff --git a/tests/ui/impl-trait/issue-55872.rs b/tests/ui/impl-trait/issues/issue-55872.rs
index b76f8182b20..b76f8182b20 100644
--- a/tests/ui/impl-trait/issue-55872.rs
+++ b/tests/ui/impl-trait/issues/issue-55872.rs
diff --git a/tests/ui/impl-trait/issue-55872.stderr b/tests/ui/impl-trait/issues/issue-55872.stderr
index 54e852f8edf..54e852f8edf 100644
--- a/tests/ui/impl-trait/issue-55872.stderr
+++ b/tests/ui/impl-trait/issues/issue-55872.stderr
diff --git a/tests/ui/impl-trait/issue-56445.rs b/tests/ui/impl-trait/issues/issue-56445.rs
index af6182d546b..af6182d546b 100644
--- a/tests/ui/impl-trait/issue-56445.rs
+++ b/tests/ui/impl-trait/issues/issue-56445.rs
diff --git a/tests/ui/impl-trait/issue-68532.rs b/tests/ui/impl-trait/issues/issue-68532.rs
index ce653ee058f..ce653ee058f 100644
--- a/tests/ui/impl-trait/issue-68532.rs
+++ b/tests/ui/impl-trait/issues/issue-68532.rs
diff --git a/tests/ui/impl-trait/issue-72911.rs b/tests/ui/impl-trait/issues/issue-72911.rs
index 63f4898f430..63f4898f430 100644
--- a/tests/ui/impl-trait/issue-72911.rs
+++ b/tests/ui/impl-trait/issues/issue-72911.rs
diff --git a/tests/ui/impl-trait/issue-72911.stderr b/tests/ui/impl-trait/issues/issue-72911.stderr
index 063b7f68dc0..063b7f68dc0 100644
--- a/tests/ui/impl-trait/issue-72911.stderr
+++ b/tests/ui/impl-trait/issues/issue-72911.stderr
diff --git a/tests/ui/impl-trait/issue-87450.rs b/tests/ui/impl-trait/issues/issue-87450.rs
index 983ef7cfbe0..983ef7cfbe0 100644
--- a/tests/ui/impl-trait/issue-87450.rs
+++ b/tests/ui/impl-trait/issues/issue-87450.rs
diff --git a/tests/ui/impl-trait/issue-87450.stderr b/tests/ui/impl-trait/issues/issue-87450.stderr
index 9567e09651d..9567e09651d 100644
--- a/tests/ui/impl-trait/issue-87450.stderr
+++ b/tests/ui/impl-trait/issues/issue-87450.stderr
diff --git a/tests/ui/impl-trait/issue-99073-2.rs b/tests/ui/impl-trait/issues/issue-99073-2.rs
index bfb8850857d..bfb8850857d 100644
--- a/tests/ui/impl-trait/issue-99073-2.rs
+++ b/tests/ui/impl-trait/issues/issue-99073-2.rs
diff --git a/tests/ui/impl-trait/issue-99073-2.stderr b/tests/ui/impl-trait/issues/issue-99073-2.stderr
index 519530b5396..519530b5396 100644
--- a/tests/ui/impl-trait/issue-99073-2.stderr
+++ b/tests/ui/impl-trait/issues/issue-99073-2.stderr
diff --git a/tests/ui/impl-trait/issue-99073.rs b/tests/ui/impl-trait/issues/issue-99073.rs
index d2a2a61a408..d2a2a61a408 100644
--- a/tests/ui/impl-trait/issue-99073.rs
+++ b/tests/ui/impl-trait/issues/issue-99073.rs
diff --git a/tests/ui/impl-trait/issue-99073.stderr b/tests/ui/impl-trait/issues/issue-99073.stderr
index 1917c1bfd6b..1917c1bfd6b 100644
--- a/tests/ui/impl-trait/issue-99073.stderr
+++ b/tests/ui/impl-trait/issues/issue-99073.stderr
diff --git a/tests/ui/impl-trait/issue-99642-2.rs b/tests/ui/impl-trait/issues/issue-99642-2.rs
index d8d367a5d35..d8d367a5d35 100644
--- a/tests/ui/impl-trait/issue-99642-2.rs
+++ b/tests/ui/impl-trait/issues/issue-99642-2.rs
diff --git a/tests/ui/impl-trait/issue-99642.rs b/tests/ui/impl-trait/issues/issue-99642.rs
index ed4786ae8d8..ed4786ae8d8 100644
--- a/tests/ui/impl-trait/issue-99642.rs
+++ b/tests/ui/impl-trait/issues/issue-99642.rs
diff --git a/tests/ui/impl-trait/issue-99914.rs b/tests/ui/impl-trait/issues/issue-99914.rs
index a7858740f09..a7858740f09 100644
--- a/tests/ui/impl-trait/issue-99914.rs
+++ b/tests/ui/impl-trait/issues/issue-99914.rs
diff --git a/tests/ui/impl-trait/issue-99914.stderr b/tests/ui/impl-trait/issues/issue-99914.stderr
index 8adb211745a..8adb211745a 100644
--- a/tests/ui/impl-trait/issue-99914.stderr
+++ b/tests/ui/impl-trait/issues/issue-99914.stderr
diff --git a/tests/ui/impl-trait/lifetimes2.rs b/tests/ui/impl-trait/lifetimes2.rs
deleted file mode 100644
index facf2f75bc4..00000000000
--- a/tests/ui/impl-trait/lifetimes2.rs
+++ /dev/null
@@ -1,10 +0,0 @@
-//@ check-pass
-
-pub fn keys<'a>(x: &'a Result<u32, u32>) -> impl std::fmt::Debug + 'a {
-    match x {
-        Ok(map) => Ok(map),
-        Err(map) => Err(map),
-    }
-}
-
-fn main() {}
diff --git a/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.rs b/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.rs
index 6380449124f..3b297a9a662 100644
--- a/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.rs
+++ b/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.rs
@@ -30,7 +30,8 @@ where
     type Output = B;
     extern "rust-call" fn call_once(mut self, a: A) -> Self::Output {
     //~^ ERROR functions with the "rust-call" ABI must take a single non-self tuple argument
-        self.call_mut(a)
+    //~| ERROR type parameter to bare `FnOnce` trait must be a tuple
+    self.call_mut(a)
         //~^ ERROR `A` is not a tuple
     }
 }
@@ -43,6 +44,7 @@ where
 {
     extern "rust-call" fn call_mut(&mut self, a: A) -> Self::Output {
     //~^ ERROR functions with the "rust-call" ABI must take a single non-self tuple argument
+    //~| ERROR type parameter to bare `FnOnce` trait must be a tuple
         self.cache.get(&a).map(|a| a.clone()).unwrap_or_else(|| {
             let b = (self.fun)(self, a.clone());
             self.cache.insert(a, b.clone());
diff --git a/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.stderr b/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.stderr
index 3b051ef9a88..32a564e466b 100644
--- a/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.stderr
+++ b/tests/ui/layout/rust-call-abi-not-a-tuple-ice-81974.stderr
@@ -11,8 +11,21 @@ help: consider further restricting type parameter `A` with unstable trait `Tuple
 LL |     A: Eq + Hash + Clone + std::marker::Tuple,
    |                          ++++++++++++++++++++
 
+error[E0059]: type parameter to bare `FnOnce` trait must be a tuple
+  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:31:5
+   |
+LL |     extern "rust-call" fn call_once(mut self, a: A) -> Self::Output {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Tuple` is not implemented for `A`
+   |
+note: required by a bound in `FnOnce`
+  --> $SRC_DIR/core/src/ops/function.rs:LL:COL
+help: consider further restricting type parameter `A` with unstable trait `Tuple`
+   |
+LL |     A: Eq + Hash + Clone + std::marker::Tuple,
+   |                          ++++++++++++++++++++
+
 error[E0059]: type parameter to bare `FnMut` trait must be a tuple
-  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:38:12
+  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:39:12
    |
 LL | impl<A, B> FnMut<A> for CachedFun<A, B>
    |            ^^^^^^^^ the trait `Tuple` is not implemented for `A`
@@ -24,6 +37,19 @@ help: consider further restricting type parameter `A` with unstable trait `Tuple
 LL |     A: Eq + Hash + Clone + std::marker::Tuple,
    |                          ++++++++++++++++++++
 
+error[E0059]: type parameter to bare `FnOnce` trait must be a tuple
+  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:45:5
+   |
+LL |     extern "rust-call" fn call_mut(&mut self, a: A) -> Self::Output {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Tuple` is not implemented for `A`
+   |
+note: required by a bound in `FnOnce`
+  --> $SRC_DIR/core/src/ops/function.rs:LL:COL
+help: consider further restricting type parameter `A` with unstable trait `Tuple`
+   |
+LL |     A: Eq + Hash + Clone + std::marker::Tuple,
+   |                          ++++++++++++++++++++
+
 error[E0277]: functions with the "rust-call" ABI must take a single non-self tuple argument
   --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:31:5
    |
@@ -36,7 +62,7 @@ LL |     A: Eq + Hash + Clone + std::marker::Tuple,
    |                          ++++++++++++++++++++
 
 error[E0277]: functions with the "rust-call" ABI must take a single non-self tuple argument
-  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:44:5
+  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:45:5
    |
 LL |     extern "rust-call" fn call_mut(&mut self, a: A) -> Self::Output {
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Tuple` is not implemented for `A`
@@ -47,12 +73,12 @@ LL |     A: Eq + Hash + Clone + std::marker::Tuple,
    |                          ++++++++++++++++++++
 
 error[E0277]: `A` is not a tuple
-  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:33:23
+  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:34:19
    |
-LL |         self.call_mut(a)
-   |              -------- ^ the trait `Tuple` is not implemented for `A`
-   |              |
-   |              required by a bound introduced by this call
+LL |     self.call_mut(a)
+   |          -------- ^ the trait `Tuple` is not implemented for `A`
+   |          |
+   |          required by a bound introduced by this call
    |
 note: required by a bound in `call_mut`
   --> $SRC_DIR/core/src/ops/function.rs:LL:COL
@@ -62,7 +88,7 @@ LL |     A: Eq + Hash + Clone + std::marker::Tuple,
    |                          ++++++++++++++++++++
 
 error[E0277]: `i32` is not a tuple
-  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:57:26
+  --> $DIR/rust-call-abi-not-a-tuple-ice-81974.rs:59:26
    |
 LL |     cachedcoso.call_once(1);
    |                --------- ^ the trait `Tuple` is not implemented for `i32`
@@ -76,7 +102,7 @@ help: use a unary tuple instead
 LL |     cachedcoso.call_once((1,));
    |                          + ++
 
-error: aborting due to 6 previous errors
+error: aborting due to 8 previous errors
 
 Some errors have detailed explanations: E0059, E0277.
 For more information about an error, try `rustc --explain E0059`.
diff --git a/tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr b/tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr
new file mode 100644
index 00000000000..28e2c74fda2
--- /dev/null
+++ b/tests/ui/linking/link-self-contained-malformed.invalid_modifier.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `*lld` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected
+
diff --git a/tests/ui/linking/link-self-contained-malformed.no_value.stderr b/tests/ui/linking/link-self-contained-malformed.no_value.stderr
new file mode 100644
index 00000000000..dd8e8af074b
--- /dev/null
+++ b/tests/ui/linking/link-self-contained-malformed.no_value.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected
+
diff --git a/tests/ui/linking/link-self-contained-malformed.rs b/tests/ui/linking/link-self-contained-malformed.rs
new file mode 100644
index 00000000000..8ccb82eee27
--- /dev/null
+++ b/tests/ui/linking/link-self-contained-malformed.rs
@@ -0,0 +1,23 @@
+//! Check that malformed `-Clink-self-contained` invocations are properly rejected.
+
+//@ revisions: no_value
+//@[no_value] compile-flags: -Clink-self-contained=
+//[no_value]~? ERROR incorrect value `` for codegen option `link-self-contained`
+
+//@ revisions: invalid_modifier
+//@[invalid_modifier] compile-flags: -Clink-self-contained=*lld
+//[invalid_modifier]~? ERROR incorrect value `*lld` for codegen option `link-self-contained`
+
+//@ revisions: unknown_value
+//@[unknown_value] compile-flags: -Clink-self-contained=unknown
+//[unknown_value]~? ERROR incorrect value `unknown` for codegen option `link-self-contained`
+
+//@ revisions: unknown_modifier_value
+//@[unknown_modifier_value] compile-flags: -Clink-self-contained=-unknown
+//[unknown_modifier_value]~? ERROR incorrect value `-unknown` for codegen option `link-self-contained`
+
+//@ revisions: unknown_boolean
+//@[unknown_boolean] compile-flags: -Clink-self-contained=maybe
+//[unknown_boolean]~? ERROR incorrect value `maybe` for codegen option `link-self-contained`
+
+fn main() {}
diff --git a/tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr b/tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr
new file mode 100644
index 00000000000..7924074d1bf
--- /dev/null
+++ b/tests/ui/linking/link-self-contained-malformed.unknown_boolean.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `maybe` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected
+
diff --git a/tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr b/tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr
new file mode 100644
index 00000000000..2dc58c0f7e8
--- /dev/null
+++ b/tests/ui/linking/link-self-contained-malformed.unknown_modifier_value.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `-unknown` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected
+
diff --git a/tests/ui/linking/link-self-contained-malformed.unknown_value.stderr b/tests/ui/linking/link-self-contained-malformed.unknown_value.stderr
new file mode 100644
index 00000000000..ce4c44299cd
--- /dev/null
+++ b/tests/ui/linking/link-self-contained-malformed.unknown_value.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `unknown` for codegen option `link-self-contained` - one of: `y`, `yes`, `on`, `n`, `no`, `off`, or a list of enabled (`+` prefix) and disabled (`-` prefix) components: `crto`, `libc`, `unwind`, `linker`, `sanitizers`, `mingw` was expected
+
diff --git a/tests/ui/linking/linker-features-malformed.invalid_modifier.stderr b/tests/ui/linking/linker-features-malformed.invalid_modifier.stderr
new file mode 100644
index 00000000000..909b277089f
--- /dev/null
+++ b/tests/ui/linking/linker-features-malformed.invalid_modifier.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `*lld` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected
+
diff --git a/tests/ui/linking/linker-features-malformed.invalid_separator.stderr b/tests/ui/linking/linker-features-malformed.invalid_separator.stderr
new file mode 100644
index 00000000000..0f84898a774
--- /dev/null
+++ b/tests/ui/linking/linker-features-malformed.invalid_separator.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `-lld@+lld` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected
+
diff --git a/tests/ui/linking/linker-features-malformed.no_value.stderr b/tests/ui/linking/linker-features-malformed.no_value.stderr
new file mode 100644
index 00000000000..e93a4e79bb1
--- /dev/null
+++ b/tests/ui/linking/linker-features-malformed.no_value.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected
+
diff --git a/tests/ui/linking/linker-features-malformed.rs b/tests/ui/linking/linker-features-malformed.rs
new file mode 100644
index 00000000000..0bdcfa39920
--- /dev/null
+++ b/tests/ui/linking/linker-features-malformed.rs
@@ -0,0 +1,27 @@
+//! Check that malformed `-Zlinker-features` flags are properly rejected.
+
+//@ revisions: no_value
+//@[no_value] compile-flags: -Zlinker-features=
+//[no_value]~? ERROR incorrect value `` for unstable option `linker-features`
+
+//@ revisions: invalid_modifier
+//@[invalid_modifier] compile-flags: -Zlinker-features=*lld
+//[invalid_modifier]~? ERROR incorrect value `*lld` for unstable option `linker-features`
+
+//@ revisions: unknown_value
+//@[unknown_value] compile-flags: -Zlinker-features=unknown
+//[unknown_value]~? ERROR incorrect value `unknown` for unstable option `linker-features`
+
+//@ revisions: unknown_modifier_value
+//@[unknown_modifier_value] compile-flags: -Zlinker-features=-unknown
+//[unknown_modifier_value]~? ERROR incorrect value `-unknown` for unstable option `linker-features`
+
+//@ revisions: unknown_boolean
+//@[unknown_boolean] compile-flags: -Zlinker-features=maybe
+//[unknown_boolean]~? ERROR incorrect value `maybe` for unstable option `linker-features`
+
+//@ revisions: invalid_separator
+//@[invalid_separator] compile-flags: -Zlinker-features=-lld@+lld
+//[invalid_separator]~? ERROR incorrect value `-lld@+lld` for unstable option `linker-features`
+
+fn main() {}
diff --git a/tests/ui/linking/linker-features-malformed.unknown_boolean.stderr b/tests/ui/linking/linker-features-malformed.unknown_boolean.stderr
new file mode 100644
index 00000000000..865738d0ccc
--- /dev/null
+++ b/tests/ui/linking/linker-features-malformed.unknown_boolean.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `maybe` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected
+
diff --git a/tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr b/tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr
new file mode 100644
index 00000000000..03b9620ca26
--- /dev/null
+++ b/tests/ui/linking/linker-features-malformed.unknown_modifier_value.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `-unknown` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected
+
diff --git a/tests/ui/linking/linker-features-malformed.unknown_value.stderr b/tests/ui/linking/linker-features-malformed.unknown_value.stderr
new file mode 100644
index 00000000000..566632a3df3
--- /dev/null
+++ b/tests/ui/linking/linker-features-malformed.unknown_value.stderr
@@ -0,0 +1,2 @@
+error: incorrect value `unknown` for unstable option `linker-features` - a list of enabled (`+` prefix) and disabled (`-` prefix) features: `lld` was expected
+
diff --git a/tests/ui/lint/implicit_autorefs.fixed b/tests/ui/lint/implicit_autorefs.fixed
index 96a617b20c9..454dfe76372 100644
--- a/tests/ui/lint/implicit_autorefs.fixed
+++ b/tests/ui/lint/implicit_autorefs.fixed
@@ -96,4 +96,10 @@ unsafe fn test_string(ptr: *mut String) {
     //~^ WARN implicit autoref
 }
 
+unsafe fn slice_ptr_len_because_of_msrv<T>(slice: *const [T]) {
+    let _ = (&(&(*slice))[..]).len();
+    //~^ WARN implicit autoref
+    //~^^ WARN implicit autoref
+}
+
 fn main() {}
diff --git a/tests/ui/lint/implicit_autorefs.rs b/tests/ui/lint/implicit_autorefs.rs
index 61dd0ac50ce..507d6536828 100644
--- a/tests/ui/lint/implicit_autorefs.rs
+++ b/tests/ui/lint/implicit_autorefs.rs
@@ -96,4 +96,10 @@ unsafe fn test_string(ptr: *mut String) {
     //~^ WARN implicit autoref
 }
 
+unsafe fn slice_ptr_len_because_of_msrv<T>(slice: *const [T]) {
+    let _ = (*slice)[..].len();
+    //~^ WARN implicit autoref
+    //~^^ WARN implicit autoref
+}
+
 fn main() {}
diff --git a/tests/ui/lint/implicit_autorefs.stderr b/tests/ui/lint/implicit_autorefs.stderr
index 6dd1ac65ada..80ba8ae2fd2 100644
--- a/tests/ui/lint/implicit_autorefs.stderr
+++ b/tests/ui/lint/implicit_autorefs.stderr
@@ -2,9 +2,16 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:10:13
    |
 LL |     let _ = (*ptr)[..16];
-   |             ^^^^^^^^^^^^
+   |             ^^---^^^^^^^
+   |               |
+   |               this raw pointer has type `*const [u8]`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[u8]`
+  --> $DIR/implicit_autorefs.rs:10:13
+   |
+LL |     let _ = (*ptr)[..16];
+   |             ^^^^^^
    = note: `#[warn(dangerous_implicit_autorefs)]` on by default
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
@@ -15,9 +22,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:19:13
    |
 LL |     let l = (*ptr).field.len();
-   |             ^^^^^^^^^^^^^^^^^^
+   |             ^^---^^^^^^^^^^^^^
+   |               |
+   |               this raw pointer has type `*const Test`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[u8]`
+  --> $DIR/implicit_autorefs.rs:19:13
+   |
+LL |     let l = (*ptr).field.len();
+   |             ^^^^^^^^^^^^
+note: method calls to `len` require a reference
+  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let l = (&(*ptr).field).len();
@@ -27,9 +43,16 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:22:16
    |
 LL |     &raw const (*ptr).field[..l - 1]
-   |                ^^^^^^^^^^^^^^^^^^^^^
+   |                ^^---^^^^^^^^^^^^^^^^
+   |                  |
+   |                  this raw pointer has type `*const Test`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[u8]`
+  --> $DIR/implicit_autorefs.rs:22:16
+   |
+LL |     &raw const (*ptr).field[..l - 1]
+   |                ^^^^^^^^^^^^
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     &raw const (&(*ptr).field)[..l - 1]
@@ -39,9 +62,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:27:9
    |
 LL |     _ = (*a)[0].len();
-   |         ^^^^^^^^^^^^^
+   |         ^^-^^^^^^^^^^
+   |           |
+   |           this raw pointer has type `*mut [String]`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&String`
+  --> $DIR/implicit_autorefs.rs:27:9
+   |
+LL |     _ = (*a)[0].len();
+   |         ^^^^^^^
+note: method calls to `len` require a reference
+  --> $SRC_DIR/alloc/src/string.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     _ = (&(*a)[0]).len();
@@ -51,9 +83,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:30:9
    |
 LL |     _ = (*a)[..1][0].len();
-   |         ^^^^^^^^^^^^^^^^^^
+   |         ^^-^^^^^^^^^^^^^^^
+   |           |
+   |           this raw pointer has type `*mut [String]`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&String`
+  --> $DIR/implicit_autorefs.rs:30:9
+   |
+LL |     _ = (*a)[..1][0].len();
+   |         ^^^^^^^^^^^^
+note: method calls to `len` require a reference
+  --> $SRC_DIR/alloc/src/string.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     _ = (&(*a)[..1][0]).len();
@@ -63,9 +104,16 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:30:9
    |
 LL |     _ = (*a)[..1][0].len();
-   |         ^^^^^^^^^
+   |         ^^-^^^^^^
+   |           |
+   |           this raw pointer has type `*mut [String]`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[String]`
+  --> $DIR/implicit_autorefs.rs:30:9
+   |
+LL |     _ = (*a)[..1][0].len();
+   |         ^^^^
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     _ = (&(*a))[..1][0].len();
@@ -75,9 +123,12 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:36:13
    |
 LL |     let _ = (*ptr).field;
-   |             ^^^^^^^^^^^^
+   |             ^^---^^^^^^^
+   |               |
+   |               this raw pointer has type `*const ManuallyDrop<Test>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+   = note: references are created through calls to explicit `Deref(Mut)::deref(_mut)` implementations
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&(*ptr)).field;
@@ -87,9 +138,12 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:38:24
    |
 LL |     let _ = &raw const (*ptr).field;
-   |                        ^^^^^^^^^^^^
+   |                        ^^---^^^^^^^
+   |                          |
+   |                          this raw pointer has type `*const ManuallyDrop<Test>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+   = note: references are created through calls to explicit `Deref(Mut)::deref(_mut)` implementations
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = &raw const (&(*ptr)).field;
@@ -99,9 +153,12 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:43:13
    |
 LL |     let _ = (*ptr).field;
-   |             ^^^^^^^^^^^^
+   |             ^^---^^^^^^^
+   |               |
+   |               this raw pointer has type `*mut ManuallyDrop<Test>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+   = note: references are created through calls to explicit `Deref(Mut)::deref(_mut)` implementations
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&(*ptr)).field;
@@ -111,9 +168,12 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:48:13
    |
 LL |     let _ = (*ptr).field;
-   |             ^^^^^^^^^^^^
+   |             ^^---^^^^^^^
+   |               |
+   |               this raw pointer has type `*const ManuallyDrop<ManuallyDrop<Test>>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+   = note: references are created through calls to explicit `Deref(Mut)::deref(_mut)` implementations
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&(*ptr)).field;
@@ -123,9 +183,16 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:62:26
    |
 LL |     let _p: *const i32 = &raw const **w;
-   |                          ^^^^^^^^^^^^^^
+   |                          ^^^^^^^^^^^^^-
+   |                                       |
+   |                                       this raw pointer has type `*const W<i32>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&W<i32>`
+  --> $DIR/implicit_autorefs.rs:62:38
+   |
+LL |     let _p: *const i32 = &raw const **w;
+   |                                      ^^
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _p: *const i32 = &raw const *(&**w);
@@ -135,9 +202,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:72:14
    |
 LL |     unsafe { (*ptr).field.len() }
-   |              ^^^^^^^^^^^^^^^^^^
+   |              ^^---^^^^^^^^^^^^^
+   |                |
+   |                this raw pointer has type `*const Test2`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[u8]`
+  --> $DIR/implicit_autorefs.rs:72:14
+   |
+LL |     unsafe { (*ptr).field.len() }
+   |              ^^^^^^^^^^^^
+note: method calls to `len` require a reference
+  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     unsafe { (&(*ptr).field).len() }
@@ -147,9 +223,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:82:13
    |
 LL |     let _ = (*ptr).get(0);
-   |             ^^^^^^^^^^^^^
+   |             ^^---^^^^^^^^
+   |               |
+   |               this raw pointer has type `*mut Vec<u8>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[u8]`
+  --> $DIR/implicit_autorefs.rs:82:13
+   |
+LL |     let _ = (*ptr).get(0);
+   |             ^^^^^^
+note: method calls to `get` require a reference
+  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&(*ptr)).get(0);
@@ -159,9 +244,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:84:13
    |
 LL |     let _ = (*ptr).get_unchecked(0);
-   |             ^^^^^^^^^^^^^^^^^^^^^^^
+   |             ^^---^^^^^^^^^^^^^^^^^^
+   |               |
+   |               this raw pointer has type `*mut Vec<u8>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[u8]`
+  --> $DIR/implicit_autorefs.rs:84:13
+   |
+LL |     let _ = (*ptr).get_unchecked(0);
+   |             ^^^^^^
+note: method calls to `get_unchecked` require a reference
+  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&(*ptr)).get_unchecked(0);
@@ -171,9 +265,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:86:13
    |
 LL |     let _ = (*ptr).get_mut(0);
-   |             ^^^^^^^^^^^^^^^^^
+   |             ^^---^^^^^^^^^^^^
+   |               |
+   |               this raw pointer has type `*mut Vec<u8>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&mut [u8]`
+  --> $DIR/implicit_autorefs.rs:86:13
+   |
+LL |     let _ = (*ptr).get_mut(0);
+   |             ^^^^^^
+note: method calls to `get_mut` require a reference
+  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&mut (*ptr)).get_mut(0);
@@ -183,9 +286,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:88:13
    |
 LL |     let _ = (*ptr).get_unchecked_mut(0);
-   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |             ^^---^^^^^^^^^^^^^^^^^^^^^^
+   |               |
+   |               this raw pointer has type `*mut Vec<u8>`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&mut [u8]`
+  --> $DIR/implicit_autorefs.rs:88:13
+   |
+LL |     let _ = (*ptr).get_unchecked_mut(0);
+   |             ^^^^^^
+note: method calls to `get_unchecked_mut` require a reference
+  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&mut (*ptr)).get_unchecked_mut(0);
@@ -195,9 +307,18 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:93:13
    |
 LL |     let _ = (*ptr).len();
-   |             ^^^^^^^^^^^^
+   |             ^^---^^^^^^^
+   |               |
+   |               this raw pointer has type `*mut String`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&String`
+  --> $DIR/implicit_autorefs.rs:93:13
+   |
+LL |     let _ = (*ptr).len();
+   |             ^^^^^^
+note: method calls to `len` require a reference
+  --> $SRC_DIR/alloc/src/string.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&(*ptr)).len();
@@ -207,13 +328,62 @@ warning: implicit autoref creates a reference to the dereference of a raw pointe
   --> $DIR/implicit_autorefs.rs:95:13
    |
 LL |     let _ = (*ptr).is_empty();
-   |             ^^^^^^^^^^^^^^^^^
+   |             ^^---^^^^^^^^^^^^
+   |               |
+   |               this raw pointer has type `*mut String`
    |
    = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&String`
+  --> $DIR/implicit_autorefs.rs:95:13
+   |
+LL |     let _ = (*ptr).is_empty();
+   |             ^^^^^^
+note: method calls to `is_empty` require a reference
+  --> $SRC_DIR/alloc/src/string.rs:LL:COL
 help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
    |
 LL |     let _ = (&(*ptr)).is_empty();
    |             ++      +
 
-warning: 18 warnings emitted
+warning: implicit autoref creates a reference to the dereference of a raw pointer
+  --> $DIR/implicit_autorefs.rs:100:13
+   |
+LL |     let _ = (*slice)[..].len();
+   |             ^^-----^^^^^^^^^^^
+   |               |
+   |               this raw pointer has type `*const [T]`
+   |
+   = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[T]`
+  --> $DIR/implicit_autorefs.rs:100:13
+   |
+LL |     let _ = (*slice)[..].len();
+   |             ^^^^^^^^^^^^
+note: method calls to `len` require a reference
+  --> $SRC_DIR/core/src/slice/mod.rs:LL:COL
+help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
+   |
+LL |     let _ = (&(*slice)[..]).len();
+   |             ++            +
+
+warning: implicit autoref creates a reference to the dereference of a raw pointer
+  --> $DIR/implicit_autorefs.rs:100:13
+   |
+LL |     let _ = (*slice)[..].len();
+   |             ^^-----^^^^^
+   |               |
+   |               this raw pointer has type `*const [T]`
+   |
+   = note: creating a reference requires the pointer target to be valid and imposes aliasing requirements
+note: autoref is being applied to this expression, resulting in: `&[T]`
+  --> $DIR/implicit_autorefs.rs:100:13
+   |
+LL |     let _ = (*slice)[..].len();
+   |             ^^^^^^^^
+help: try using a raw pointer method instead; or if this reference is intentional, make it explicit
+   |
+LL |     let _ = (&(*slice))[..].len();
+   |             ++        +
+
+warning: 20 warnings emitted
 
diff --git a/tests/ui/parser/ternary_operator.rs b/tests/ui/parser/ternary_operator.rs
index c8810781b3d..08f6a4b2a24 100644
--- a/tests/ui/parser/ternary_operator.rs
+++ b/tests/ui/parser/ternary_operator.rs
@@ -28,3 +28,9 @@ fn main() {
     //~| HELP use an `if-else` expression instead
     //~| ERROR expected one of `.`, `;`, `?`, `else`, or an operator, found `:`
 }
+
+fn expr(a: u64, b: u64) -> u64 {
+    a > b ? a : b
+    //~^ ERROR Rust has no ternary operator
+    //~| HELP use an `if-else` expression instead
+}
diff --git a/tests/ui/parser/ternary_operator.stderr b/tests/ui/parser/ternary_operator.stderr
index e12a7ff3718..d4a633e5e55 100644
--- a/tests/ui/parser/ternary_operator.stderr
+++ b/tests/ui/parser/ternary_operator.stderr
@@ -2,7 +2,7 @@ error: Rust has no ternary operator
   --> $DIR/ternary_operator.rs:2:19
    |
 LL |     let x = 5 > 2 ? true : false;
-   |                   ^^^^^^^^^^^^^^^
+   |                   ^^^^^^^^^^^^^^
    |
    = help: use an `if-else` expression instead
 
@@ -10,7 +10,7 @@ error: Rust has no ternary operator
   --> $DIR/ternary_operator.rs:8:19
    |
 LL |     let x = 5 > 2 ? { true } : { false };
-   |                   ^^^^^^^^^^^^^^^^^^^^^^^
+   |                   ^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: use an `if-else` expression instead
 
@@ -18,7 +18,7 @@ error: Rust has no ternary operator
   --> $DIR/ternary_operator.rs:14:19
    |
 LL |     let x = 5 > 2 ? f32::MAX : f32::MIN;
-   |                   ^^^^^^^^^^^^^^^^^^^^^^
+   |                   ^^^^^^^^^^^^^^^^^^^^^
    |
    = help: use an `if-else` expression instead
 
@@ -38,9 +38,21 @@ error: Rust has no ternary operator
   --> $DIR/ternary_operator.rs:26:19
    |
 LL |     let x = 5 > 2 ? { let x = vec![]: Vec<u16>; x } : { false };
-   |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = help: use an `if-else` expression instead
 
-error: aborting due to 6 previous errors
+error: Rust has no ternary operator
+  --> $DIR/ternary_operator.rs:33:5
+   |
+LL |     a > b ? a : b
+   |     ^^^^^^^^^^^^^
+   |
+help: use an `if-else` expression instead
+   |
+LL -     a > b ? a : b
+LL +     if a > b { a } else { b }
+   |
+
+error: aborting due to 7 previous errors
 
diff --git a/tests/ui/traits/vtable/impossible-method.rs b/tests/ui/traits/vtable/impossible-method.rs
new file mode 100644
index 00000000000..ff7910cfac8
--- /dev/null
+++ b/tests/ui/traits/vtable/impossible-method.rs
@@ -0,0 +1,38 @@
+//@ run-pass
+//@ revisions: current next
+//@ ignore-compare-mode-next-solver (explicit revisions)
+//@[next] compile-flags: -Znext-solver
+
+trait Id {
+    type This<'a>;
+}
+impl<T> Id for T {
+    type This<'a> = T;
+}
+
+trait Trait<T> {}
+impl<T: Id> Trait<for<'a> fn(T::This<'a>)> for T {}
+
+trait Method<T: Id> {
+    fn call_me(&self)
+    where
+        T: Trait<for<'a> fn(T::This<'a>)>;
+}
+
+impl<T, U> Method<U> for T {
+    fn call_me(&self) {
+        println!("method was reachable");
+    }
+}
+
+fn generic<T: Id>(x: &dyn Method<T>) {
+    // Proving `T: Trait<for<'a> fn(T::This<'a>)>` holds.
+    x.call_me();
+}
+
+fn main() {
+    // Proving `u32: Trait<fn(u32)>` fails due to incompleteness.
+    // We don't add the method to the vtable of `dyn Method`, so
+    // calling it causes UB.
+    generic::<u32>(&());
+}
diff --git a/tests/ui/type-alias-impl-trait/auxiliary/coherence_cross_crate_trait_decl.rs b/tests/ui/type-alias-impl-trait/coherence/auxiliary/coherence_cross_crate_trait_decl.rs
index 712ed55438e..712ed55438e 100644
--- a/tests/ui/type-alias-impl-trait/auxiliary/coherence_cross_crate_trait_decl.rs
+++ b/tests/ui/type-alias-impl-trait/coherence/auxiliary/coherence_cross_crate_trait_decl.rs
diff --git a/tests/ui/type-alias-impl-trait/auxiliary/foreign-crate.rs b/tests/ui/type-alias-impl-trait/coherence/auxiliary/foreign-crate.rs
index 52802dd8fbb..52802dd8fbb 100644
--- a/tests/ui/type-alias-impl-trait/auxiliary/foreign-crate.rs
+++ b/tests/ui/type-alias-impl-trait/coherence/auxiliary/foreign-crate.rs
diff --git a/tests/ui/impl-trait/coherence-treats-tait-ambig.rs b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.rs
index 54d68afc31f..54d68afc31f 100644
--- a/tests/ui/impl-trait/coherence-treats-tait-ambig.rs
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.rs
diff --git a/tests/ui/impl-trait/coherence-treats-tait-ambig.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.stderr
index 618bef1f271..618bef1f271 100644
--- a/tests/ui/impl-trait/coherence-treats-tait-ambig.stderr
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence-treats-tait-ambig.stderr
diff --git a/tests/ui/type-alias-impl-trait/coherence.classic.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence.classic.stderr
index e99d4636b13..e99d4636b13 100644
--- a/tests/ui/type-alias-impl-trait/coherence.classic.stderr
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence.classic.stderr
diff --git a/tests/ui/type-alias-impl-trait/coherence.next.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence.next.stderr
index 6d14594e33a..6d14594e33a 100644
--- a/tests/ui/type-alias-impl-trait/coherence.next.stderr
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence.next.stderr
diff --git a/tests/ui/type-alias-impl-trait/coherence.rs b/tests/ui/type-alias-impl-trait/coherence/coherence.rs
index eb27c270804..eb27c270804 100644
--- a/tests/ui/type-alias-impl-trait/coherence.rs
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence.rs
diff --git a/tests/ui/type-alias-impl-trait/coherence_cross_crate.rs b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.rs
index 73f13f22bee..73f13f22bee 100644
--- a/tests/ui/type-alias-impl-trait/coherence_cross_crate.rs
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.rs
diff --git a/tests/ui/type-alias-impl-trait/coherence_cross_crate.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.stderr
index 6b251cfac73..6b251cfac73 100644
--- a/tests/ui/type-alias-impl-trait/coherence_cross_crate.stderr
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence_cross_crate.stderr
diff --git a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.rs
index a7e251b1ab9..a7e251b1ab9 100644
--- a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.rs
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.rs
diff --git a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.stderr
index ef170101b44..ef170101b44 100644
--- a/tests/ui/type-alias-impl-trait/coherence_different_hidden_ty.stderr
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence_different_hidden_ty.stderr
diff --git a/tests/ui/type-alias-impl-trait/coherence_generalization.rs b/tests/ui/type-alias-impl-trait/coherence/coherence_generalization.rs
index 46cde115b7f..46cde115b7f 100644
--- a/tests/ui/type-alias-impl-trait/coherence_generalization.rs
+++ b/tests/ui/type-alias-impl-trait/coherence/coherence_generalization.rs
diff --git a/tests/ui/typeck/gather-locals-twice.rs b/tests/ui/typeck/gather-locals-twice.rs
new file mode 100644
index 00000000000..e9351146f45
--- /dev/null
+++ b/tests/ui/typeck/gather-locals-twice.rs
@@ -0,0 +1,7 @@
+// Regression test for <https://github.com/rust-lang/rust/issues/140785>.
+
+fn main() {
+    () += { let x; };
+    //~^ ERROR binary assignment operation `+=` cannot be applied to type `()`
+    //~| ERROR invalid left-hand side of assignment
+}
diff --git a/tests/ui/typeck/gather-locals-twice.stderr b/tests/ui/typeck/gather-locals-twice.stderr
new file mode 100644
index 00000000000..7598ef8e7ea
--- /dev/null
+++ b/tests/ui/typeck/gather-locals-twice.stderr
@@ -0,0 +1,20 @@
+error[E0368]: binary assignment operation `+=` cannot be applied to type `()`
+  --> $DIR/gather-locals-twice.rs:4:5
+   |
+LL |     () += { let x; };
+   |     --^^^^^^^^^^^^^^
+   |     |
+   |     cannot use `+=` on type `()`
+
+error[E0067]: invalid left-hand side of assignment
+  --> $DIR/gather-locals-twice.rs:4:8
+   |
+LL |     () += { let x; };
+   |     -- ^^
+   |     |
+   |     cannot assign to this expression
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0067, E0368.
+For more information about an error, try `rustc --explain E0067`.
diff --git a/tests/ui/impl-trait/method-suggestion-no-duplication.rs b/tests/ui/where-clauses/method-suggestion-no-duplication.rs
index c5c966a959a..c5c966a959a 100644
--- a/tests/ui/impl-trait/method-suggestion-no-duplication.rs
+++ b/tests/ui/where-clauses/method-suggestion-no-duplication.rs
diff --git a/tests/ui/impl-trait/method-suggestion-no-duplication.stderr b/tests/ui/where-clauses/method-suggestion-no-duplication.stderr
index 6bc57f89467..6bc57f89467 100644
--- a/tests/ui/impl-trait/method-suggestion-no-duplication.stderr
+++ b/tests/ui/where-clauses/method-suggestion-no-duplication.stderr