summaryrefslogtreecommitdiffstats
path: root/src/test/ui/packed/packed-struct-drop-aligned.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui/packed/packed-struct-drop-aligned.rs
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/packed/packed-struct-drop-aligned.rs')
-rw-r--r--src/test/ui/packed/packed-struct-drop-aligned.rs57
1 files changed, 0 insertions, 57 deletions
diff --git a/src/test/ui/packed/packed-struct-drop-aligned.rs b/src/test/ui/packed/packed-struct-drop-aligned.rs
deleted file mode 100644
index 9f9f41e25..000000000
--- a/src/test/ui/packed/packed-struct-drop-aligned.rs
+++ /dev/null
@@ -1,57 +0,0 @@
-// run-pass
-#![feature(generators)]
-#![feature(generator_trait)]
-use std::cell::Cell;
-use std::mem;
-use std::ops::Generator;
-use std::pin::Pin;
-
-struct Aligned<'a> {
- drop_count: &'a Cell<usize>
-}
-
-#[inline(never)]
-fn check_align(ptr: *const Aligned) {
- assert_eq!(ptr as usize % mem::align_of::<Aligned>(),
- 0);
-}
-
-impl<'a> Drop for Aligned<'a> {
- fn drop(&mut self) {
- check_align(self);
- self.drop_count.set(self.drop_count.get() + 1);
- }
-}
-
-#[repr(transparent)]
-struct NotCopy(#[allow(unused_tuple_struct_fields)] u8);
-
-#[repr(packed)]
-struct Packed<'a>(NotCopy, Aligned<'a>);
-
-fn main() {
- let drop_count = &Cell::new(0);
- {
- let mut p = Packed(NotCopy(0), Aligned { drop_count });
- p.1 = Aligned { drop_count };
- assert_eq!(drop_count.get(), 1);
- }
- assert_eq!(drop_count.get(), 2);
-
- let drop_count = &Cell::new(0);
- let mut g = || {
- let mut p = Packed(NotCopy(0), Aligned { drop_count });
- let _ = &p;
- p.1 = Aligned { drop_count };
- assert_eq!(drop_count.get(), 1);
- // Test that a generator drop function moves a value from a packed
- // struct to a separate local before dropping it. We move out the
- // first field to generate and open drop for the second field.
- drop(p.0);
- yield;
- };
- Pin::new(&mut g).resume(());
- assert_eq!(drop_count.get(), 1);
- drop(g);
- assert_eq!(drop_count.get(), 2);
-}