about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/ui/associated-type-bounds/resolution-failure-building-vtable-representation-ice-90691.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/ui/associated-type-bounds/resolution-failure-building-vtable-representation-ice-90691.rs b/tests/ui/associated-type-bounds/resolution-failure-building-vtable-representation-ice-90691.rs
new file mode 100644
index 00000000000..33776809a79
--- /dev/null
+++ b/tests/ui/associated-type-bounds/resolution-failure-building-vtable-representation-ice-90691.rs
@@ -0,0 +1,41 @@
+// ICE #90691 Encountered error `Unimplemented` selecting  ...
+//@ build-pass
+
+trait TError: std::fmt::Debug {}
+impl TError for () {}
+
+trait SuperTrait {
+    type Error;
+}
+
+trait Trait: SuperTrait<Error: TError> {}
+
+impl<T> Trait for T
+where
+    T: SuperTrait,
+    <T as SuperTrait>::Error: TError,
+{
+}
+
+struct SomeTrait<S>(S);
+struct BoxedTrait(Box<dyn Trait<Error = ()>>);
+
+impl<S: 'static> From<SomeTrait<S>> for BoxedTrait {
+    fn from(other: SomeTrait<S>) -> Self {
+        Self(Box::new(other))
+    }
+}
+
+impl<S> SuperTrait for SomeTrait<S> {
+    type Error = ();
+}
+
+impl From<()> for BoxedTrait {
+    fn from(c: ()) -> Self {
+        Self::from(SomeTrait(c))
+    }
+}
+
+fn main() {
+    let _: BoxedTrait = ().into();
+}