about summary refs log tree commit diff
path: root/tests/ui/impl-trait/trait_upcasting.rs
diff options
context:
space:
mode:
authorOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2024-05-24 14:17:54 +0000
committerOli Scherer <git-spam-no-reply9815368754983@oli-obk.de>2024-06-19 08:28:31 +0000
commitcbadf786bc482baf467f601d03a074000c422914 (patch)
tree4164c88c9e771a72639f909c176fc6b80608d61e /tests/ui/impl-trait/trait_upcasting.rs
parent4dcb70b8cf3a12bb3bf0ef38cd05e6ab3720402c (diff)
downloadrust-cbadf786bc482baf467f601d03a074000c422914.tar.gz
rust-cbadf786bc482baf467f601d03a074000c422914.zip
Add tests
Diffstat (limited to 'tests/ui/impl-trait/trait_upcasting.rs')
-rw-r--r--tests/ui/impl-trait/trait_upcasting.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/ui/impl-trait/trait_upcasting.rs b/tests/ui/impl-trait/trait_upcasting.rs
new file mode 100644
index 00000000000..cb3c17e87b4
--- /dev/null
+++ b/tests/ui/impl-trait/trait_upcasting.rs
@@ -0,0 +1,26 @@
+//! Test that we allow unsizing `Trait<Concrete>` to `Trait<Opaque>` and vice versa
+
+trait Trait<T> {}
+
+impl<T, U> Trait<T> for U {}
+
+fn hello() -> &'static (dyn Trait<impl Sized> + Send) {
+    if false {
+        let x = hello();
+        let _: &'static dyn Trait<()> = x;
+        //~^ ERROR: mismatched types
+    }
+    todo!()
+}
+
+fn bye() -> &'static dyn Trait<impl Sized> {
+    if false {
+        let mut x = bye();
+        let y: &'static (dyn Trait<()> + Send) = &();
+        x = y;
+        //~^ ERROR: mismatched types
+    }
+    todo!()
+}
+
+fn main() {}