summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-02-21 08:42:39 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-02-21 08:42:39 +0000
commit0cd9c0491e90ed23f9f5069ae86837d77bfa26c9 (patch)
tree76aae2993b214795cef212fbbe502e3a2db0a601 /clang/lib
parentfe78d95a4956840baa350432fa2dac0e242693ab (diff)
downloadbcm5719-llvm-0cd9c0491e90ed23f9f5069ae86837d77bfa26c9.tar.gz
bcm5719-llvm-0cd9c0491e90ed23f9f5069ae86837d77bfa26c9.zip
Fix lookup through injected-class-names in implicit deduction guides in the
case where the class template has a parameter pack. Checking of the template arguments expects an "as-written" template argument list, which in particular does not have any parameter packs. So flatten the packs into separate arguments before passing them in. llvm-svn: 295710
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateDecl.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index b285d4f3814..7ccbb8571c5 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -4957,11 +4957,17 @@ NamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D,
auto *Guide = dyn_cast<CXXDeductionGuideDecl>(FD);
if (Guide && Guide->isImplicit()) {
TemplateDecl *TD = Guide->getDeducedTemplate();
+ // Convert the arguments to an "as-written" list.
TemplateArgumentListInfo Args(Loc, Loc);
- for (auto Arg : TemplateArgs.getInnermost().take_front(
- TD->getTemplateParameters()->size()))
- Args.addArgument(
- getTrivialTemplateArgumentLoc(Arg, QualType(), Loc));
+ for (TemplateArgument Arg : TemplateArgs.getInnermost().take_front(
+ TD->getTemplateParameters()->size())) {
+ ArrayRef<TemplateArgument> Unpacked(Arg);
+ if (Arg.getKind() == TemplateArgument::Pack)
+ Unpacked = Arg.pack_elements();
+ for (TemplateArgument UnpackedArg : Unpacked)
+ Args.addArgument(
+ getTrivialTemplateArgumentLoc(UnpackedArg, QualType(), Loc));
+ }
QualType T = CheckTemplateIdType(TemplateName(TD), Loc, Args);
if (T.isNull())
return nullptr;
OpenPOWER on IntegriCloud