njames93 updated this revision to Diff 410186. njames93 marked an inline comment as done. njames93 added a comment.
Update description and release notes. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D118900/new/ https://reviews.llvm.org/D118900 Files: clang/docs/LibASTMatchersReference.html clang/docs/ReleaseNotes.rst clang/include/clang/ASTMatchers/ASTMatchers.h clang/unittests/ASTMatchers/ASTMatchersInternalTest.cpp
Index: clang/unittests/ASTMatchers/ASTMatchersInternalTest.cpp =================================================================== --- clang/unittests/ASTMatchers/ASTMatchersInternalTest.cpp +++ clang/unittests/ASTMatchers/ASTMatchersInternalTest.cpp @@ -197,6 +197,8 @@ functionDecl(isInline(), hasName("f")))); EXPECT_TRUE(matches("namespace n { inline namespace m {} }", namespaceDecl(isInline(), hasName("m")))); + EXPECT_TRUE(matches("inline int Foo = 5;", + varDecl(isInline(), hasName("Foo")), {Lang_CXX17})); } // FIXME: Figure out how to specify paths so the following tests pass on Index: clang/include/clang/ASTMatchers/ASTMatchers.h =================================================================== --- clang/include/clang/ASTMatchers/ASTMatchers.h +++ clang/include/clang/ASTMatchers/ASTMatchers.h @@ -7673,7 +7673,7 @@ return InnerMatcher.matches(*ES.getExpr(), Finder, Builder); } -/// Matches function and namespace declarations that are marked with +/// Matches functions, variables and namespace declarations that are marked with /// the inline keyword. /// /// Given @@ -7683,18 +7683,22 @@ /// namespace n { /// inline namespace m {} /// } +/// inline int Foo = 5; /// \endcode /// functionDecl(isInline()) will match ::f(). /// namespaceDecl(isInline()) will match n::m. -AST_POLYMORPHIC_MATCHER(isInline, - AST_POLYMORPHIC_SUPPORTED_TYPES(NamespaceDecl, - FunctionDecl)) { +/// varDecl(isInline()) will match Foo; +AST_POLYMORPHIC_MATCHER(isInline, AST_POLYMORPHIC_SUPPORTED_TYPES(NamespaceDecl, + FunctionDecl, + VarDecl)) { // This is required because the spelling of the function used to determine // whether inline is specified or not differs between the polymorphic types. if (const auto *FD = dyn_cast<FunctionDecl>(&Node)) return FD->isInlineSpecified(); - else if (const auto *NSD = dyn_cast<NamespaceDecl>(&Node)) + if (const auto *NSD = dyn_cast<NamespaceDecl>(&Node)) return NSD->isInline(); + if (const auto *VD = dyn_cast<VarDecl>(&Node)) + return VD->isInline(); llvm_unreachable("Not a valid polymorphic type"); } Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -177,6 +177,8 @@ AST Matchers ------------ +- Expanded ``isInline`` narrowing matcher to support c++17 inline variables. + clang-format ------------ Index: clang/docs/LibASTMatchersReference.html =================================================================== --- clang/docs/LibASTMatchersReference.html +++ clang/docs/LibASTMatchersReference.html @@ -4322,7 +4322,7 @@ <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>></td><td class="name" onclick="toggle('isInline1')"><a name="isInline1Anchor">isInline</a></td><td></td></tr> -<tr><td colspan="4" class="doc" id="isInline1"><pre>Matches function and namespace declarations that are marked with +<tr><td colspan="4" class="doc" id="isInline1"><pre>Matches functions, variables and namespace declarations that are marked with the inline keyword. Given @@ -4331,8 +4331,10 @@ namespace n { inline namespace m {} } + inline int Foo = 5; functionDecl(isInline()) will match ::f(). namespaceDecl(isInline()) will match n::m. +varDecl(isInline()) will match Foo; </pre></td></tr> @@ -4697,7 +4699,7 @@ <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1NamespaceDecl.html">NamespaceDecl</a>></td><td class="name" onclick="toggle('isInline0')"><a name="isInline0Anchor">isInline</a></td><td></td></tr> -<tr><td colspan="4" class="doc" id="isInline0"><pre>Matches function and namespace declarations that are marked with +<tr><td colspan="4" class="doc" id="isInline0"><pre>Matches functions, variables and namespace declarations that are marked with the inline keyword. Given @@ -4706,8 +4708,10 @@ namespace n { inline namespace m {} } + inline int Foo = 5; functionDecl(isInline()) will match ::f(). namespaceDecl(isInline()) will match n::m. +varDecl(isInline()) will match Foo; </pre></td></tr> @@ -5728,6 +5732,23 @@ </pre></td></tr> +<tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>></td><td class="name" onclick="toggle('isInline2')"><a name="isInline2Anchor">isInline</a></td><td></td></tr> +<tr><td colspan="4" class="doc" id="isInline2"><pre>Matches functions, variables and namespace declarations that are marked with +the inline keyword. + +Given + inline void f(); + void g(); + namespace n { + inline namespace m {} + } + inline int Foo = 5; +functionDecl(isInline()) will match ::f(). +namespaceDecl(isInline()) will match n::m. +varDecl(isInline()) will match Foo; +</pre></td></tr> + + <tr><td>Matcher<<a href="https://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>></td><td class="name" onclick="toggle('isStaticLocal0')"><a name="isStaticLocal0Anchor">isStaticLocal</a></td><td></td></tr> <tr><td colspan="4" class="doc" id="isStaticLocal0"><pre>Matches a static variable with local scope.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits