diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-08-29 22:14:43 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-08-29 22:14:43 +0000 |
commit | 1abacfcb2358a1928f0ced693e149a6cf2fc482e (patch) | |
tree | 088e56bf34781f1201c8a15421f2b79bd6ee5c1c /clang/lib/Sema/SemaTemplateInstantiate.cpp | |
parent | c6daf73c7241fa3c3803167bf79e68f86b4c2f3f (diff) | |
download | bcm5719-llvm-1abacfcb2358a1928f0ced693e149a6cf2fc482e.tar.gz bcm5719-llvm-1abacfcb2358a1928f0ced693e149a6cf2fc482e.zip |
PR10147: When substituting a template template argument, substitute in the most
recent (non-friend) declaration to pick up the right set of default template
arguments.
llvm-svn: 312049
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiate.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiate.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index f4f0c804aee..1a06f9a2f85 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -975,7 +975,7 @@ Decl *TemplateInstantiator::TransformDecl(SourceLocation Loc, Decl *D) { Arg = getPackSubstitutedTemplateArgument(getSema(), Arg); } - TemplateName Template = Arg.getAsTemplate(); + TemplateName Template = Arg.getAsTemplate().getNameToSubstitute(); assert(!Template.isNull() && Template.getAsTemplateDecl() && "Wrong kind of template template argument"); return Template.getAsTemplateDecl(); @@ -1122,14 +1122,10 @@ TemplateName TemplateInstantiator::TransformTemplateName( Arg = getPackSubstitutedTemplateArgument(getSema(), Arg); } - TemplateName Template = Arg.getAsTemplate(); + TemplateName Template = Arg.getAsTemplate().getNameToSubstitute(); assert(!Template.isNull() && "Null template template argument"); - - // We don't ever want to substitute for a qualified template name, since - // the qualifier is handled separately. So, look through the qualified - // template name to its underlying declaration. - if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName()) - Template = TemplateName(QTN->getTemplateDecl()); + assert(!Template.getAsQualifiedTemplateName() && + "template decl to substitute is qualified?"); Template = getSema().Context.getSubstTemplateTemplateParm(TTP, Template); return Template; @@ -1143,7 +1139,7 @@ TemplateName TemplateInstantiator::TransformTemplateName( TemplateArgument Arg = SubstPack->getArgumentPack(); Arg = getPackSubstitutedTemplateArgument(getSema(), Arg); - return Arg.getAsTemplate(); + return Arg.getAsTemplate().getNameToSubstitute(); } return inherited::TransformTemplateName(SS, Name, NameLoc, ObjectType, |