Author: klimek Date: Mon Jan 11 05:39:00 2016 New Revision: 257326 URL: http://llvm.org/viewvc/llvm-project?rev=257326&view=rev Log: Fix assert hit when tree-transforming template template parameter packs.
Covers significantly more code in the template template pack argument test and fixes the resulting assert problem. Differential Revision: http://reviews.llvm.org/D15743 Modified: cfe/trunk/lib/Sema/TreeTransform.h cfe/trunk/test/SemaTemplate/temp_arg_template.cpp Modified: cfe/trunk/lib/Sema/TreeTransform.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TreeTransform.h?rev=257326&r1=257325&r2=257326&view=diff ============================================================================== --- cfe/trunk/lib/Sema/TreeTransform.h (original) +++ cfe/trunk/lib/Sema/TreeTransform.h Mon Jan 11 05:39:00 2016 @@ -3583,7 +3583,7 @@ void TreeTransform<Derived>::InventTempl case TemplateArgument::Template: case TemplateArgument::TemplateExpansion: { NestedNameSpecifierLocBuilder Builder; - TemplateName Template = Arg.getAsTemplate(); + TemplateName Template = Arg.getAsTemplateOrTemplatePattern(); if (DependentTemplateName *DTN = Template.getAsDependentTemplateName()) Builder.MakeTrivial(SemaRef.Context, DTN->getQualifier(), Loc); else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) Modified: cfe/trunk/test/SemaTemplate/temp_arg_template.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaTemplate/temp_arg_template.cpp?rev=257326&r1=257325&r2=257326&view=diff ============================================================================== --- cfe/trunk/test/SemaTemplate/temp_arg_template.cpp (original) +++ cfe/trunk/test/SemaTemplate/temp_arg_template.cpp Mon Jan 11 05:39:00 2016 @@ -75,7 +75,11 @@ template <template <typename> class... T // expected-warning@-2 {{variadic templates are a C++11 extension}} #endif -struct template_tuple {}; +struct template_tuple { +#if __cplusplus >= 201103L + static constexpr int N = sizeof...(Templates); +#endif +}; template <typename T> struct identity {}; template <template <typename> class... Templates> @@ -85,6 +89,12 @@ template <template <typename> class... T template_tuple<Templates...> f7() {} +#if __cplusplus >= 201103L +struct S : public template_tuple<identity, identity> { + static_assert(N == 2, "Number of template arguments incorrect"); +}; +#endif + void foo() { f7<identity>(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits