[clang-tools-extra] r304811 - [clang-tidy] misc-inaccurate-erase: support call by pointer
Alexander Kornienko via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 6 10:49:45 PDT 2017
Author: alexfh
Date: Tue Jun 6 12:49:45 2017
New Revision: 304811
URL: http://llvm.org/viewvc/llvm-project?rev=304811&view=rev
Log:
[clang-tidy] misc-inaccurate-erase: support call by pointer
+ replace matchesName calls with more efficient alternatives.
Modified:
clang-tools-extra/trunk/clang-tidy/misc/InaccurateEraseCheck.cpp
clang-tools-extra/trunk/test/clang-tidy/misc-inaccurate-erase.cpp
Modified: clang-tools-extra/trunk/clang-tidy/misc/InaccurateEraseCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/InaccurateEraseCheck.cpp?rev=304811&r1=304810&r2=304811&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/InaccurateEraseCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/misc/InaccurateEraseCheck.cpp Tue Jun 6 12:49:45 2017
@@ -18,6 +18,10 @@ namespace clang {
namespace tidy {
namespace misc {
+namespace {
+AST_MATCHER(Decl, isInStdNamespace) { return Node.isInStdNamespace(); }
+}
+
void InaccurateEraseCheck::registerMatchers(MatchFinder *Finder) {
// Only register the matchers for C++; the functionality currently does not
// provide any benefit to other languages, despite being benign.
@@ -30,13 +34,14 @@ void InaccurateEraseCheck::registerMatch
.bind("InaccEndCall")))),
anything()));
+ const auto DeclInStd = decl(isInStdNamespace());
Finder->addMatcher(
cxxMemberCallExpr(
- on(hasType(namedDecl(matchesName("^::std::")))),
+ on(anyOf(hasType(DeclInStd), hasType(pointsTo(DeclInStd)))),
callee(cxxMethodDecl(hasName("erase"))), argumentCountIs(1),
hasArgument(0, has(ignoringParenImpCasts(
- callExpr(callee(functionDecl(matchesName(
- "^::std::(remove(_if)?|unique)$"))),
+ callExpr(callee(functionDecl(hasAnyName(
+ "remove", "remove_if", "unique"))),
CheckForEndCall)
.bind("InaccAlgCall")))),
unless(isInTemplateInstantiation()))
Modified: clang-tools-extra/trunk/test/clang-tidy/misc-inaccurate-erase.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-inaccurate-erase.cpp?rev=304811&r1=304810&r2=304811&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-inaccurate-erase.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/misc-inaccurate-erase.cpp Tue Jun 6 12:49:45 2017
@@ -56,6 +56,12 @@ int main() {
// CHECK-FIXES: {{^ }}v.erase(remove(v.begin(), v.end(), 10), v.end());{{$}}
v.erase(remove(v.begin(), v.end(), 20), v.end());
+ auto *p = &v;
+ p->erase(remove(p->begin(), p->end(), 11));
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: this call will remove at most one
+ // CHECK-FIXES: {{^ }}p->erase(remove(p->begin(), p->end(), 11), p->end());{{$}}
+
+
// Fix is not trivial.
auto it = v.end();
v.erase(remove(v.begin(), it, 10));
More information about the cfe-commits
mailing list