diff options
author | Alexander Kornienko <alexfh@google.com> | 2018-02-28 23:30:29 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2018-02-28 23:30:29 +0000 |
commit | cb6d32034514bcdd152a95684ed309149f06070d (patch) | |
tree | 5f755c450fb834f7a0b1837eacf42743efed5cb1 /clang-tools-extra/clang-tidy/misc/StringIntegerAssignmentCheck.cpp | |
parent | ff9595a002d48a4470f0518c26920fab39e2f62c (diff) | |
download | bcm5719-llvm-cb6d32034514bcdd152a95684ed309149f06070d.tar.gz bcm5719-llvm-cb6d32034514bcdd152a95684ed309149f06070d.zip |
Rename more checks from misc- to bugprone-.
Summary:
clang-tidy/rename_check.py {misc,bugprone}-string-integer-assignment
clang-tidy/rename_check.py {misc,bugprone}-string-literal-with-embedded-nul
clang-tidy/rename_check.py {misc,bugprone}-suspicious-enum-usage
clang-tidy/rename_check.py {misc,bugprone}-suspicious-missing-comma
Reviewers: hokein, sammccall, aaron.ballman
Subscribers: klimek, cfe-commits, mgorny
Differential Revision: https://reviews.llvm.org/D43868
llvm-svn: 326384
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/StringIntegerAssignmentCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/misc/StringIntegerAssignmentCheck.cpp | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/StringIntegerAssignmentCheck.cpp b/clang-tools-extra/clang-tidy/misc/StringIntegerAssignmentCheck.cpp deleted file mode 100644 index 4e8c488d0c9..00000000000 --- a/clang-tools-extra/clang-tidy/misc/StringIntegerAssignmentCheck.cpp +++ /dev/null @@ -1,86 +0,0 @@ -//===--- StringIntegerAssignmentCheck.cpp - clang-tidy---------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "StringIntegerAssignmentCheck.h" -#include "clang/AST/ASTContext.h" -#include "clang/ASTMatchers/ASTMatchFinder.h" -#include "clang/Lex/Lexer.h" - -using namespace clang::ast_matchers; - -namespace clang { -namespace tidy { -namespace misc { - -void StringIntegerAssignmentCheck::registerMatchers(MatchFinder *Finder) { - if (!getLangOpts().CPlusPlus) - return; - Finder->addMatcher( - cxxOperatorCallExpr( - anyOf(hasOverloadedOperatorName("="), - hasOverloadedOperatorName("+=")), - 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"))), - unless(isInTemplateInstantiation())), - this); -} - -void StringIntegerAssignmentCheck::check( - const MatchFinder::MatchResult &Result) { - const auto *Argument = Result.Nodes.getNodeAs<Expr>("expr"); - SourceLocation Loc = Argument->getLocStart(); - - auto Diag = - diag(Loc, "an integer is interpreted as a character code when assigning " - "it to a string; if this is intended, cast the integer to the " - "appropriate character type; if you want a string " - "representation, use the appropriate conversion facility"); - - if (Loc.isMacroID()) - return; - - auto CharType = *Result.Nodes.getNodeAs<QualType>("type"); - bool IsWideCharType = CharType->isWideCharType(); - if (!CharType->isCharType() && !IsWideCharType) - return; - bool IsOneDigit = false; - bool IsLiteral = false; - if (const auto *Literal = dyn_cast<IntegerLiteral>(Argument)) { - IsOneDigit = Literal->getValue().getLimitedValue() < 10; - IsLiteral = true; - } - - SourceLocation EndLoc = Lexer::getLocForEndOfToken( - Argument->getLocEnd(), 0, *Result.SourceManager, getLangOpts()); - if (IsOneDigit) { - Diag << FixItHint::CreateInsertion(Loc, IsWideCharType ? "L'" : "'") - << FixItHint::CreateInsertion(EndLoc, "'"); - return; - } - if (IsLiteral) { - Diag << FixItHint::CreateInsertion(Loc, IsWideCharType ? "L\"" : "\"") - << FixItHint::CreateInsertion(EndLoc, "\""); - return; - } - - if (getLangOpts().CPlusPlus11) { - Diag << FixItHint::CreateInsertion(Loc, IsWideCharType ? "std::to_wstring(" - : "std::to_string(") - << FixItHint::CreateInsertion(EndLoc, ")"); - } -} - -} // namespace misc -} // namespace tidy -} // namespace clang |