From fa163749c73261867a81fed1226a55a7d2c5b293 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Fri, 19 Jul 2013 22:50:29 +0000 Subject: [PATCH] Fix pack instantiation with function types. Make sure we correctly expand packs which expand to another pack in a function type. llvm-svn: 186728 --- clang/lib/Sema/TreeTransform.h | 4 ++++ clang/test/SemaTemplate/alias-templates.cpp | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 34fdbad..4a41b60 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -4269,6 +4269,10 @@ bool TreeTransform:: if (NewType.isNull()) return true; + if (NewType->containsUnexpandedParameterPack()) + NewType = getSema().Context.getPackExpansionType(NewType, + NumExpansions); + OutParamTypes.push_back(NewType); if (PVars) PVars->push_back(0); diff --git a/clang/test/SemaTemplate/alias-templates.cpp b/clang/test/SemaTemplate/alias-templates.cpp index eeb6b95..f495620 100644 --- a/clang/test/SemaTemplate/alias-templates.cpp +++ b/clang/test/SemaTemplate/alias-templates.cpp @@ -189,3 +189,10 @@ namespace PR16646 { } } } + +namespace VariadicAliasWithFunctionType { + template struct A { }; + template using B = A; + template void f(B, A...>) {} + void g() { f(A,A)>()); } +} -- 2.7.4