summaryrefslogtreecommitdiffstats
path: root/src/test/ui/traits/principal-less-objects.rs
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/traits/principal-less-objects.rs
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/traits/principal-less-objects.rs')
-rw-r--r--src/test/ui/traits/principal-less-objects.rs42
1 files changed, 0 insertions, 42 deletions
diff --git a/src/test/ui/traits/principal-less-objects.rs b/src/test/ui/traits/principal-less-objects.rs
deleted file mode 100644
index 62bad0d7d..000000000
--- a/src/test/ui/traits/principal-less-objects.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-// run-pass
-// Check that trait objects without a principal codegen properly.
-
-use std::sync::atomic::{AtomicUsize, Ordering};
-use std::mem;
-
-// Array is to make sure the size is not exactly pointer-size, so
-// we can be sure we are measuring the right size in the
-// `size_of_val` test.
-struct SetOnDrop<'a>(&'a AtomicUsize, #[allow(unused_tuple_struct_fields)] [u8; 64]);
-impl<'a> Drop for SetOnDrop<'a> {
- fn drop(&mut self) {
- self.0.store(self.0.load(Ordering::Relaxed) + 1, Ordering::Relaxed);
- }
-}
-
-trait TypeEq<V: ?Sized> {}
-impl<T: ?Sized> TypeEq<T> for T {}
-fn assert_types_eq<U: ?Sized, V: ?Sized>() where U: TypeEq<V> {}
-
-fn main() {
- // Check that different ways of writing the same type are equal.
- assert_types_eq::<dyn Sync, dyn Sync + Sync>();
- assert_types_eq::<dyn Sync + Send, dyn Send + Sync>();
- assert_types_eq::<dyn Sync + Send + Sync, dyn Send + Sync>();
-
- // Check that codegen works.
- //
- // Using `AtomicUsize` here because `Cell<u32>` is not `Sync`, and
- // so can't be made into a `Box<dyn Sync>`.
- let c = AtomicUsize::new(0);
- {
- let d: Box<dyn Sync> = Box::new(SetOnDrop(&c, [0; 64]));
-
- assert_eq!(mem::size_of_val(&*d),
- mem::size_of::<SetOnDrop>());
- assert_eq!(mem::align_of_val(&*d),
- mem::align_of::<SetOnDrop>());
- assert_eq!(c.load(Ordering::Relaxed), 0);
- }
- assert_eq!(c.load(Ordering::Relaxed), 1);
-}