From 156173f83bdd0eb80546053d42304645e8cfbb6c Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Tue, 16 Jul 2019 11:09:29 +0900 Subject: [PATCH 1/2] Add tests for overlapping explicitly dropped locals in generators --- src/test/run-pass/generator/size-moved-locals.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/run-pass/generator/size-moved-locals.rs b/src/test/run-pass/generator/size-moved-locals.rs index 37e2e0cfdcccf..5b056059b5d1d 100644 --- a/src/test/run-pass/generator/size-moved-locals.rs +++ b/src/test/run-pass/generator/size-moved-locals.rs @@ -55,8 +55,20 @@ fn overlap_move_points() -> impl Generator { } } +fn overlap_x_and_y() -> impl Generator{ + static || { + let x = [0u8; 1024]; + yield; + drop(x); + let y = [0u8;1024]; + yield; + drop(y); + } +} + fn main() { assert_eq!(1028, std::mem::size_of_val(&move_before_yield())); assert_eq!(1032, std::mem::size_of_val(&move_before_yield_with_noop())); assert_eq!(2056, std::mem::size_of_val(&overlap_move_points())); + assert_eq!(2052, std::mem::size_of_val(&overlap_x_and_y())); } From 404281125e565a4889910657504112789c75a11e Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Thu, 25 Jul 2019 07:47:57 +0900 Subject: [PATCH 2/2] Use Foo instead of raw arrays --- src/test/run-pass/generator/size-moved-locals.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/run-pass/generator/size-moved-locals.rs b/src/test/run-pass/generator/size-moved-locals.rs index 5b056059b5d1d..c9f471d7b6c98 100644 --- a/src/test/run-pass/generator/size-moved-locals.rs +++ b/src/test/run-pass/generator/size-moved-locals.rs @@ -57,10 +57,10 @@ fn overlap_move_points() -> impl Generator { fn overlap_x_and_y() -> impl Generator{ static || { - let x = [0u8; 1024]; + let x = Foo([0; FOO_SIZE]); yield; drop(x); - let y = [0u8;1024]; + let y = Foo([0; FOO_SIZE]); yield; drop(y); } @@ -70,5 +70,5 @@ fn main() { assert_eq!(1028, std::mem::size_of_val(&move_before_yield())); assert_eq!(1032, std::mem::size_of_val(&move_before_yield_with_noop())); assert_eq!(2056, std::mem::size_of_val(&overlap_move_points())); - assert_eq!(2052, std::mem::size_of_val(&overlap_x_and_y())); + assert_eq!(1032, std::mem::size_of_val(&overlap_x_and_y())); }