diff options
| author | Clement Courbet <courbet@google.com> | 2019-02-25 13:09:02 +0000 |
|---|---|---|
| committer | Clement Courbet <courbet@google.com> | 2019-02-25 13:09:02 +0000 |
| commit | 4bfa716f7c52d5bbf6ab23ea4fc20cec71c5f19a (patch) | |
| tree | fe57ee738c997ca10d369fefdcdc7fd841e8768c | |
| parent | cfa0d7a3581e4e49b26b820776fcad746c7885a0 (diff) | |
| download | bcm5719-llvm-4bfa716f7c52d5bbf6ab23ea4fc20cec71c5f19a.tar.gz bcm5719-llvm-4bfa716f7c52d5bbf6ab23ea4fc20cec71c5f19a.zip | |
[clang-tidy] misc-string-integer-assignment: ignore toupper/tolower
Summary: Tis represents ~20% of false positives. See PR27723.
Reviewers: xazax.hun, alexfh
Subscribers: rnkovacs, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D58604
llvm-svn: 354780
| -rw-r--r-- | clang-tools-extra/clang-tidy/bugprone/StringIntegerAssignmentCheck.cpp | 13 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/bugprone-string-integer-assignment.cpp | 9 |
2 files changed, 18 insertions, 4 deletions
diff --git a/clang-tools-extra/clang-tidy/bugprone/StringIntegerAssignmentCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/StringIntegerAssignmentCheck.cpp index cce0de9f818..e9bde2a7181 100644 --- a/clang-tools-extra/clang-tidy/bugprone/StringIntegerAssignmentCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/StringIntegerAssignmentCheck.cpp @@ -27,10 +27,15 @@ void StringIntegerAssignmentCheck::registerMatchers(MatchFinder *Finder) { callee(cxxMethodDecl(ofClass(classTemplateSpecializationDecl( hasName("::std::basic_string"), hasTemplateArgument(0, refersToType(qualType().bind("type"))))))), - hasArgument(1, - ignoringImpCasts(expr(hasType(isInteger()), - unless(hasType(isAnyCharacter()))) - .bind("expr"))), + hasArgument( + 1, + ignoringImpCasts( + expr(hasType(isInteger()), unless(hasType(isAnyCharacter())), + // Ignore calls to tolower/toupper (see PR27723). + unless(callExpr(callee(functionDecl( + hasAnyName("tolower", "std::tolower", "toupper", + "std::toupper")))))) + .bind("expr"))), unless(isInTemplateInstantiation())), this); } diff --git a/clang-tools-extra/test/clang-tidy/bugprone-string-integer-assignment.cpp b/clang-tools-extra/test/clang-tidy/bugprone-string-integer-assignment.cpp index c4e13fc4c68..0317354d8c3 100644 --- a/clang-tools-extra/test/clang-tidy/bugprone-string-integer-assignment.cpp +++ b/clang-tools-extra/test/clang-tidy/bugprone-string-integer-assignment.cpp @@ -11,8 +11,14 @@ struct basic_string { typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; + +int tolower(int i); +int toupper(int i); } +int tolower(int i); +int toupper(int i); + typedef int MyArcaneChar; int main() { @@ -50,4 +56,7 @@ int main() { // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: an integer is interpreted as a chara // CHECK-FIXES: {{^}} as = 6;{{$}} + s += toupper(x); + s += tolower(x); + s += std::tolower(x); } |

