From 9e72e35ceb2af024e8ca6a74442269f7ec739173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Wed, 2 Nov 2022 21:22:24 -0700 Subject: [PATCH 01/15] Suggest `.clone()` or `ref binding` on E0382 --- compiler/rustc_ast/src/ast.rs | 2 +- compiler/rustc_ast/src/mut_visit.rs | 3 +- compiler/rustc_ast/src/visit.rs | 2 +- compiler/rustc_ast_lowering/src/expr.rs | 4 +- .../rustc_ast_pretty/src/pprust/state/expr.rs | 2 +- .../src/diagnostics/conflict_errors.rs | 192 ++++++++++++++++-- .../src/assert/context.rs | 2 +- compiler/rustc_parse/src/parser/expr.rs | 5 +- compiler/rustc_resolve/src/late.rs | 4 +- .../binding/issue-53114-borrow-checks.stderr | 16 ++ src/test/ui/binop/binop-move-semantics.stderr | 4 + ...atterns-slice-patterns-box-patterns.stderr | 23 +++ .../borrowck-consume-unsize-vec.stderr | 12 ++ .../borrowck-consume-upcast-box.stderr | 8 + .../borrowck/borrowck-drop-from-guard.stderr | 5 + .../borrowck-loan-in-overloaded-op.stderr | 5 + .../borrowck-move-out-from-array-match.stderr | 40 ++++ ...ove-out-from-array-no-overlap-match.stderr | 36 ++++ ...rowck-move-out-from-array-use-match.stderr | 56 +++++ ...out-from-array-use-no-overlap-match.stderr | 36 ++++ .../borrowck-move-out-from-array-use.stderr | 56 +++++ .../borrowck-move-out-from-array.stderr | 40 ++++ .../borrowck-multiple-captures.stderr | 15 ++ ...orrowck-overloaded-index-move-index.stderr | 5 + src/test/ui/borrowck/borrowck-reinit.stderr | 5 + .../borrowck/issue-31287-drop-in-guard.stderr | 5 + src/test/ui/borrowck/issue-41962.stderr | 2 +- src/test/ui/borrowck/issue-83760.stderr | 4 + .../move-in-pattern-mut-in-loop.stderr | 2 +- .../ui/borrowck/move-in-pattern-mut.stderr | 4 +- src/test/ui/borrowck/move-in-pattern.stderr | 4 +- .../ui/borrowck/mut-borrow-in-loop-2.stderr | 8 + src/test/ui/borrowck/or-patterns.stderr | 16 ++ .../ui/closure_context/issue-42065.stderr | 4 + src/test/ui/codemap_tests/tab_3.stderr | 4 + src/test/ui/drop/repeat-drop-2.stderr | 5 + src/test/ui/issues/issue-29723.stderr | 5 + src/test/ui/issues/issue-42796.stderr | 4 + src/test/ui/issues/issue-61108.stderr | 4 + src/test/ui/issues/issue-64559.stderr | 4 + .../ui/liveness/liveness-move-call-arg.stderr | 16 +- .../ui/liveness/liveness-move-in-loop.stderr | 14 ++ .../ui/liveness/liveness-move-in-while.stderr | 12 +- .../liveness/liveness-use-after-move.stderr | 4 + .../liveness/liveness-use-after-send.stderr | 9 + .../borrow-closures-instead-of-move.stderr | 22 ++ .../ui/moves/issue-46099-move-in-macro.stderr | 5 + .../ui/moves/issue-72649-uninit-in-loop.rs | 6 +- .../moves/issue-72649-uninit-in-loop.stderr | 10 +- .../ui/moves/move-fn-self-receiver.stderr | 14 ++ .../ui/moves/move-guard-same-consts.stderr | 12 ++ src/test/ui/moves/move-in-guard-1.stderr | 12 ++ src/test/ui/moves/move-in-guard-2.stderr | 12 ++ ...moves-based-on-type-access-to-field.stderr | 4 + ...sed-on-type-cyclic-types-issue-4821.stderr | 2 +- ...-on-type-distribute-copy-over-paren.stderr | 10 + .../ui/moves/moves-based-on-type-exprs.stderr | 60 ++++++ .../moves-based-on-type-match-bindings.stderr | 4 + .../ui/moves/moves-based-on-type-tuple.stderr | 5 + ...se_of_moved_value_clone_suggestions.stderr | 5 + src/test/ui/nll/closure-access-spans.stderr | 10 + .../issue-21232-partial-init-and-use.stderr | 24 +++ src/test/ui/nll/issue-51512.stderr | 5 + src/test/ui/nll/issue-53807.stderr | 2 +- src/test/ui/nll/match-cfg-fake-edges.stderr | 5 + src/test/ui/nll/ref-suggestion.stderr | 12 +- ...can-live-while-the-other-survives-1.stderr | 4 +- .../borrowck-move-and-move.stderr | 31 +++ .../borrowck-pat-at-and-box.stderr | 4 + ...orrowck-pat-by-move-and-ref-inverse.stderr | 23 +++ .../borrowck-pat-by-move-and-ref.stderr | 25 ++- .../copy-and-move-mixed.stderr | 4 + ...inding-modes-both-sides-independent.stderr | 5 + .../borrowck-move-ref-pattern.stderr | 4 + .../dbg-macro-move-semantics.stderr | 6 + .../suggestions/borrow-for-loop-head.stderr | 5 + .../try-block-maybe-bad-lifetime.stderr | 4 + ...ed-closures-infer-fnonce-call-twice.stderr | 4 + ...osures-infer-fnonce-move-call-twice.stderr | 4 + .../ui/union/union-move.mirunsafeck.stderr | 16 ++ .../ui/union/union-move.thirunsafeck.stderr | 16 ++ src/test/ui/unop-move-semantics.stderr | 4 + .../unsized-locals/borrow-after-move.stderr | 13 ++ src/test/ui/unsized-locals/double-move.stderr | 8 + .../use/use-after-move-based-on-type.stderr | 4 + ...after-move-implicity-coerced-object.stderr | 8 + 86 files changed, 1092 insertions(+), 49 deletions(-) diff --git a/compiler/rustc_ast/src/ast.rs b/compiler/rustc_ast/src/ast.rs index 54bd25d647130..28072f153a479 100644 --- a/compiler/rustc_ast/src/ast.rs +++ b/compiler/rustc_ast/src/ast.rs @@ -1376,7 +1376,7 @@ pub enum ExprKind { /// Conditionless loop (can be exited with `break`, `continue`, or `return`). /// /// `'label: loop { block }` - Loop(P, Option