This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rGb091af790f19: [ASTMatchers] Made isExpandedFromMacro Polymorphic (authored by njames93).
Changed prior to commit: https://reviews.llvm.org/D90303?vs=301258&id=302566#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90303/new/ https://reviews.llvm.org/D90303 Files: clang/docs/LibASTMatchersReference.html clang/include/clang/ASTMatchers/ASTMatchers.h clang/lib/ASTMatchers/GtestMatchers.cpp clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
Index: clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp =================================================================== --- clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp +++ clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp @@ -142,6 +142,22 @@ 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(IsExpandedFromMacro, IsExpandedFromMacro_MatchesTypelocs) { + StringRef input = R"cc( +#define MY_TYPE int + void Test() { MY_TYPE i = 4; } + )cc"; + EXPECT_TRUE(matches(input, typeLoc(isExpandedFromMacro("MY_TYPE")))); +} + TEST_P(ASTMatchersTest, AllOf) { const char Program[] = "struct T { };" "int f(int, struct T*, int, int);" Index: clang/lib/ASTMatchers/GtestMatchers.cpp =================================================================== --- clang/lib/ASTMatchers/GtestMatchers.cpp +++ clang/lib/ASTMatchers/GtestMatchers.cpp @@ -89,14 +89,14 @@ internal::BindableMatcher<Stmt> gtestAssert(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<Stmt> 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)); } Index: clang/include/clang/ASTMatchers/ASTMatchers.h =================================================================== --- clang/include/clang/ASTMatchers/ASTMatchers.h +++ 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(); Index: clang/docs/LibASTMatchersReference.html =================================================================== --- clang/docs/LibASTMatchersReference.html +++ clang/docs/LibASTMatchersReference.html @@ -3042,6 +3042,14 @@ </pre></td></tr> +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('isExpandedFromMacro0')"><a name="isExpandedFromMacro0Anchor">isExpandedFromMacro</a></td><td>std::string MacroName</td></tr> +<tr><td colspan="4" class="doc" id="isExpandedFromMacro0"><pre>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. +</pre></td></tr> + + <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>></td><td class="name" onclick="toggle('isExpansionInFileMatching0')"><a name="isExpansionInFileMatching0Anchor">isExpansionInFileMatching</a></td><td>StringRef RegExp, Regex::RegexFlags Flags = NoFlags</td></tr> <tr><td colspan="4" class="doc" id="isExpansionInFileMatching0"><pre>Matches AST nodes that were expanded within files whose name is partially matching a given regex. @@ -4293,14 +4301,11 @@ </pre></td></tr> -<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>></td><td class="name" onclick="toggle('isExpandedFromMacro0')"><a name="isExpandedFromMacro0Anchor">isExpandedFromMacro</a></td><td>llvm::StringRef MacroName</td></tr> -<tr><td colspan="4" class="doc" id="isExpandedFromMacro0"><pre>Matches statements that are (transitively) expanded from the named macro. +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1Stmt.html">Stmt</a>></td><td class="name" onclick="toggle('isExpandedFromMacro1')"><a name="isExpandedFromMacro1Anchor">isExpandedFromMacro</a></td><td>std::string MacroName</td></tr> +<tr><td colspan="4" class="doc" id="isExpandedFromMacro1"><pre>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. </pre></td></tr> @@ -4490,6 +4495,14 @@ </pre></td></tr> +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td class="name" onclick="toggle('isExpandedFromMacro2')"><a name="isExpandedFromMacro2Anchor">isExpandedFromMacro</a></td><td>std::string MacroName</td></tr> +<tr><td colspan="4" class="doc" id="isExpandedFromMacro2"><pre>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. +</pre></td></tr> + + <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1TypeLoc.html">TypeLoc</a>></td><td class="name" onclick="toggle('isExpansionInFileMatching2')"><a name="isExpansionInFileMatching2Anchor">isExpansionInFileMatching</a></td><td>StringRef RegExp, Regex::RegexFlags Flags = NoFlags</td></tr> <tr><td colspan="4" class="doc" id="isExpansionInFileMatching2"><pre>Matches AST nodes that were expanded within files whose name is partially matching a given regex.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits