about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2020-01-26 06:37:19 +0900
committerGitHub <noreply@github.com>2020-01-26 06:37:19 +0900
commite7c557b2958883d5f1927780cc2f4708efe6a00c (patch)
tree1331cea78a16e455af5ac739ad85a8d9cb32c7d3
parent88429fb5e250d61e60578e3ed5de4ac2d56567a8 (diff)
parent1605276cc2ff3319a7f360b389be1a53d0d5751c (diff)
downloadrust-e7c557b2958883d5f1927780cc2f4708efe6a00c.tar.gz
rust-e7c557b2958883d5f1927780cc2f4708efe6a00c.zip
Rollup merge of #68498 - Aaron1011:tait-regression-tests, r=Centril
Add some type-alias-impl-trait regression tests

Fixes #57611
Fixes #57807
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs27
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr23
-rw-r--r--src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs31
3 files changed, 81 insertions, 0 deletions
diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs
new file mode 100644
index 00000000000..1c2051e7eae
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs
@@ -0,0 +1,27 @@
+// Regression test for issue #57611
+// Ensures that we don't ICE
+// FIXME: This should compile, but it currently doesn't
+
+#![feature(trait_alias)]
+#![feature(type_alias_impl_trait)]
+
+trait Foo {
+    type Bar: Baz<Self, Self>;
+
+    fn bar(&self) -> Self::Bar;
+}
+
+struct X;
+
+impl Foo for X {
+    type Bar = impl Baz<Self, Self>; //~ ERROR type mismatch in closure arguments
+    //~^ ERROR type mismatch resolving
+
+    fn bar(&self) -> Self::Bar {
+        |x| x
+    }
+}
+
+trait Baz<A, B> = Fn(&A) -> &B;
+
+fn main() {}
diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr
new file mode 100644
index 00000000000..f648b7bfc99
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr
@@ -0,0 +1,23 @@
+error[E0631]: type mismatch in closure arguments
+  --> $DIR/issue-57611-trait-alias.rs:17:5
+   |
+LL |     type Bar = impl Baz<Self, Self>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected signature of `for<'r> fn(&'r X) -> _`
+...
+LL |         |x| x
+   |         ----- found signature of `fn(_) -> _`
+   |
+   = note: the return type of a function must have a statically known size
+
+error[E0271]: type mismatch resolving `for<'r> <[closure@$DIR/issue-57611-trait-alias.rs:21:9: 21:14] as std::ops::FnOnce<(&'r X,)>>::Output == &'r X`
+  --> $DIR/issue-57611-trait-alias.rs:17:5
+   |
+LL |     type Bar = impl Baz<Self, Self>;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected bound lifetime parameter, found concrete lifetime
+   |
+   = note: the return type of a function must have a statically known size
+
+error: aborting due to 2 previous errors
+
+Some errors have detailed explanations: E0271, E0631.
+For more information about an error, try `rustc --explain E0271`.
diff --git a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs
new file mode 100644
index 00000000000..fcab2c7db26
--- /dev/null
+++ b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs
@@ -0,0 +1,31 @@
+// Regression test for issue #57807 - ensure
+// that we properly unify associated types within
+// a type alias impl trait
+// check-pass
+#![feature(type_alias_impl_trait)]
+
+trait Bar {
+    type A;
+}
+
+impl Bar for () {
+    type A = ();
+}
+
+trait Foo {
+    type A;
+    type B: Bar<A = Self::A>;
+
+    fn foo() -> Self::B;
+}
+
+impl Foo for () {
+    type A = ();
+    type B = impl Bar<A = Self::A>;
+
+    fn foo() -> Self::B {
+        ()
+    }
+}
+
+fn main() {}