diff options
| author | bors <bors@rust-lang.org> | 2021-08-30 18:27:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-08-30 18:27:54 +0000 |
| commit | 5d6804469d80aaf26f98090ae016af45e267f58f (patch) | |
| tree | 2c0736b5955ca80d6d4d29d07427ac2157618bc1 | |
| parent | 6cfa773583bb5123e630668f5bfe466716225546 (diff) | |
| parent | fbd775ff2949c4cc7bcdd7a648e8698ddfa4d410 (diff) | |
| download | rust-5d6804469d80aaf26f98090ae016af45e267f58f.tar.gz rust-5d6804469d80aaf26f98090ae016af45e267f58f.zip | |
Auto merge of #88466 - sexxi-goose:issue-88372, r=nikomatsakis
2229: Handle update to capture kind properly Fixes: #88372 r? `@nikomatsakis`
| -rw-r--r-- | compiler/rustc_typeck/src/check/upvar.rs | 5 | ||||
| -rw-r--r-- | src/test/ui/closures/2229_closure_analysis/run_pass/issue-88372.rs | 19 |
2 files changed, 24 insertions, 0 deletions
diff --git a/compiler/rustc_typeck/src/check/upvar.rs b/compiler/rustc_typeck/src/check/upvar.rs index ae6bebcf727..bb8d2ecdcf0 100644 --- a/compiler/rustc_typeck/src/check/upvar.rs +++ b/compiler/rustc_typeck/src/check/upvar.rs @@ -400,6 +400,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { }; capture_info.capture_kind = capture_kind; + let capture_info = if let Some(existing) = processed.get(&place) { + determine_capture_info(*existing, capture_info) + } else { + capture_info + }; processed.insert(place, capture_info); } diff --git a/src/test/ui/closures/2229_closure_analysis/run_pass/issue-88372.rs b/src/test/ui/closures/2229_closure_analysis/run_pass/issue-88372.rs new file mode 100644 index 00000000000..25fbb6cb906 --- /dev/null +++ b/src/test/ui/closures/2229_closure_analysis/run_pass/issue-88372.rs @@ -0,0 +1,19 @@ +// edition:2021 +// run-pass + + +fn solve<F>(validate: F) -> Option<u64> +where + F: Fn(&mut [i8; 1]), +{ + let mut position: [i8; 1] = [1]; + Some(0).map(|_| { + validate(&mut position); + let [_x] = position; + 0 + }) +} + +fn main() { + solve(|_| ()); +} |
