summaryrefslogtreecommitdiffstats
path: root/src/test/ui/generator/drop-and-replace.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/generator/drop-and-replace.rs')
-rw-r--r--src/test/ui/generator/drop-and-replace.rs45
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,
- _ => (),
- }
- }
-}