diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-06-24 05:53:11 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-06-24 05:53:11 +0000 |
commit | 9771f500f29235d79276c30d784859572aefc764 (patch) | |
tree | a7a342057212d55634a4993401d4af195ad21d18 /clang/lib/Sema | |
parent | 2fb6b0f2baf4b1da6201035f53ca7e471b9d4c1e (diff) | |
download | bcm5719-llvm-9771f500f29235d79276c30d784859572aefc764.tar.gz bcm5719-llvm-9771f500f29235d79276c30d784859572aefc764.zip |
PR42362: Fix auto deduction of template parameter packs from
type-dependent argument packs.
We need to strip off the PackExpansionExpr to get the real (dependent)
type rather than an opaque DependentTy.
llvm-svn: 364165
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 7b0a3a3e094..49ba771379e 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -6323,9 +6323,12 @@ ExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, // the type is dependent, in order to check the types of non-type template // arguments line up properly in partial ordering. Optional<unsigned> Depth = Param->getDepth() + 1; + Expr *DeductionArg = Arg; + if (auto *PE = dyn_cast<PackExpansionExpr>(DeductionArg)) + DeductionArg = PE->getPattern(); if (DeduceAutoType( Context.getTrivialTypeSourceInfo(ParamType, Param->getLocation()), - Arg, ParamType, Depth) == DAR_Failed) { + DeductionArg, ParamType, Depth) == DAR_Failed) { Diag(Arg->getExprLoc(), diag::err_non_type_template_parm_type_deduction_failure) << Param->getDeclName() << Param->getType() << Arg->getType() |