summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp
diff options
context:
space:
mode:
authorAlexander Kornienko <alexfh@google.com>2015-08-31 14:47:14 +0000
committerAlexander Kornienko <alexfh@google.com>2015-08-31 14:47:14 +0000
commit54f3657448fd127fd00162058c9f1f56f966fc18 (patch)
tree294a6497579e8e3bed85a430569ff0dfa8aa72b6 /clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp
parentcd7c3e671beb6484b2657f12faa90d75e224ee33 (diff)
downloadbcm5719-llvm-54f3657448fd127fd00162058c9f1f56f966fc18.tar.gz
bcm5719-llvm-54f3657448fd127fd00162058c9f1f56f966fc18.zip
[clang-tidy] misc-assert-side-effect: support assert macros defined through other macros
llvm-svn: 246446
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp32
1 files changed, 18 insertions, 14 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp b/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp
index 6ccfb6ad52b..fac919a48cf 100644
--- a/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/AssertSideEffectCheck.cpp
@@ -96,22 +96,26 @@ void AssertSideEffectCheck::registerMatchers(MatchFinder *Finder) {
}
void AssertSideEffectCheck::check(const MatchFinder::MatchResult &Result) {
- const ASTContext *ASTCtx = Result.Context;
- const auto *CondStmt = Result.Nodes.getNodeAs<Stmt>("condStmt");
- SourceLocation Loc = CondStmt->getLocStart();
-
- if (!Loc.isValid() || !Loc.isMacroID())
- return;
-
- StringRef MacroName = Lexer::getImmediateMacroName(
- Loc, ASTCtx->getSourceManager(), ASTCtx->getLangOpts());
-
- // Check if this macro is an assert.
- if (std::find(AssertMacros.begin(), AssertMacros.end(), MacroName) ==
- AssertMacros.end())
+ const SourceManager &SM = *Result.SourceManager;
+ const LangOptions LangOpts = Result.Context->getLangOpts();
+ SourceLocation Loc = Result.Nodes.getNodeAs<Stmt>("condStmt")->getLocStart();
+
+ StringRef AssertMacroName;
+ while (Loc.isValid() && Loc.isMacroID()) {
+ StringRef MacroName = Lexer::getImmediateMacroName(Loc, SM, LangOpts);
+
+ // Check if this macro is an assert.
+ if (std::find(AssertMacros.begin(), AssertMacros.end(), MacroName) !=
+ AssertMacros.end()) {
+ AssertMacroName = MacroName;
+ break;
+ }
+ Loc = SM.getImmediateMacroCallerLoc(Loc);
+ }
+ if (AssertMacroName.empty())
return;
- diag(Loc, "found " + MacroName.str() + "() with side effect");
+ diag(Loc, "found " + AssertMacroName.str() + "() with side effect");
}
} // namespace tidy
OpenPOWER on IntegriCloud