about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <jtitor@2k36.org>2021-11-09 22:02:23 +0900
committerGitHub <noreply@github.com>2021-11-09 22:02:23 +0900
commitc2f095a37bd566be1f3fdb5b586025c724f25684 (patch)
tree8970cebc7925c576146a79893b4c16f03611c6b9
parent6e39d27a8200d65922b8eecb2d2bfbaab99f88fb (diff)
parentebd401bc36ebc5530cc6cadbddd9c6e79e13d989 (diff)
downloadrust-c2f095a37bd566be1f3fdb5b586025c724f25684.tar.gz
rust-c2f095a37bd566be1f3fdb5b586025c724f25684.zip
Rollup merge of #90678 - JohnTitor:add-some-gats-tests, r=jackh726
Add some GATs-related regression tests

Closes #88595, closes #90014
r? `@jackh726`
-rw-r--r--src/test/ui/generic-associated-types/issue-88595.rs24
-rw-r--r--src/test/ui/generic-associated-types/issue-88595.stderr40
-rw-r--r--src/test/ui/generic-associated-types/issue-90014.rs22
-rw-r--r--src/test/ui/generic-associated-types/issue-90014.stderr15
4 files changed, 101 insertions, 0 deletions
diff --git a/src/test/ui/generic-associated-types/issue-88595.rs b/src/test/ui/generic-associated-types/issue-88595.rs
new file mode 100644
index 00000000000..e397390783f
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-88595.rs
@@ -0,0 +1,24 @@
+#![feature(generic_associated_types)]
+#![feature(type_alias_impl_trait)]
+
+fn main() {}
+
+trait A<'a> {
+    type B<'b>: Clone
+    // FIXME(generic_associated_types): Remove one of the below bounds
+    // https://github.com/rust-lang/rust/pull/90678#discussion_r744976085
+    where
+        'a: 'b, Self: 'a, Self: 'b;
+
+    fn a(&'a self) -> Self::B<'a>;
+}
+
+struct C;
+
+impl<'a> A<'a> for C {
+    type B<'b> = impl Clone;
+    //~^ ERROR: lifetime bound not satisfied
+    //~| ERROR: could not find defining uses
+
+    fn a(&'a self) -> Self::B<'a> {} //~ ERROR: non-defining opaque type use in defining scope
+}
diff --git a/src/test/ui/generic-associated-types/issue-88595.stderr b/src/test/ui/generic-associated-types/issue-88595.stderr
new file mode 100644
index 00000000000..1948f82d0c9
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-88595.stderr
@@ -0,0 +1,40 @@
+error[E0478]: lifetime bound not satisfied
+  --> $DIR/issue-88595.rs:19:5
+   |
+LL |     type B<'b> = impl Clone;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: lifetime parameter instantiated with the lifetime `'a` as defined here
+  --> $DIR/issue-88595.rs:18:6
+   |
+LL | impl<'a> A<'a> for C {
+   |      ^^
+note: but lifetime parameter must outlive the lifetime `'b` as defined here
+  --> $DIR/issue-88595.rs:19:12
+   |
+LL |     type B<'b> = impl Clone;
+   |            ^^
+
+error: non-defining opaque type use in defining scope
+  --> $DIR/issue-88595.rs:23:23
+   |
+LL |     fn a(&'a self) -> Self::B<'a> {}
+   |                       ^^^^^^^^^^^
+   |
+note: lifetime used multiple times
+  --> $DIR/issue-88595.rs:18:6
+   |
+LL | impl<'a> A<'a> for C {
+   |      ^^
+LL |     type B<'b> = impl Clone;
+   |            ^^
+
+error: could not find defining uses
+  --> $DIR/issue-88595.rs:19:18
+   |
+LL |     type B<'b> = impl Clone;
+   |                  ^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0478`.
diff --git a/src/test/ui/generic-associated-types/issue-90014.rs b/src/test/ui/generic-associated-types/issue-90014.rs
new file mode 100644
index 00000000000..f110b069383
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-90014.rs
@@ -0,0 +1,22 @@
+// edition:2018
+
+#![feature(generic_associated_types)]
+#![feature(type_alias_impl_trait)]
+
+use std::future::Future;
+
+trait MakeFut {
+    type Fut<'a> where Self: 'a;
+    fn make_fut<'a>(&'a self) -> Self::Fut<'a>;
+}
+
+impl MakeFut for &'_ mut () {
+    type Fut<'a> = impl Future<Output = ()>;
+    //~^ ERROR: the type `&mut ()` does not fulfill the required lifetime
+
+    fn make_fut<'a>(&'a self) -> Self::Fut<'a> {
+        async { () }
+    }
+}
+
+fn main() {}
diff --git a/src/test/ui/generic-associated-types/issue-90014.stderr b/src/test/ui/generic-associated-types/issue-90014.stderr
new file mode 100644
index 00000000000..125d817e351
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-90014.stderr
@@ -0,0 +1,15 @@
+error[E0477]: the type `&mut ()` does not fulfill the required lifetime
+  --> $DIR/issue-90014.rs:14:5
+   |
+LL |     type Fut<'a> = impl Future<Output = ()>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: type must outlive the lifetime `'a` as defined here
+  --> $DIR/issue-90014.rs:14:14
+   |
+LL |     type Fut<'a> = impl Future<Output = ()>;
+   |              ^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0477`.