diff options
author | Gabor Horvath <xazax.hun@gmail.com> | 2015-02-25 12:17:03 +0000 |
---|---|---|
committer | Gabor Horvath <xazax.hun@gmail.com> | 2015-02-25 12:17:03 +0000 |
commit | ca0bbff3a70b0a2dde3426af546b01f93cf2f166 (patch) | |
tree | a1d4341ba439f7f956c3192d8deaf0d609c90be2 /clang-tools-extra | |
parent | addb2daaac2ee5bed2dc2f136a54fd40f682766f (diff) | |
download | bcm5719-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.cpp | 4 | ||||
-rw-r--r-- | clang-tools-extra/test/clang-tidy/misc-inaccurate-erase.cpp | 14 |
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++);{{$}} } |