about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/ui/associated-type-bounds/no-gat-position.rs18
-rw-r--r--tests/ui/associated-type-bounds/no-gat-position.stderr9
-rw-r--r--tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.rs26
-rw-r--r--tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.stderr34
4 files changed, 87 insertions, 0 deletions
diff --git a/tests/ui/associated-type-bounds/no-gat-position.rs b/tests/ui/associated-type-bounds/no-gat-position.rs
new file mode 100644
index 00000000000..01740e6242e
--- /dev/null
+++ b/tests/ui/associated-type-bounds/no-gat-position.rs
@@ -0,0 +1,18 @@
+#![feature(associated_type_bounds)]
+
+// Test for <https://github.com/rust-lang/rust/issues/119857>.
+
+pub trait Iter {
+    type Item<'a>: 'a where Self: 'a;
+
+    fn next<'a>(&'a mut self) -> Option<Self::Item<'a, As1: Copy>>;
+    //~^ ERROR associated type bindings are not allowed here
+}
+
+impl Iter for () {
+    type Item<'a> = &'a mut [()];
+
+    fn next<'a>(&'a mut self) -> Option<Self::Item<'a>> { None }
+}
+
+fn main() {}
diff --git a/tests/ui/associated-type-bounds/no-gat-position.stderr b/tests/ui/associated-type-bounds/no-gat-position.stderr
new file mode 100644
index 00000000000..5692b2c7d09
--- /dev/null
+++ b/tests/ui/associated-type-bounds/no-gat-position.stderr
@@ -0,0 +1,9 @@
+error[E0229]: associated type bindings are not allowed here
+  --> $DIR/no-gat-position.rs:8:56
+   |
+LL |     fn next<'a>(&'a mut self) -> Option<Self::Item<'a, As1: Copy>>;
+   |                                                        ^^^^^^^^^ associated type not allowed here
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0229`.
diff --git a/tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.rs b/tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.rs
new file mode 100644
index 00000000000..fc64381b961
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.rs
@@ -0,0 +1,26 @@
+#![feature(generic_const_exprs)]
+//~^ WARN the feature `generic_const_exprs` is incomplete
+#![feature(non_lifetime_binders)]
+//~^ WARN the feature `non_lifetime_binders` is incomplete
+
+// Test for <https://github.com/rust-lang/rust/issues/115497>,
+// which originally relied on associated_type_bounds, but was
+// minimized away from that.
+
+trait TraitA {
+    type AsA;
+}
+trait TraitB {
+    type AsB;
+}
+trait TraitC {}
+
+fn foo<T>()
+where
+    for<const N: u8 = { T::A }> T: TraitA<AsA = impl TraitB<AsB = impl TraitC>>,
+    //~^ ERROR defaults for generic parameters are not allowed in `for<...>` binders
+    //~| ERROR `impl Trait` is not allowed in bounds
+{
+}
+
+fn main() {}
diff --git a/tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.stderr b/tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.stderr
new file mode 100644
index 00000000000..a4a79413a9b
--- /dev/null
+++ b/tests/ui/traits/non_lifetime_binders/bad-suggestion-on-missing-assoc.stderr
@@ -0,0 +1,34 @@
+warning: the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/bad-suggestion-on-missing-assoc.rs:1:12
+   |
+LL | #![feature(generic_const_exprs)]
+   |            ^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #76560 <https://github.com/rust-lang/rust/issues/76560> for more information
+   = note: `#[warn(incomplete_features)]` on by default
+
+warning: the feature `non_lifetime_binders` is incomplete and may not be safe to use and/or cause compiler crashes
+  --> $DIR/bad-suggestion-on-missing-assoc.rs:3:12
+   |
+LL | #![feature(non_lifetime_binders)]
+   |            ^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: see issue #108185 <https://github.com/rust-lang/rust/issues/108185> for more information
+
+error: defaults for generic parameters are not allowed in `for<...>` binders
+  --> $DIR/bad-suggestion-on-missing-assoc.rs:20:9
+   |
+LL |     for<const N: u8 = { T::A }> T: TraitA<AsA = impl TraitB<AsB = impl TraitC>>,
+   |         ^^^^^^^^^^^^^^^^^^^^^^
+
+error[E0562]: `impl Trait` is not allowed in bounds
+  --> $DIR/bad-suggestion-on-missing-assoc.rs:20:49
+   |
+LL |     for<const N: u8 = { T::A }> T: TraitA<AsA = impl TraitB<AsB = impl TraitC>>,
+   |                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: `impl Trait` is only allowed in arguments and return types of functions and methods
+
+error: aborting due to 2 previous errors; 2 warnings emitted
+
+For more information about this error, try `rustc --explain E0562`.