[PATCH] D126853: [clang-tidy] `bugprone-use-after-move`: Don't warn on self-moves.
Martin Böhme via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 7 03:53:18 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rG1b664460fa4c: [clang-tidy] `bugprone-use-after-move`: Don't warn on self-moves. (authored by mboehme).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D126853/new/
https://reviews.llvm.org/D126853
Files:
clang-tools-extra/clang-tidy/bugprone/UseAfterMoveCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/bugprone-use-after-move.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/bugprone-use-after-move.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/bugprone-use-after-move.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/bugprone-use-after-move.cpp
@@ -152,6 +152,13 @@
// CHECK-NOTES: [[@LINE-3]]:15: note: move occurred here
}
+// Don't flag a move-to-self.
+void selfMove() {
+ A a;
+ a = std::move(a);
+ a.foo();
+}
+
// A warning should only be emitted for one use-after-move.
void onlyFlagOneUseAfterMove() {
A a;
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -207,12 +207,14 @@
- Fixed a crash in :doc:`performance-unnecessary-value-param
<clang-tidy/checks/readability-suspicious-call-argument>` when the specialization
- template has an unnecessary value paramter. Removed the fix for a template.
-
-- Fixed a bug in :doc:`bugprone-use-after-move
- <clang-tidy/checks/bugprone-use-after-move>` where a move in a lambda capture
- was treated as if it happened within the body of the lambda, not within the
- function that defines the lambda.
+ template has an unnecessary value parameter. Removed the fix for a template.
+
+- Fixed bugs in :doc:`bugprone-use-after-move
+ <clang-tidy/checks/bugprone-use-after-move>`:
+ - Treat a move in a lambda capture as happening in the function that defines
+ the lambda, not within the body of the lambda (as we were previously doing
+ erroneously).
+ - Don't emit an erroneous warning on self-moves.
Removed checks
^^^^^^^^^^^^^^
Index: clang-tools-extra/clang-tidy/bugprone/UseAfterMoveCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/bugprone/UseAfterMoveCheck.cpp
+++ clang-tools-extra/clang-tidy/bugprone/UseAfterMoveCheck.cpp
@@ -158,9 +158,12 @@
// Ignore all reinitializations where the move potentially comes after the
// reinit.
+ // If `Reinit` is identical to `MovingCall`, we're looking at a move-to-self
+ // (e.g. `a = std::move(a)`). Count these as reinitializations.
llvm::SmallVector<const Stmt *, 1> ReinitsToDelete;
for (const Stmt *Reinit : Reinits) {
- if (MovingCall && Sequence->potentiallyAfter(MovingCall, Reinit))
+ if (MovingCall && Reinit != MovingCall &&
+ Sequence->potentiallyAfter(MovingCall, Reinit))
ReinitsToDelete.push_back(Reinit);
}
for (const Stmt *Reinit : ReinitsToDelete) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126853.434766.patch
Type: text/x-patch
Size: 2614 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220607/ea489831/attachment.bin>
More information about the cfe-commits
mailing list