summaryrefslogtreecommitdiffstats
path: root/tests/ui/traits/trait-upcasting/illegal-upcast-from-impl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/traits/trait-upcasting/illegal-upcast-from-impl.rs')
-rw-r--r--tests/ui/traits/trait-upcasting/illegal-upcast-from-impl.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/ui/traits/trait-upcasting/illegal-upcast-from-impl.rs b/tests/ui/traits/trait-upcasting/illegal-upcast-from-impl.rs
new file mode 100644
index 000000000..774474281
--- /dev/null
+++ b/tests/ui/traits/trait-upcasting/illegal-upcast-from-impl.rs
@@ -0,0 +1,23 @@
+// revisions: current next
+//[next] compile-flags: -Ztrait-solver=next
+
+#![feature(trait_upcasting)]
+
+trait Super {
+ type Assoc;
+}
+
+trait Sub: Super {}
+
+impl<T: ?Sized> Super for T {
+ type Assoc = i32;
+}
+
+fn illegal(x: &dyn Sub<Assoc = ()>) -> &dyn Super<Assoc = i32> { x }
+//~^ ERROR mismatched types
+
+// Want to make sure that we can't "upcast" to a supertrait that has a different
+// associated type that is instead provided by a blanket impl (and doesn't come
+// from the object bounds).
+
+fn main() {}