summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2015-10-05 19:44:42 +0000
committerAaron Ballman <aaron@aaronballman.com>2015-10-05 19:44:42 +0000
commit478a8eb2b6da49b2f018c1ed925c9e4ee4213ae8 (patch)
tree19705a156d2d6a2768a0916bd0f3ad7e12583729 /clang
parentae24400424ab8005e3ddc656ba629c11282fa41b (diff)
downloadbcm5719-llvm-478a8eb2b6da49b2f018c1ed925c9e4ee4213ae8.tar.gz
bcm5719-llvm-478a8eb2b6da49b2f018c1ed925c9e4ee4213ae8.zip
Adding an AST node matcher for NonTypeTemplateParmDecl objects.
llvm-svn: 249341
Diffstat (limited to 'clang')
-rw-r--r--clang/docs/LibASTMatchersReference.html12
-rw-r--r--clang/include/clang/ASTMatchers/ASTMatchers.h12
-rw-r--r--clang/unittests/ASTMatchers/ASTMatchersTest.cpp7
3 files changed, 30 insertions, 1 deletions
diff --git a/clang/docs/LibASTMatchersReference.html b/clang/docs/LibASTMatchersReference.html
index cab709e3a64..0d6d18d60e9 100644
--- a/clang/docs/LibASTMatchersReference.html
+++ b/clang/docs/LibASTMatchersReference.html
@@ -316,6 +316,16 @@ namespaceDecl()
</pre></td></tr>
+<tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('nonTypeTemplateParmDecl0')"><a name="nonTypeTemplateParmDecl0Anchor">nonTypeTemplateParmDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1NonTypeTemplateParmDecl.html">NonTypeTemplateParmDecl</a>&gt;...</td></tr>
+<tr><td colspan="4" class="doc" id="nonTypeTemplateParmDecl0"><pre>Matches non-type template parameter declarations.
+
+Given
+ template &lt;typename T, int N&gt; struct C {};
+templateArgument()
+ matches 'N', but not 'T'.
+</pre></td></tr>
+
+
<tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Decl.html">Decl</a>&gt;</td><td class="name" onclick="toggle('objcInterfaceDecl0')"><a name="objcInterfaceDecl0Anchor">objcInterfaceDecl</a></td><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1ObjCInterfaceDecl.html">ObjCInterfaceDecl</a>&gt;...</td></tr>
<tr><td colspan="4" class="doc" id="objcInterfaceDecl0"><pre>Matches Objective-C interface declarations.
@@ -2213,7 +2223,7 @@ Usable as: Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1Functi
<tr><td>Matcher&lt<a href="http://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html">FunctionDecl</a>&gt;</td><td class="name" onclick="toggle('isVariadic0')"><a name="isVariadic0Anchor">isVariadic</a></td><td></td></tr>
<tr><td colspan="4" class="doc" id="isVariadic0"><pre>Matches if a function declaration is variadic.
-Example matches f, but not g or h. The function i will not match, event when
+Example matches f, but not g or h. The function i will not match, even when
compiled in C mode.
void f(...);
void g(int);
diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h
index cfed1fd16de..8b97df6ce63 100644
--- a/clang/include/clang/ASTMatchers/ASTMatchers.h
+++ b/clang/include/clang/ASTMatchers/ASTMatchers.h
@@ -412,6 +412,18 @@ const internal::VariadicAllOfMatcher<CXXCtorInitializer> cxxCtorInitializer;
/// matches 'int' in C<int>.
const internal::VariadicAllOfMatcher<TemplateArgument> templateArgument;
+/// \brief Matches non-type template parameter declarations.
+///
+/// Given
+/// \code
+/// template <typename T, int N> struct C {};
+/// \endcode
+/// templateArgument()
+/// matches 'N', but not 'T'.
+const internal::VariadicDynCastAllOfMatcher<
+ Decl,
+ NonTypeTemplateParmDecl> nonTypeTemplateParmDecl;
+
/// \brief Matches public C++ declarations.
///
/// Given
diff --git a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp
index a15d6ac2be5..4954402e83b 100644
--- a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp
+++ b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp
@@ -1172,6 +1172,13 @@ TEST(Matcher, SubstNonTypeTemplateParm) {
substNonTypeTemplateParmExpr()));
}
+TEST(Matcher, NonTypeTemplateParmDecl) {
+ EXPECT_TRUE(matches("template <int N> void f();",
+ nonTypeTemplateParmDecl(hasName("N"))));
+ EXPECT_TRUE(
+ notMatches("template <typename T> void f();", nonTypeTemplateParmDecl()));
+}
+
TEST(Matcher, UserDefinedLiteral) {
EXPECT_TRUE(matches("constexpr char operator \"\" _inc (const char i) {"
" return i + 1;"
OpenPOWER on IntegriCloud