[PATCH] D76990: [clang-tidy]: fix false positive of cert-oop54-cpp check.
Tamás Zolnai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 29 05:50:53 PDT 2020
ztamas updated this revision to Diff 253412.
ztamas added a comment.
Rebase, TODO comment, remove unrelated change.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D76990/new/
https://reviews.llvm.org/D76990
Files:
clang-tools-extra/clang-tidy/bugprone/UnhandledSelfAssignmentCheck.cpp
clang-tools-extra/test/clang-tidy/checkers/bugprone-unhandled-self-assignment.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/bugprone-unhandled-self-assignment.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/bugprone-unhandled-self-assignment.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/bugprone-unhandled-self-assignment.cpp
@@ -283,6 +283,21 @@
T *p;
};
+// https://bugs.llvm.org/show_bug.cgi?id=44499
+class Foo;
+template <int a>
+bool operator!=(Foo &, Foo &) {
+ class Bar {
+ Bar &operator=(const Bar &other) {
+ if (this != &other) {
+ }
+ return *this;
+ }
+
+ int *p;
+ };
+}
+
// There is no warning if the copy assignment operator gets the object by value.
class PassedByValue {
public:
Index: clang-tools-extra/clang-tidy/bugprone/UnhandledSelfAssignmentCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/bugprone/UnhandledSelfAssignmentCheck.cpp
+++ clang-tools-extra/clang-tidy/bugprone/UnhandledSelfAssignmentCheck.cpp
@@ -40,9 +40,14 @@
// Self-check: Code compares something with 'this' pointer. We don't check
// whether it is actually the parameter what we compare.
- const auto HasNoSelfCheck = cxxMethodDecl(unless(
+ // TODO: Solve this on the matcher level, so we don't need to use two different
+ // matchers for the same thing.
+ const auto HasNoSelfCheck = cxxMethodDecl(unless(anyOf(
hasDescendant(binaryOperator(hasAnyOperatorName("==", "!="),
- has(ignoringParenCasts(cxxThisExpr()))))));
+ has(ignoringParenCasts(cxxThisExpr())))),
+ hasDescendant(cxxOperatorCallExpr(
+ hasAnyOverloadedOperatorName("==", "!="), argumentCountIs(2),
+ has(ignoringParenCasts(cxxThisExpr())))))));
// Both copy-and-swap and copy-and-move method creates a copy first and
// assign it to 'this' with swap or move.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76990.253412.patch
Type: text/x-patch
Size: 1941 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200329/4460e0da/attachment-0001.bin>
More information about the cfe-commits
mailing list