diff options
| author | Aman Arora <me@aman-arora.com> | 2020-12-15 23:00:19 -0500 |
|---|---|---|
| committer | Aman Arora <me@aman-arora.com> | 2021-01-29 15:37:42 -0500 |
| commit | 604cbdcfddb959cd1d7de2f9afa14a199561a428 (patch) | |
| tree | f711c27d880cc8c09ccfd6b7f7a5546b9c289539 /src | |
| parent | 0897db56098dd8e8355017f4364bc88f1e4f26c0 (diff) | |
| download | rust-604cbdcfddb959cd1d7de2f9afa14a199561a428.tar.gz rust-604cbdcfddb959cd1d7de2f9afa14a199561a428.zip | |
Fix unused 'mut' warning for capture's root variable
Diffstat (limited to 'src')
3 files changed, 46 insertions, 17 deletions
diff --git a/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.rs b/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.rs index 83ed1c28462..4007a5a48aa 100644 --- a/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.rs +++ b/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.rs @@ -29,19 +29,36 @@ fn struct_contains_ref_to_another_struct() { c(); } -fn no_ref() { - struct S(String); - struct T(S); +#[derive(Debug)] +struct S(String); - let t = T(S("s".into())); +#[derive(Debug)] +struct T(S); + +fn no_ref() { + let mut t = T(S("s".into())); let mut c = move || { t.0.0 = "new S".into(); }; c(); } +fn no_ref_nested() { + let mut t = T(S("s".into())); + let c = || { + println!("{:?}", t.0); + let mut c = move || { + t.0.0 = "new S".into(); + println!("{:?}", t.0.0); + }; + c(); + }; + c(); +} + fn main() { simple_ref(); struct_contains_ref_to_another_struct(); no_ref(); + no_ref_nested(); } diff --git a/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.stderr b/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.stderr index 724b683bfbf..c1d8ba575d6 100644 --- a/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.stderr +++ b/src/test/ui/closures/2229_closure_analysis/run_pass/move_closure.stderr @@ -7,15 +7,5 @@ LL | #![feature(capture_disjoint_fields)] = note: `#[warn(incomplete_features)]` on by default = note: see issue #53488 <https://github.com/rust-lang/rust/issues/53488> for more information -warning: variable does not need to be mutable - --> $DIR/move_closure.rs:36:9 - | -LL | let mut t = T(S("s".into())); - | ----^ - | | - | help: remove this `mut` - | - = note: `#[warn(unused_mut)]` on by default - -warning: 2 warnings emitted +warning: 1 warning emitted diff --git a/src/test/ui/closures/2229_closure_analysis/run_pass/mut_ref_struct_mem.rs b/src/test/ui/closures/2229_closure_analysis/run_pass/mut_ref_struct_mem.rs index 82e723cc825..2dba923647a 100644 --- a/src/test/ui/closures/2229_closure_analysis/run_pass/mut_ref_struct_mem.rs +++ b/src/test/ui/closures/2229_closure_analysis/run_pass/mut_ref_struct_mem.rs @@ -2,14 +2,14 @@ // Test that we can mutate a place through a mut-borrow // that is captured by the closure -// + // More specifically we test that the if the mutable reference isn't root variable of a capture // but rather accessed while acessing the precise capture. #![feature(capture_disjoint_fields)] //~^ WARNING: the feature `capture_disjoint_fields` is incomplete -fn main() { +fn mut_tuple() { let mut t = (10, 10); let t1 = (&mut t, 10); @@ -21,3 +21,25 @@ fn main() { c(); } + +fn mut_tuple_nested() { + let mut t = (10, 10); + + let t1 = (&mut t, 10); + + let mut c = || { + let mut c = || { + // Mutable because (*t.0) is mutable + t1.0.0 += 10; + }; + + c(); + }; + + c(); +} + +fn main() { + mut_tuple(); + mut_tuple_nested(); +} |
