about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2021-04-06 18:17:50 -0700
committerEsteban Küber <esteban@kuber.com.ar>2021-04-06 18:17:50 -0700
commit18cf44b61b2bb5387fcf3011bce0cd63cd41d51f (patch)
tree8c1aaf1fcb0f2f8c64669c76c8e3e315561a4c9f /src/test
parentb8dda53e69636c744086956d502462a34823fcc4 (diff)
downloadrust-18cf44b61b2bb5387fcf3011bce0cd63cd41d51f.tar.gz
rust-18cf44b61b2bb5387fcf3011bce0cd63cd41d51f.zip
Do not ICE when closure is involved in TAIT
Fix #83613.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/traits/alias/issue-83613.rs13
-rw-r--r--src/test/ui/traits/alias/issue-83613.stderr23
2 files changed, 36 insertions, 0 deletions
diff --git a/src/test/ui/traits/alias/issue-83613.rs b/src/test/ui/traits/alias/issue-83613.rs
new file mode 100644
index 00000000000..146920ac685
--- /dev/null
+++ b/src/test/ui/traits/alias/issue-83613.rs
@@ -0,0 +1,13 @@
+#![feature(min_type_alias_impl_trait)]
+trait OpaqueTrait {}
+impl<T> OpaqueTrait for T {}
+type OpaqueType = impl OpaqueTrait;
+fn mk_opaque() -> OpaqueType {
+    || 0
+}
+trait AnotherTrait {}
+impl<T: Send> AnotherTrait for T {}
+impl AnotherTrait for OpaqueType {}
+//~^ ERROR conflicting implementations of trait `AnotherTrait` for type `impl OpaqueTrait`
+//~| ERROR cannot implement trait on type alias impl trait
+fn main() {}
diff --git a/src/test/ui/traits/alias/issue-83613.stderr b/src/test/ui/traits/alias/issue-83613.stderr
new file mode 100644
index 00000000000..0ab39ae6672
--- /dev/null
+++ b/src/test/ui/traits/alias/issue-83613.stderr
@@ -0,0 +1,23 @@
+error[E0119]: conflicting implementations of trait `AnotherTrait` for type `impl OpaqueTrait`
+  --> $DIR/issue-83613.rs:10:1
+   |
+LL | impl<T: Send> AnotherTrait for T {}
+   | -------------------------------- first implementation here
+LL | impl AnotherTrait for OpaqueType {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `impl OpaqueTrait`
+
+error: cannot implement trait on type alias impl trait
+  --> $DIR/issue-83613.rs:10:1
+   |
+LL | impl AnotherTrait for OpaqueType {}
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: type alias impl trait defined here
+  --> $DIR/issue-83613.rs:4:19
+   |
+LL | type OpaqueType = impl OpaqueTrait;
+   |                   ^^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0119`.