summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/misc/LambdaFunctionNameCheck.cpp
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2018-02-28 14:47:20 +0000
committerAlexander Kornienko <alexfh@google.com>2018-02-28 14:47:20 +0000
commita1a29336340080d33893f82d5bf369df11615d58 (patch)
tree201f199921c8ee58b8abe9665390d829128af9f8 /clang-tools-extra/clang-tidy/misc/LambdaFunctionNameCheck.cpp
parent7e4eee98311dcecc782a93265e62934570e096c1 (diff)
downloadbcm5719-llvm-a1a29336340080d33893f82d5bf369df11615d58.tar.gz
bcm5719-llvm-a1a29336340080d33893f82d5bf369df11615d58.zip
Rename a few checks from misc- to bugprone-.
Summary: rename_check.py {misc,bugprone}-forwarding-reference-overload rename_check.py {misc,bugprone}-macro-repeated-side-effects rename_check.py {misc,bugprone}-lambda-function-name rename_check.py {misc,bugprone}-misplaced-widening-cast Reviewers: hokein, sammccall, aaron.ballman Reviewed By: aaron.ballman Subscribers: klimek, cfe-commits, mgorny Differential Revision: https://reviews.llvm.org/D43867 llvm-svn: 326327
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/LambdaFunctionNameCheck.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/misc/LambdaFunctionNameCheck.cpp99
1 files changed, 0 insertions, 99 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/LambdaFunctionNameCheck.cpp b/clang-tools-extra/clang-tidy/misc/LambdaFunctionNameCheck.cpp
deleted file mode 100644
index 85dad5c4fd4..00000000000
--- a/clang-tools-extra/clang-tidy/misc/LambdaFunctionNameCheck.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-//===--- LambdaFunctionNameCheck.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 "LambdaFunctionNameCheck.h"
-#include "clang/AST/ASTContext.h"
-#include "clang/ASTMatchers/ASTMatchFinder.h"
-#include "clang/Frontend/CompilerInstance.h"
-#include "clang/Lex/MacroInfo.h"
-#include "clang/Lex/Preprocessor.h"
-
-using namespace clang::ast_matchers;
-
-namespace clang {
-namespace tidy {
-namespace misc {
-
-namespace {
-
-// Keep track of macro expansions that contain both __FILE__ and __LINE__. If
-// such a macro also uses __func__ or __FUNCTION__, we don't want to issue a
-// warning because __FILE__ and __LINE__ may be useful even if __func__ or
-// __FUNCTION__ is not, especially if the macro could be used in the context of
-// either a function body or a lambda body.
-class MacroExpansionsWithFileAndLine : public PPCallbacks {
-public:
- explicit MacroExpansionsWithFileAndLine(
- LambdaFunctionNameCheck::SourceRangeSet *SME)
- : SuppressMacroExpansions(SME) {}
-
- void MacroExpands(const Token &MacroNameTok,
- const MacroDefinition &MD, SourceRange Range,
- const MacroArgs *Args) override {
- bool has_file = false;
- bool has_line = false;
- for (const auto& T : MD.getMacroInfo()->tokens()) {
- if (T.is(tok::identifier)) {
- StringRef IdentName = T.getIdentifierInfo()->getName();
- if (IdentName == "__FILE__") {
- has_file = true;
- } else if (IdentName == "__LINE__") {
- has_line = true;
- }
- }
- }
- if (has_file && has_line) {
- SuppressMacroExpansions->insert(Range);
- }
- }
-
-private:
- LambdaFunctionNameCheck::SourceRangeSet* SuppressMacroExpansions;
-};
-
-} // namespace
-
-void LambdaFunctionNameCheck::registerMatchers(MatchFinder *Finder) {
- // Match on PredefinedExprs inside a lambda.
- Finder->addMatcher(predefinedExpr(hasAncestor(lambdaExpr())).bind("E"),
- this);
-}
-
-void LambdaFunctionNameCheck::registerPPCallbacks(CompilerInstance &Compiler) {
- Compiler.getPreprocessor().addPPCallbacks(
- llvm::make_unique<MacroExpansionsWithFileAndLine>(
- &SuppressMacroExpansions));
-}
-
-void LambdaFunctionNameCheck::check(const MatchFinder::MatchResult &Result) {
- const auto *E = Result.Nodes.getNodeAs<PredefinedExpr>("E");
- if (E->getIdentType() != PredefinedExpr::Func &&
- E->getIdentType() != PredefinedExpr::Function) {
- // We don't care about other PredefinedExprs.
- return;
- }
- if (E->getLocation().isMacroID()) {
- auto ER =
- Result.SourceManager->getImmediateExpansionRange(E->getLocation());
- if (SuppressMacroExpansions.find(SourceRange(ER.first, ER.second)) !=
- SuppressMacroExpansions.end()) {
- // This is a macro expansion for which we should not warn.
- return;
- }
- }
- diag(E->getLocation(),
- "inside a lambda, '%0' expands to the name of the function call "
- "operator; consider capturing the name of the enclosing function "
- "explicitly")
- << PredefinedExpr::getIdentTypeName(E->getIdentType());
-}
-
-} // namespace misc
-} // namespace tidy
-} // namespace clang
OpenPOWER on IntegriCloud