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/generator/drop-and-replace.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/generator/drop-and-replace.rs')
-rw-r--r-- | src/test/ui/generator/drop-and-replace.rs | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/src/test/ui/generator/drop-and-replace.rs b/src/test/ui/generator/drop-and-replace.rs deleted file mode 100644 index a9a50a122..000000000 --- a/src/test/ui/generator/drop-and-replace.rs +++ /dev/null @@ -1,45 +0,0 @@ -// run-pass -// Regression test for incorrect DropAndReplace behavior introduced in #60840 -// and fixed in #61373. When combined with the optimization implemented in -// #60187, this produced incorrect code for generators when a saved local was -// re-assigned. - -#![feature(generators, generator_trait)] - -use std::ops::{Generator, GeneratorState}; -use std::pin::Pin; - -#[derive(Debug, PartialEq)] -struct Foo(i32); - -impl Drop for Foo { - fn drop(&mut self) { } -} - -fn main() { - let mut a = || { - let mut x = Foo(4); - yield; - assert_eq!(x.0, 4); - - // At one point this tricked our dataflow analysis into thinking `x` was - // StorageDead after the assignment. - x = Foo(5); - assert_eq!(x.0, 5); - - { - let y = Foo(6); - yield; - assert_eq!(y.0, 6); - } - - assert_eq!(x.0, 5); - }; - - loop { - match Pin::new(&mut a).resume(()) { - GeneratorState::Complete(()) => break, - _ => (), - } - } -} |