summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorGabor Horvath <xazax.hun@gmail.com>2015-02-25 12:17:03 +0000
committerGabor Horvath <xazax.hun@gmail.com>2015-02-25 12:17:03 +0000
commitca0bbff3a70b0a2dde3426af546b01f93cf2f166 (patch)
treea1d4341ba439f7f956c3192d8deaf0d609c90be2 /clang-tools-extra
parentaddb2daaac2ee5bed2dc2f136a54fd40f682766f (diff)
downloadbcm5719-llvm-ca0bbff3a70b0a2dde3426af546b01f93cf2f166.tar.gz
bcm5719-llvm-ca0bbff3a70b0a2dde3426af546b01f93cf2f166.zip
[clang-tidy] Fixed a false positive case in misc-inaccurate-erase checker.
llvm-svn: 230483
Diffstat (limited to 'clang-tools-extra')
-rw-r--r--clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp4
-rw-r--r--clang-tools-extra/test/clang-tidy/misc-inaccurate-erase.cpp14
2 files changed, 14 insertions, 4 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp b/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp
index 033e0a15d87..80174adbca7 100644
--- a/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/InaccurateEraseCheck.cpp
@@ -26,10 +26,10 @@ void InaccurateEraseCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
memberCallExpr(
- on(hasType(namedDecl(matchesName("std::")))),
+ on(hasType(namedDecl(matchesName("^::std::")))),
callee(methodDecl(hasName("erase"))), argumentCountIs(1),
hasArgument(0, has(callExpr(callee(functionDecl(matchesName(
- "std::(remove_if|remove|unique)"))),
+ "^::std::(remove(_if)?|unique)$"))),
CheckForEndCall).bind("InaccAlgCall"))),
unless(isInTemplateInstantiation())).bind("InaccErase"),
this);
diff --git a/clang-tools-extra/test/clang-tidy/misc-inaccurate-erase.cpp b/clang-tools-extra/test/clang-tidy/misc-inaccurate-erase.cpp
index 1693b9f455c..4d097111965 100644
--- a/clang-tools-extra/test/clang-tidy/misc-inaccurate-erase.cpp
+++ b/clang-tools-extra/test/clang-tidy/misc-inaccurate-erase.cpp
@@ -2,10 +2,13 @@
// REQUIRES: shell
namespace std {
-struct vec_iterator {};
+template <typename T> struct vec_iterator {
+ T *ptr;
+ vec_iterator operator++(int);
+};
template <typename T> struct vector {
- typedef vec_iterator iterator;
+ typedef vec_iterator<T> iterator;
iterator begin();
iterator end();
@@ -21,6 +24,8 @@ template <typename FwIt, typename Func>
FwIt remove_if(FwIt begin, FwIt end, Func f);
template <typename FwIt> FwIt unique(FwIt begin, FwIt end);
+
+template <typename T> struct unique_ptr {};
} // namespace std
struct custom_iter {};
@@ -64,4 +69,9 @@ int main() {
ERASE(v, 15);
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: this call will remove at most one
// CHECK-FIXES: {{^ }}ERASE(v, 15);{{$}}
+
+ std::vector<std::unique_ptr<int>> vupi;
+ auto iter = vupi.begin();
+ vupi.erase(iter++);
+ // CHECK-FIXES: {{^ }}vupi.erase(iter++);{{$}}
}
OpenPOWER on IntegriCloud