1
Fork 0

Do not suggest ref multiple times for the same binding

This commit is contained in:
Esteban Küber 2022-11-03 09:19:03 -07:00
parent 9e72e35ceb
commit 4a51f37bcb
2 changed files with 3 additions and 9 deletions

View file

@ -171,6 +171,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
let mut is_loop_move = false; let mut is_loop_move = false;
let mut in_pattern = false; let mut in_pattern = false;
let mut seen_spans = FxHashSet::default();
for move_site in &move_site_vec { for move_site in &move_site_vec {
let move_out = self.move_data.moves[(*move_site).moi]; let move_out = self.move_data.moves[(*move_site).moi];
@ -320,7 +321,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
self.suggest_cloning(&mut err, ty, move_span); self.suggest_cloning(&mut err, ty, move_span);
} }
} }
if let Some(pat) = finder.pat { if let Some(pat) = finder.pat && !seen_spans.contains(&pat.span) {
in_pattern = true; in_pattern = true;
err.span_suggestion_verbose( err.span_suggestion_verbose(
pat.span.shrink_to_lo(), pat.span.shrink_to_lo(),
@ -328,6 +329,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
"ref ".to_string(), "ref ".to_string(),
Applicability::MachineApplicable, Applicability::MachineApplicable,
); );
seen_spans.insert(pat.span);
} }
} }

View file

@ -88,10 +88,6 @@ help: borrow this binding in the pattern to avoid moving the value
| |
LL | ref foo @ Some(Test::Foo | Test::Bar) => (), LL | ref foo @ Some(Test::Foo | Test::Bar) => (),
| +++ | +++
help: borrow this binding in the pattern to avoid moving the value
|
LL | ref foo @ Some(Test::Foo | Test::Bar) => (),
| +++
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
--> $DIR/bindings-after-at-or-patterns-slice-patterns-box-patterns.rs:86:5 --> $DIR/bindings-after-at-or-patterns-slice-patterns-box-patterns.rs:86:5
@ -148,10 +144,6 @@ help: borrow this binding in the pattern to avoid moving the value
| |
LL | ref a @ [.., Some(Test::Foo | Test::Bar)] => (), LL | ref a @ [.., Some(Test::Foo | Test::Bar)] => (),
| +++ | +++
help: borrow this binding in the pattern to avoid moving the value
|
LL | ref a @ [.., Some(Test::Foo | Test::Bar)] => (),
| +++
error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable
--> $DIR/bindings-after-at-or-patterns-slice-patterns-box-patterns.rs:144:5 --> $DIR/bindings-after-at-or-patterns-slice-patterns-box-patterns.rs:144:5