r259836 - PR25271: When attaching default template arguments to redeclarations of a

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 4 14:54:41 PST 2016


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




More information about the cfe-commits mailing list