From 9e41b5cc1252846b7e395cb10ebe1faaa481dbc3 Mon Sep 17 00:00:00 2001 From: Alexander Kornienko Date: Sun, 29 Jun 2014 22:18:53 +0000 Subject: [PATCH] Add a matcher for SubstNonTypeTemplateParmExpr. Reviewers: klimek, djasper Reviewed By: djasper Subscribers: klimek, aemerson, cfe-commits Differential Revision: http://reviews.llvm.org/D4327 llvm-svn: 212001 --- clang/include/clang/ASTMatchers/ASTMatchers.h | 15 ++++++++++++++- clang/unittests/ASTMatchers/ASTMatchersTest.cpp | 11 +++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/ASTMatchers/ASTMatchers.h b/clang/include/clang/ASTMatchers/ASTMatchers.h index 6583679..406ec93 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchers.h +++ b/clang/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/clang/unittests/ASTMatchers/ASTMatchersTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp index d247fac..e424acd 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/clang/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;" -- 2.7.4