summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-05-15 22:16:50 +0000
committerbors <bors@rust-lang.org>2023-05-15 22:16:50 +0000
commitea54255501221b26bf2242c09cbd0924dc8ee1ea (patch)
tree0090044836e6c0d9045d273e084a7e1879f2b4ce /tests
parentce5919fcef67103098219e1868f741e56fc90963 (diff)
parenta2678e15e559bb7d779fd1e04d73d8ae3b9093e3 (diff)
downloadrust-ea54255501221b26bf2242c09cbd0924dc8ee1ea.tar.gz
Auto merge of #111221 - compiler-errors:yeet-generalizer, r=lcnr
Combine three generalizer implementations Fixes #111092 Fixes #109505 This code is a bit delicate and there were subtle changes between them, so I'll leave inline comments where further inspection is needed. Regarding this comment from #109813 -- "add tests triggering all codepaths: at least the combine and the const generalizer", can't really do that now, and I don't really know how we'd get a higher-ranked const error since non-lifetime binders doesn't *really* support `for<const ..>` (it errors out when you try to use it). r? `@lcnr`
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/traits/non_lifetime_binders/universe-error1.rs18
-rw-r--r--tests/ui/traits/non_lifetime_binders/universe-error1.stderr27
2 files changed, 45 insertions, 0 deletions
diff --git a/tests/ui/traits/non_lifetime_binders/universe-error1.rs b/tests/ui/traits/non_lifetime_binders/universe-error1.rs
new file mode 100644
index 00000000000..eadee6b711e
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/universe-error1.rs
@@ -0,0 +1,18 @@
+#![feature(non_lifetime_binders)]
+//~^ WARN the feature `non_lifetime_binders` is incomplete
+
+trait Other<U: ?Sized> {}
+
+impl<U: ?Sized> Other<U> for U {}
+
+#[rustfmt::skip]
+fn foo<U: ?Sized>()
+where
+ for<T> T: Other<U> {}
+
+fn bar() {
+ foo::<_>();
+ //~^ ERROR the trait bound `T: Other<_>` is not satisfied
+}
+
+fn main() {}
diff --git a/tests/ui/traits/non_lifetime_binders/universe-error1.stderr b/tests/ui/traits/non_lifetime_binders/universe-error1.stderr
new file mode 100644
index 00000000000..bfcad72e352
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/universe-error1.stderr
@@ -0,0 +1,27 @@
+warning: the feature `non_lifetime_binders` is incomplete and may not be safe to use and/or cause compiler crashes
+ --> $DIR/universe-error1.rs:1:12
+ |
+LL | #![feature(non_lifetime_binders)]
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: see issue #108185 <https://github.com/rust-lang/rust/issues/108185> for more information
+ = note: `#[warn(incomplete_features)]` on by default
+
+error[E0277]: the trait bound `T: Other<_>` is not satisfied
+ --> $DIR/universe-error1.rs:14:11
+ |
+LL | foo::<_>();
+ | ^ the trait `Other<_>` is not implemented for `T`
+ |
+note: required by a bound in `foo`
+ --> $DIR/universe-error1.rs:11:15
+ |
+LL | fn foo<U: ?Sized>()
+ | --- required by a bound in this function
+LL | where
+LL | for<T> T: Other<U> {}
+ | ^^^^^^^^ required by this bound in `foo`
+
+error: aborting due to previous error; 1 warning emitted
+
+For more information about this error, try `rustc --explain E0277`.