diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:03 +0000 |
commit | 64d98f8ee037282c35007b64c2649055c56af1db (patch) | |
tree | 5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /src/test/ui/async-await/async-fn-size-moved-locals.rs | |
parent | Adding debian version 1.67.1+dfsg1-1. (diff) | |
download | rustc-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/async-await/async-fn-size-moved-locals.rs')
-rw-r--r-- | src/test/ui/async-await/async-fn-size-moved-locals.rs | 118 |
1 files changed, 0 insertions, 118 deletions
diff --git a/src/test/ui/async-await/async-fn-size-moved-locals.rs b/src/test/ui/async-await/async-fn-size-moved-locals.rs deleted file mode 100644 index 79b7239f3..000000000 --- a/src/test/ui/async-await/async-fn-size-moved-locals.rs +++ /dev/null @@ -1,118 +0,0 @@ -// Test that we don't duplicate storage for futures moved around in .await, and -// for futures moved into other futures. -// -// The exact sizes can change by a few bytes (we'd like to know when they do). -// What we don't want to see is the wrong multiple of 1024 (the size of BigFut) -// being reflected in the size. -// -// See issue #59123 for a full explanation. - -// needs-unwind Size of Futures change on panic=abort -// run-pass - -// edition:2018 - -use std::future::Future; -use std::pin::Pin; -use std::task::{Context, Poll}; - -const BIG_FUT_SIZE: usize = 1024; -struct BigFut(#[allow(unused_tuple_struct_fields)] [u8; BIG_FUT_SIZE]); - -impl BigFut { - fn new() -> Self { - BigFut([0; BIG_FUT_SIZE]) - } -} - -impl Drop for BigFut { - fn drop(&mut self) {} -} - -impl Future for BigFut { - type Output = (); - - fn poll(self: Pin<&mut Self>, _ctx: &mut Context<'_>) -> Poll<Self::Output> { - Poll::Ready(()) - } -} - -#[allow(dead_code)] -struct Joiner { - a: Option<BigFut>, - b: Option<BigFut>, - c: Option<BigFut>, -} - -impl Future for Joiner { - type Output = (); - - fn poll(self: Pin<&mut Self>, _ctx: &mut Context<'_>) -> Poll<Self::Output> { - Poll::Ready(()) - } -} - -fn noop() {} - -async fn single() { - let x = BigFut::new(); - x.await; -} - -async fn single_with_noop() { - let x = BigFut::new(); - noop(); - x.await; -} - -async fn joined() { - let a = BigFut::new(); - let b = BigFut::new(); - let c = BigFut::new(); - - let joiner = Joiner { - a: Some(a), - b: Some(b), - c: Some(c), - }; - joiner.await -} - -async fn joined_with_noop() { - let a = BigFut::new(); - let b = BigFut::new(); - let c = BigFut::new(); - - let joiner = Joiner { - a: Some(a), - b: Some(b), - c: Some(c), - }; - noop(); - joiner.await -} - -async fn mixed_sizes() { - let a = BigFut::new(); - let b = BigFut::new(); - let c = BigFut::new(); - let d = BigFut::new(); - let e = BigFut::new(); - let joiner = Joiner { - a: Some(a), - b: Some(b), - c: Some(c), - }; - - d.await; - e.await; - joiner.await; -} - -fn main() { - assert_eq!(1025, std::mem::size_of_val(&single())); - assert_eq!(1026, std::mem::size_of_val(&single_with_noop())); - assert_eq!(3076, std::mem::size_of_val(&joined())); - assert_eq!(3076, std::mem::size_of_val(&joined_with_noop())); - assert_eq!(6157, std::mem::size_of_val(&mixed_sizes())); -} |