Author: rsmith Date: Thu Feb 4 16:54:41 2016 New Revision: 259836 URL: http://llvm.org/viewvc/llvm-project?rev=259836&view=rev Log: PR25271: When attaching default template arguments to redeclarations of a template, keep looking for default arguments if we see a template parameter pack. There may be default arguments preceding a pack with no default argument.
Patch by Jannis Harder! Added: cfe/trunk/test/PCH/cxx-variadic-templates-with-default-params.cpp Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=259836&r1=259835&r2=259836&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Thu Feb 4 16:54:41 2016 @@ -3016,6 +3016,8 @@ static void inheritDefaultTemplateArgume for (unsigned I = 0, N = FromTP->size(); I != N; ++I) { NamedDecl *FromParam = FromTP->getParam(N - I - 1); + if (FromParam->isParameterPack()) + continue; NamedDecl *ToParam = ToTP->getParam(N - I - 1); if (auto *FTTP = dyn_cast<TemplateTypeParmDecl>(FromParam)) { Added: cfe/trunk/test/PCH/cxx-variadic-templates-with-default-params.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/cxx-variadic-templates-with-default-params.cpp?rev=259836&view=auto ============================================================================== --- cfe/trunk/test/PCH/cxx-variadic-templates-with-default-params.cpp (added) +++ cfe/trunk/test/PCH/cxx-variadic-templates-with-default-params.cpp Thu Feb 4 16:54:41 2016 @@ -0,0 +1,26 @@ +// Test this without pch. +// RUN: %clang_cc1 -std=c++11 -include %s -fsyntax-only -verify %s + +// Test with pch. +// RUN: %clang_cc1 -std=c++11 -x c++-header -emit-pch -o %t %s +// RUN: %clang_cc1 -std=c++11 -include-pch %t -fsyntax-only -verify %s + +// expected-no-diagnostics + +// PR25271: Ensure that default template arguments prior to a parameter pack +// successfully round-trip. +#ifndef HEADER +#define HEADER +template<unsigned T=123, unsigned... U> +class dummy; + +template<unsigned T, unsigned... U> +class dummy { + int field[T]; +}; +#else +void f() { + dummy<> x; + (void)x; +} +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits