diff options
Diffstat (limited to 'tests/ui/drop/field-replace-in-struct-with-drop.rs')
| -rw-r--r-- | tests/ui/drop/field-replace-in-struct-with-drop.rs | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/tests/ui/drop/field-replace-in-struct-with-drop.rs b/tests/ui/drop/field-replace-in-struct-with-drop.rs index e1d5e9c5268..8c65a4b3ad1 100644 --- a/tests/ui/drop/field-replace-in-struct-with-drop.rs +++ b/tests/ui/drop/field-replace-in-struct-with-drop.rs @@ -1,22 +1,17 @@ -// Issue 34101: Circa 2016-06-05, `fn inline` below issued an -// erroneous warning from the elaborate_drops pass about moving out of -// a field in `Foo`, which has a destructor (and thus cannot have -// content moved out of it). The reason that the warning is erroneous -// in this case is that we are doing a *replace*, not a move, of the -// content in question, and it is okay to replace fields within `Foo`. -// -// Another more subtle problem was that the elaborate_drops was -// creating a separate drop flag for that internally replaced content, -// even though the compiler should enforce an invariant that any drop -// flag for such subcontent of `Foo` will always have the same value -// as the drop flag for `Foo` itself. - - - - - - - +//! Circa 2016-06-05, `fn inline` below issued an +//! erroneous warning from the elaborate_drops pass about moving out of +//! a field in `Foo`, which has a destructor (and thus cannot have +//! content moved out of it). The reason that the warning is erroneous +//! in this case is that we are doing a *replace*, not a move, of the +//! content in question, and it is okay to replace fields within `Foo`. +//! +//! Another more subtle problem was that the elaborate_drops was +//! creating a separate drop flag for that internally replaced content, +//! even though the compiler should enforce an invariant that any drop +//! flag for such subcontent of `Foo` will always have the same value +//! as the drop flag for `Foo` itself. +//! +//! Regression test for <https://github.com/rust-lang/rust/issues/34101>. //@ check-pass @@ -26,21 +21,20 @@ impl Drop for Foo { fn drop(&mut self) {} } -fn inline() { - // (dummy variable so `f` gets assigned `var1` in MIR for both fn's) +fn test_inline_replacement() { + // dummy variable so `f` gets assigned `var1` in MIR for both functions let _s = (); let mut f = Foo(String::from("foo")); - f.0 = String::from("bar"); + f.0 = String::from("bar"); // This should not warn } -fn outline() { +fn test_outline_replacement() { let _s = String::from("foo"); let mut f = Foo(_s); - f.0 = String::from("bar"); + f.0 = String::from("bar"); // This should not warn either } - fn main() { - inline(); - outline(); + test_inline_replacement(); + test_outline_replacement(); } |
