On Wed, Feb 21, 2018 at 8:56 AM, Eric Liu <ioe...@google.com> wrote: > Oops, I only saw this after landing the patch. I'll send another one to > update the doc. Sorry about that!
No worries! I didn't see the patch until after the commit anyway. Thanks for taking care of it! ~Aaron > > On Wed, Feb 21, 2018 at 2:54 PM Aaron Ballman <aa...@aaronballman.com> > wrote: >> >> On Wed, Feb 21, 2018 at 8:51 AM, Eric Liu via cfe-commits >> <cfe-commits@lists.llvm.org> wrote: >> > Author: ioeric >> > Date: Wed Feb 21 05:51:27 2018 >> > New Revision: 325678 >> > >> > URL: http://llvm.org/viewvc/llvm-project?rev=325678&view=rev >> > Log: >> > [ASTMatchers] isTemplateInstantiation: also match explicit instantiation >> > declaration. >> > >> > Summary: >> > Example: >> > template <typename T> class X {}; class A {}; >> > // Explicit instantiation declaration. >> > extern template class X<A>; >> > >> > Reviewers: bkramer >> > >> > Subscribers: klimek, cfe-commits >> > >> > Differential Revision: https://reviews.llvm.org/D43567 >> > >> > Modified: >> > cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h >> > cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp >> >> Please regenerate the AST matcher documentation as well. >> >> ~Aaron >> >> > >> > Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=325678&r1=325677&r2=325678&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original) >> > +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Wed Feb 21 >> > 05:51:27 2018 >> > @@ -4649,6 +4649,10 @@ AST_MATCHER_P(UsingShadowDecl, hasTarget >> > /// \code >> > /// template <typename T> class X {}; class A {}; template class >> > X<A>; >> > /// \endcode >> > +/// or >> > +/// \code >> > +/// template <typename T> class X {}; class A {}; extern template >> > class X<A>; >> > +/// \endcode >> > /// cxxRecordDecl(hasName("::X"), isTemplateInstantiation()) >> > /// matches the template instantiation of X<A>. >> > /// >> > @@ -4666,7 +4670,9 @@ AST_POLYMORPHIC_MATCHER(isTemplateInstan >> > CXXRecordDecl)) >> > { >> > return (Node.getTemplateSpecializationKind() == >> > TSK_ImplicitInstantiation || >> > Node.getTemplateSpecializationKind() == >> > - TSK_ExplicitInstantiationDefinition); >> > + TSK_ExplicitInstantiationDefinition || >> > + Node.getTemplateSpecializationKind() == >> > + TSK_ExplicitInstantiationDeclaration); >> > } >> > >> > /// \brief Matches declarations that are template instantiations or are >> > inside >> > >> > Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp >> > URL: >> > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp?rev=325678&r1=325677&r2=325678&view=diff >> > >> > ============================================================================== >> > --- cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp >> > (original) >> > +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp Wed Feb >> > 21 05:51:27 2018 >> > @@ -1623,6 +1623,14 @@ TEST(IsTemplateInstantiation, MatchesExp >> > "template class X<A>;", >> > cxxRecordDecl(isTemplateInstantiation(), hasDescendant( >> > fieldDecl(hasType(recordDecl(hasName("A")))))))); >> > + >> > + // Make sure that we match the instantiation instead of the template >> > + // definition by checking whether the member function is present. >> > + EXPECT_TRUE( >> > + matches("template <typename T> class X { void f() { T t; } };" >> > + "extern template class X<int>;", >> > + cxxRecordDecl(isTemplateInstantiation(), >> > + >> > unless(hasDescendant(varDecl(hasName("t"))))))); >> > } >> > >> > TEST(IsTemplateInstantiation, >> > >> > >> > _______________________________________________ >> > cfe-commits mailing list >> > cfe-commits@lists.llvm.org >> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits