diff --git a/clang/include/clang/AST/TypeProperties.td b/clang/include/clang/AST/TypeProperties.td index 4540ea0e1952aa..ed91670829b8bd 100644 --- a/clang/include/clang/AST/TypeProperties.td +++ b/clang/include/clang/AST/TypeProperties.td @@ -722,7 +722,8 @@ let Class = PackExpansionType in { } def : Creator<[{ - return ctx.getPackExpansionType(pattern, numExpansions); + return ctx.getPackExpansionType(pattern, numExpansions, + /*ExpectPackInType*/false); }]>; } diff --git a/clang/lib/AST/ASTImporter.cpp b/clang/lib/AST/ASTImporter.cpp index 12dcd14c06bfab..ee6daf45b7c304 100644 --- a/clang/lib/AST/ASTImporter.cpp +++ b/clang/lib/AST/ASTImporter.cpp @@ -1498,7 +1498,8 @@ ASTNodeImporter::VisitPackExpansionType(const PackExpansionType *T) { return ToPatternOrErr.takeError(); return Importer.getToContext().getPackExpansionType(*ToPatternOrErr, - T->getNumExpansions()); + T->getNumExpansions(), + /*ExpactPack=*/false); } ExpectedType ASTNodeImporter::VisitDependentTemplateSpecializationType( diff --git a/clang/test/PCH/cxx-variadic-templates.cpp b/clang/test/PCH/cxx-variadic-templates.cpp index 87b101d73c1422..b1eed5adb647b7 100644 --- a/clang/test/PCH/cxx-variadic-templates.cpp +++ b/clang/test/PCH/cxx-variadic-templates.cpp @@ -19,3 +19,8 @@ shared_ptr spi = shared_ptr::allocate_shared(1, 2); template struct A {}; template struct B {}; outer::inner<1, 2, A, B> i(A<1>{}, B<2>{}); + +void test_nondependent_pack() { + take_nondependent_pack(nullptr, nullptr); + take_nondependent_pack_2({}); +} diff --git a/clang/test/PCH/cxx-variadic-templates.h b/clang/test/PCH/cxx-variadic-templates.h index 50596cdf5dbf93..45395e9ae84aa9 100644 --- a/clang/test/PCH/cxx-variadic-templates.h +++ b/clang/test/PCH/cxx-variadic-templates.h @@ -23,3 +23,8 @@ template struct outer { }; }; template struct outer; + +template void take_nondependent_pack(int (...arr)[sizeof(sizeof(T))]); + +template using hide = int; +template void take_nondependent_pack_2(outer...>); diff --git a/clang/test/PCH/cxx1y-lambdas.mm b/clang/test/PCH/cxx1y-lambdas.mm index f140a15215b8f9..9c4c11970473b1 100644 --- a/clang/test/PCH/cxx1y-lambdas.mm +++ b/clang/test/PCH/cxx1y-lambdas.mm @@ -39,6 +39,8 @@ int init_capture(T t) { return [&, x(t)] { return sizeof(x); }; } +auto with_pack = [](auto ...xs){}; + #else // CHECK-PRINT: T add_slowly @@ -55,4 +57,6 @@ int add(int x, int y) { // CHECK-PRINT: init_capture // CHECK-PRINT: [&, x(t)] +void use_with_pack() { with_pack(1, 2, 3); } + #endif diff --git a/clang/test/PCH/cxx2a-constraints.cpp b/clang/test/PCH/cxx2a-constraints.cpp index d8b79337c8f181..3f3b5e536cc934 100644 --- a/clang/test/PCH/cxx2a-constraints.cpp +++ b/clang/test/PCH/cxx2a-constraints.cpp @@ -24,6 +24,8 @@ template T> void h(T) {} template T> void i(T) {} template void i(T) {} +void j(SizedLike auto ...ints) {} + #else /*included pch*/ int main() { @@ -35,6 +37,7 @@ int main() { (void)h(1); (void)i('1'); (void)i(1); + (void)j(1, 2, 3); } -#endif // HEADER \ No newline at end of file +#endif // HEADER