diff options
| author | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-10-17 15:20:22 +0300 |
|---|---|---|
| committer | Ariel Ben-Yehuda <ariel.byd@gmail.com> | 2017-10-17 15:20:22 +0300 |
| commit | a151d37401b20d235eac1d862579dbbaa4ccea13 (patch) | |
| tree | 1db3315ae836aaeb7969176390953636a2833994 /src/test | |
| parent | abe7c87eefe4a15b7e83feb6b8962ae15452c16c (diff) | |
| download | rust-a151d37401b20d235eac1d862579dbbaa4ccea13.tar.gz rust-a151d37401b20d235eac1d862579dbbaa4ccea13.zip | |
fix generator drop caching
Fixes #45328.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/dynamic-drop.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/test/run-pass/dynamic-drop.rs b/src/test/run-pass/dynamic-drop.rs index 1aba47af1e9..d8b6dbe48f1 100644 --- a/src/test/run-pass/dynamic-drop.rs +++ b/src/test/run-pass/dynamic-drop.rs @@ -8,9 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(untagged_unions)] +#![feature(generators, generator_trait, untagged_unions)] use std::cell::{Cell, RefCell}; +use std::ops::Generator; use std::panic; use std::usize; @@ -161,6 +162,21 @@ fn vec_simple(a: &Allocator) { let _x = vec![a.alloc(), a.alloc(), a.alloc(), a.alloc()]; } +fn generator(a: &Allocator, run_count: usize) { + assert!(run_count < 4); + + let mut gen = || { + (a.alloc(), + yield a.alloc(), + a.alloc(), + yield a.alloc() + ); + }; + for _ in 0..run_count { + gen.resume(); + } +} + #[allow(unreachable_code)] fn vec_unreachable(a: &Allocator) { let _x = vec![a.alloc(), a.alloc(), a.alloc(), return]; @@ -228,5 +244,11 @@ fn main() { run_test(|a| field_assignment(a, false)); run_test(|a| field_assignment(a, true)); + // FIXME: fix leaks on panics + run_test_nopanic(|a| generator(a, 0)); + run_test_nopanic(|a| generator(a, 1)); + run_test_nopanic(|a| generator(a, 2)); + run_test_nopanic(|a| generator(a, 3)); + run_test_nopanic(|a| union1(a)); } |
