summaryrefslogtreecommitdiffstats
path: root/src/test/ui/rfc-2027-object-safe-for-dispatch
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /src/test/ui/rfc-2027-object-safe-for-dispatch
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/rfc-2027-object-safe-for-dispatch')
-rw-r--r--src/test/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs23
-rw-r--r--src/test/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs66
-rw-r--r--src/test/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs37
3 files changed, 0 insertions, 126 deletions
diff --git a/src/test/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs b/src/test/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs
deleted file mode 100644
index fa04f4b12..000000000
--- a/src/test/ui/rfc-2027-object-safe-for-dispatch/downcast-unsafe-trait-objects.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-// Check that we if we get ahold of an object unsafe trait
-// object with auto traits and lifetimes, we can downcast it
-//
-// check-pass
-
-#![feature(object_safe_for_dispatch)]
-
-trait Trait: Sized {}
-
-fn downcast_auto(t: &(dyn Trait + Send)) -> &dyn Trait {
- t
-}
-
-fn downcast_lifetime<'a, 'b, 't>(t: &'a (dyn Trait + 't))
- -> &'b (dyn Trait + 't)
-where
- 'a: 'b,
- 't: 'a + 'b,
-{
- t
-}
-
-fn main() {}
diff --git a/src/test/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs b/src/test/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs
deleted file mode 100644
index 721890db4..000000000
--- a/src/test/ui/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs
+++ /dev/null
@@ -1,66 +0,0 @@
-// Check that we can manually implement an object-unsafe trait for its trait object.
-
-// run-pass
-
-#![feature(object_safe_for_dispatch)]
-
-trait Bad {
- fn stat() -> char {
- 'A'
- }
- fn virt(&self) -> char {
- 'B'
- }
- fn indirect(&self) -> char {
- Self::stat()
- }
-}
-
-trait Good {
- fn good_virt(&self) -> char {
- panic!()
- }
- fn good_indirect(&self) -> char {
- panic!()
- }
-}
-
-impl<'a> Bad for dyn Bad + 'a {
- fn stat() -> char {
- 'C'
- }
- fn virt(&self) -> char {
- 'D'
- }
-}
-
-struct Struct {}
-
-impl Bad for Struct {}
-
-impl Good for Struct {}
-
-fn main() {
- let s = Struct {};
-
- let mut res = String::new();
-
- // Directly call static.
- res.push(Struct::stat()); // "A"
- res.push(<dyn Bad>::stat()); // "AC"
-
- let good: &dyn Good = &s;
-
- // These look similar enough...
- let bad = unsafe { std::mem::transmute::<&dyn Good, &dyn Bad>(good) };
-
- // Call virtual.
- res.push(s.virt()); // "ACB"
- res.push(bad.virt()); // "ACBD"
-
- // Indirectly call static.
- res.push(s.indirect()); // "ACBDA"
- res.push(bad.indirect()); // "ACBDAC"
-
- assert_eq!(&res, "ACBDAC");
-}
diff --git a/src/test/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs b/src/test/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs
deleted file mode 100644
index df97d2c13..000000000
--- a/src/test/ui/rfc-2027-object-safe-for-dispatch/static-dispatch-unsafe-object.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-// Check that we can statically dispatch methods for object
-// unsafe trait objects, directly and indirectly
-//
-// check-pass
-
-#![feature(object_safe_for_dispatch)]
-
-trait Statics {
- fn plain() {}
- fn generic<T>() {}
-}
-
-trait Trait: Sized {}
-
-impl<'a> Statics for dyn Trait + 'a {}
-
-fn static_poly<T: Statics + ?Sized>() {
- T::plain();
- T::generic::<usize>();
-}
-
-fn inferred_poly<T: Statics + ?Sized>(t: &T) {
- static_poly::<T>();
- T::plain();
- T::generic::<usize>();
-}
-
-fn call(t: &dyn Trait) {
- static_poly::<dyn Trait>();
- inferred_poly(t);
-}
-
-fn main() {
- static_poly::<dyn Trait>();
- <dyn Trait>::plain();
- <dyn Trait>::generic::<usize>()
-}