diff options
| author | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2021-09-28 00:00:00 +0000 |
|---|---|---|
| committer | Tomasz Miąsko <tomasz.miasko@gmail.com> | 2021-09-28 14:39:18 +0200 |
| commit | 8901ea29b93eeff11c86986f620108e9f34330df (patch) | |
| tree | fb063cf182b088e41dc38682d836f652a4b8f35c /src/test | |
| parent | 83f147b3baf21acfc367a6da1045d212cd3957e4 (diff) | |
Rebase resume argument projections during state transform
When remapping a resume argument with projections rebase them on top of the new base. The case where resume argument has projections is unusual, but might arise with box syntax where the assignment is performed directly into the box without an intermediate temporary.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/generator/yield-in-box.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/generator/yield-in-box.stderr | 2 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/test/ui/generator/yield-in-box.rs b/src/test/ui/generator/yield-in-box.rs index 65f368df9cb..dd6fa7c151a 100644 --- a/src/test/ui/generator/yield-in-box.rs +++ b/src/test/ui/generator/yield-in-box.rs @@ -1,8 +1,10 @@ // run-pass - // Test that box-statements with yields in them work. -#![feature(generators, box_syntax)] +#![feature(generators, box_syntax, generator_trait)] +use std::pin::Pin; +use std::ops::Generator; +use std::ops::GeneratorState; fn main() { let x = 0i32; @@ -15,4 +17,8 @@ fn main() { _t => {} } }; + + let mut g = |_| box yield; + assert_eq!(Pin::new(&mut g).resume(1), GeneratorState::Yielded(())); + assert_eq!(Pin::new(&mut g).resume(2), GeneratorState::Complete(box 2)); } diff --git a/src/test/ui/generator/yield-in-box.stderr b/src/test/ui/generator/yield-in-box.stderr index 24de18edb0f..7602e803945 100644 --- a/src/test/ui/generator/yield-in-box.stderr +++ b/src/test/ui/generator/yield-in-box.stderr @@ -1,5 +1,5 @@ warning: unused generator that must be used - --> $DIR/yield-in-box.rs:9:5 + --> $DIR/yield-in-box.rs:11:5 | LL | / || { LL | | let y = 2u32; |
