diff --git a/clang/docs/LibASTMatchersReference.html b/clang/docs/LibASTMatchersReference.html --- a/clang/docs/LibASTMatchersReference.html +++ b/clang/docs/LibASTMatchersReference.html @@ -3042,6 +3042,14 @@ +
Matches statements that are (transitively) expanded from the named macro. +Does not match if only part of the statement is expanded from that macro or +if different parts of the the statement are expanded from different +appearances of the macro. +
Matches AST nodes that were expanded within files whose name is partially matching a given regex. @@ -4293,14 +4301,11 @@
Matches statements that are (transitively) expanded from the named macro. ++ Matcher<Stmt> isExpandedFromMacro std::string MacroName @@ -4490,6 +4495,14 @@ Matches statements that are (transitively) expanded from the named macro. Does not match if only part of the statement is expanded from that macro or if different parts of the the statement are expanded from different appearances of the macro. - -FIXME: Change to be a polymorphic matcher that works on any syntactic -node. There's nothing `Stmt`-specific about it.
Matches statements that are (transitively) expanded from the named macro. +Does not match if only part of the statement is expanded from that macro or +if different parts of the the statement are expanded from different +appearances of the macro. +
Matches AST nodes that were expanded within files whose name is partially matching a given regex. diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/include/clang/ASTMatchers/ASTMatchers.h @@ -308,10 +308,9 @@ /// Does not match if only part of the statement is expanded from that macro or /// if different parts of the the statement are expanded from different /// appearances of the macro. -/// -/// FIXME: Change to be a polymorphic matcher that works on any syntactic -/// node. There's nothing `Stmt`-specific about it. -AST_MATCHER_P(Stmt, isExpandedFromMacro, llvm::StringRef, MacroName) { +AST_POLYMORPHIC_MATCHER_P(isExpandedFromMacro, + AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc), + std::string, MacroName) { // Verifies that the statement' beginning and ending are both expanded from // the same instance of the given macro. auto& Context = Finder->getASTContext(); diff --git a/clang/lib/ASTMatchers/GtestMatchers.cpp b/clang/lib/ASTMatchers/GtestMatchers.cpp --- a/clang/lib/ASTMatchers/GtestMatchers.cpp +++ b/clang/lib/ASTMatchers/GtestMatchers.cpp @@ -89,14 +89,14 @@ internal::BindableMatchergtestAssert(GtestCmp Cmp, StatementMatcher Left, StatementMatcher Right) { return callExpr(callee(getComparisonDecl(Cmp)), - isExpandedFromMacro(getAssertMacro(Cmp)), + isExpandedFromMacro(getAssertMacro(Cmp).str()), hasArgument(2, Left), hasArgument(3, Right)); } internal::BindableMatcher gtestExpect(GtestCmp Cmp, StatementMatcher Left, StatementMatcher Right) { return callExpr(callee(getComparisonDecl(Cmp)), - isExpandedFromMacro(getExpectMacro(Cmp)), + isExpandedFromMacro(getExpectMacro(Cmp).str()), hasArgument(2, Left), hasArgument(3, Right)); } diff --git a/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp --- a/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -142,6 +142,14 @@ EXPECT_TRUE(notMatches(input, binaryOperator(isExpandedFromMacro("FOUR")))); } +TEST(IsExpandedFromMacro, IsExpandedFromMacro_MatchesDecls) { + StringRef input = R"cc( +#define MY_MACRO(a) int i = a; + void Test() { MY_MACRO(4); } + )cc"; + EXPECT_TRUE(matches(input, varDecl(isExpandedFromMacro("MY_MACRO")))); +} + TEST_P(ASTMatchersTest, AllOf) { const char Program[] = "struct T { };" "int f(int, struct T*, int, int);"