diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2022-11-03 09:19:03 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2022-11-23 12:17:47 -0800 |
| commit | 4a51f37bcb58b37afb8ea0ac4b8696714787a305 (patch) | |
| tree | b663f1fa5c918dd44964829b2eb06f818f064309 | |
| parent | 9e72e35ceb2af024e8ca6a74442269f7ec739173 (diff) | |
| download | rust-4a51f37bcb58b37afb8ea0ac4b8696714787a305.tar.gz rust-4a51f37bcb58b37afb8ea0ac4b8696714787a305.zip | |
Do not suggest `ref` multiple times for the same binding
| -rw-r--r-- | compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/borrowck/bindings-after-at-or-patterns-slice-patterns-box-patterns.stderr | 8 |
2 files changed, 3 insertions, 9 deletions
diff --git a/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs b/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs index 9b6836039a1..8a4b0ebe737 100644 --- a/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs +++ b/compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs @@ -171,6 +171,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> { let mut is_loop_move = false; let mut in_pattern = false; + let mut seen_spans = FxHashSet::default(); for move_site in &move_site_vec { 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); } } - if let Some(pat) = finder.pat { + if let Some(pat) = finder.pat && !seen_spans.contains(&pat.span) { in_pattern = true; err.span_suggestion_verbose( pat.span.shrink_to_lo(), @@ -328,6 +329,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> { "ref ".to_string(), Applicability::MachineApplicable, ); + seen_spans.insert(pat.span); } } diff --git a/src/test/ui/borrowck/bindings-after-at-or-patterns-slice-patterns-box-patterns.stderr b/src/test/ui/borrowck/bindings-after-at-or-patterns-slice-patterns-box-patterns.stderr index f58672f0666..d06b3bc1c3e 100644 --- a/src/test/ui/borrowck/bindings-after-at-or-patterns-slice-patterns-box-patterns.stderr +++ b/src/test/ui/borrowck/bindings-after-at-or-patterns-slice-patterns-box-patterns.stderr @@ -88,10 +88,6 @@ help: borrow this binding in the pattern to avoid moving the value | 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 --> $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)] => (), | +++ -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 --> $DIR/bindings-after-at-or-patterns-slice-patterns-box-patterns.rs:144:5 |
