]> granicus.if.org Git - clang/commitdiff
Add a matcher for SubstNonTypeTemplateParmExpr.
authorAlexander Kornienko <alexfh@google.com>
Sun, 29 Jun 2014 22:18:53 +0000 (22:18 +0000)
committerAlexander Kornienko <alexfh@google.com>
Sun, 29 Jun 2014 22:18:53 +0000 (22:18 +0000)
Reviewers: klimek, djasper

Reviewed By: djasper

Subscribers: klimek, aemerson, cfe-commits

Differential Revision: http://reviews.llvm.org/D4327

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212001 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/ASTMatchers/ASTMatchers.h
unittests/ASTMatchers/ASTMatchersTest.cpp

index 6583679f57e5f0740e5a368be73554131d087be8..406ec93114a87fbc6cf4df0fccd60a7bbf65e37a 100644 (file)
@@ -686,10 +686,23 @@ exprWithCleanups;
 ///   struct B { int x, y; };
 ///   B b = { 5, 6 };
 /// \endcode
-/// initList()
+/// initListExpr()
 ///   matches "{ 1, 2 }" and "{ 5, 6 }"
 const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr> initListExpr;
 
+/// \brief Matches substitutions of non-type template parameters.
+///
+/// Given
+/// \code
+///   template <int N>
+///   struct A { static const int n = N; };
+///   struct B : public A<42> {};
+/// \endcode
+/// substNonTypeTemplateParmExpr()
+///   matches "N" in the right-hand side of "static const int n = N;"
+const internal::VariadicDynCastAllOfMatcher<Stmt, SubstNonTypeTemplateParmExpr>
+substNonTypeTemplateParmExpr;
+
 /// \brief Matches using declarations.
 ///
 /// Given
index d247fac29f1fada36f6e4f446d168346c502a996..e424acdaacdc36f14c1d2c64b37a83f0c8afc070 100644 (file)
@@ -1017,6 +1017,17 @@ TEST(Matcher, ForRange) {
                          forRangeStmt()));
 }
 
+TEST(Matcher, SubstNonTypeTemplateParm) {
+  EXPECT_FALSE(matches("template<int N>\n"
+                       "struct A {  static const int n = 0; };\n"
+                       "struct B : public A<42> {};",
+                       substNonTypeTemplateParmExpr()));
+  EXPECT_TRUE(matches("template<int N>\n"
+                      "struct A {  static const int n = N; };\n"
+                      "struct B : public A<42> {};",
+                      substNonTypeTemplateParmExpr()));
+}
+
 TEST(Matcher, UserDefinedLiteral) {
   EXPECT_TRUE(matches("constexpr char operator \"\" _inc (const char i) {"
                       "  return i + 1;"