diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2014-02-20 19:18:03 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2014-02-20 19:18:03 +0000 |
commit | 564597fd26a74c968ff0281775071a37ef99d50b (patch) | |
tree | 3bb20ccc4b73ae8afc4874b28e3245f15bf2cb15 /clang/unittests/ASTMatchers/ASTMatchersTest.cpp | |
parent | b7a40081e99391d3d7ed406bd9dfb6b921ce74cc (diff) | |
download | bcm5719-llvm-564597fd26a74c968ff0281775071a37ef99d50b.tar.gz bcm5719-llvm-564597fd26a74c968ff0281775071a37ef99d50b.zip |
Add TemplateSpecializationType polymorphism for hasTemplateArgument and
hasAnyTemplateArgument, and (out of necessity) an isExpr matcher.
Also updates the TemplateArgument doxygen to reflect reality for
non-canonical template arguments.
Differential Revision: http://llvm-reviews.chandlerc.com/D2810
llvm-svn: 201804
Diffstat (limited to 'clang/unittests/ASTMatchers/ASTMatchersTest.cpp')
-rw-r--r-- | clang/unittests/ASTMatchers/ASTMatchersTest.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp index d84e6a6ef9d..cf77f2f4dd5 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersTest.cpp @@ -1530,6 +1530,19 @@ TEST(Matcher, MatchesDeclarationReferenceTemplateArgument) { "A<int> a;", classTemplateSpecializationDecl(hasAnyTemplateArgument( refersToDeclaration(decl()))))); + + EXPECT_TRUE(matches( + "struct B { int next; };" + "template<int(B::*next_ptr)> struct A {};" + "A<&B::next> a;", + templateSpecializationType(hasAnyTemplateArgument(isExpr( + hasDescendant(declRefExpr(to(fieldDecl(hasName("next")))))))))); + + EXPECT_TRUE(notMatches( + "template <typename T> struct A {};" + "A<int> a;", + templateSpecializationType(hasAnyTemplateArgument( + refersToDeclaration(decl()))))); } TEST(Matcher, MatchesSpecificArgument) { @@ -1543,6 +1556,17 @@ TEST(Matcher, MatchesSpecificArgument) { "A<int, bool> a;", classTemplateSpecializationDecl(hasTemplateArgument( 1, refersToType(asString("int")))))); + + EXPECT_TRUE(matches( + "template<typename T, typename U> class A {};" + "A<bool, int> a;", + templateSpecializationType(hasTemplateArgument( + 1, refersToType(asString("int")))))); + EXPECT_TRUE(notMatches( + "template<typename T, typename U> class A {};" + "A<int, bool> a;", + templateSpecializationType(hasTemplateArgument( + 1, refersToType(asString("int")))))); } TEST(Matcher, MatchesAccessSpecDecls) { |