From: Alexander Kornienko Date: Sun, 29 Jun 2014 22:18:53 +0000 (+0000) Subject: Add a matcher for SubstNonTypeTemplateParmExpr. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e2ed64f15bb238ca2cd6cd3f62a7c80a5b748b8;p=clang Add a matcher for SubstNonTypeTemplateParmExpr. 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 --- diff --git a/include/clang/ASTMatchers/ASTMatchers.h b/include/clang/ASTMatchers/ASTMatchers.h index 6583679f57..406ec93114 100644 --- a/include/clang/ASTMatchers/ASTMatchers.h +++ b/include/clang/ASTMatchers/ASTMatchers.h @@ -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 initListExpr; +/// \brief Matches substitutions of non-type template parameters. +/// +/// Given +/// \code +/// template +/// 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 +substNonTypeTemplateParmExpr; + /// \brief Matches using declarations. /// /// Given diff --git a/unittests/ASTMatchers/ASTMatchersTest.cpp b/unittests/ASTMatchers/ASTMatchersTest.cpp index d247fac29f..e424acdaac 100644 --- a/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/unittests/ASTMatchers/ASTMatchersTest.cpp @@ -1017,6 +1017,17 @@ TEST(Matcher, ForRange) { forRangeStmt())); } +TEST(Matcher, SubstNonTypeTemplateParm) { + EXPECT_FALSE(matches("template\n" + "struct A { static const int n = 0; };\n" + "struct B : public A<42> {};", + substNonTypeTemplateParmExpr())); + EXPECT_TRUE(matches("template\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;"