]> granicus.if.org Git - clang/commitdiff
Fix refersToDeclaration()-matcher and add missing test case. This was
authorDaniel Jasper <djasper@google.com>
Sat, 29 Sep 2012 15:55:18 +0000 (15:55 +0000)
committerDaniel Jasper <djasper@google.com>
Sat, 29 Sep 2012 15:55:18 +0000 (15:55 +0000)
broken as of r164656 as TemplateArgument::getAsDecl() now asserts
instead of returning NULL for other template arugment kinds.

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

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

index 3015b0841f2406195c8891d61b37218ff02f3387..6507433e3322e6d5dda03c085b86f376e9ab74c5 100644 (file)
@@ -342,8 +342,8 @@ AST_MATCHER_P(TemplateArgument, refersToType,
 ///     \c B::next
 AST_MATCHER_P(TemplateArgument, refersToDeclaration,
               internal::Matcher<Decl>, InnerMatcher) {
-  if (const Decl *Declaration = Node.getAsDecl())
-    return InnerMatcher.matches(*Declaration, Finder, Builder);
+  if (Node.getKind() == TemplateArgument::Declaration)
+    return InnerMatcher.matches(*Node.getAsDecl(), Finder, Builder);
   return false;
 }
 
index 69e61f296ff7802dcabb6be4e0bb207b489469d4..b49d082501b6f150c11775dd7600f9d05f05d308 100644 (file)
@@ -1236,6 +1236,12 @@ TEST(Matcher, MatchesDeclarationReferenceTemplateArgument) {
       "A<&B::next> a;",
       classTemplateSpecializationDecl(hasAnyTemplateArgument(
           refersToDeclaration(fieldDecl(hasName("next")))))));
+
+  EXPECT_TRUE(notMatches(
+      "template <typename T> struct A {};"
+      "A<int> a;",
+      classTemplateSpecializationDecl(hasAnyTemplateArgument(
+          refersToDeclaration(decl())))));
 }
 
 TEST(Matcher, MatchesSpecificArgument) {