diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-06-10 00:29:03 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-06-10 00:29:03 +0000 |
commit | 29269f9e4825b822f04e447ab80af97bb5dc3ef3 (patch) | |
tree | 01b58456d776b7aa4092125f4159c8f8c5506577 /lib/AST/DeclTemplate.cpp | |
parent | e43fe24e6015b7fd936adaba4cd87bfa58f4bea0 (diff) |
Refactor storage of default template arguments.
This is just a preparatory step towards fixing visibility for default template
arguments in modules builds.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239447 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclTemplate.cpp')
-rw-r--r-- | lib/AST/DeclTemplate.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp index 6374a92621..c4e2c007c1 100644 --- a/lib/AST/DeclTemplate.cpp +++ b/lib/AST/DeclTemplate.cpp @@ -504,14 +504,14 @@ TemplateTypeParmDecl::CreateDeserialized(const ASTContext &C, unsigned ID) { SourceLocation TemplateTypeParmDecl::getDefaultArgumentLoc() const { return hasDefaultArgument() - ? DefaultArgument->getTypeLoc().getBeginLoc() - : SourceLocation(); + ? getDefaultArgumentInfo()->getTypeLoc().getBeginLoc() + : SourceLocation(); } SourceRange TemplateTypeParmDecl::getSourceRange() const { if (hasDefaultArgument() && !defaultArgumentWasInherited()) return SourceRange(getLocStart(), - DefaultArgument->getTypeLoc().getEndLoc()); + getDefaultArgumentInfo()->getTypeLoc().getEndLoc()); else return TypeDecl::getSourceRange(); } @@ -543,10 +543,8 @@ NonTypeTemplateParmDecl::NonTypeTemplateParmDecl(DeclContext *DC, unsigned NumExpandedTypes, TypeSourceInfo **ExpandedTInfos) : DeclaratorDecl(NonTypeTemplateParm, DC, IdLoc, Id, T, TInfo, StartLoc), - TemplateParmPosition(D, P), DefaultArgumentAndInherited(nullptr, false), - ParameterPack(true), ExpandedParameterPack(true), - NumExpandedTypes(NumExpandedTypes) -{ + TemplateParmPosition(D, P), ParameterPack(true), + ExpandedParameterPack(true), NumExpandedTypes(NumExpandedTypes) { if (ExpandedTypes && ExpandedTInfos) { void **TypesAndInfos = reinterpret_cast<void **>(this + 1); for (unsigned I = 0; I != NumExpandedTypes; ++I) { @@ -621,8 +619,7 @@ TemplateTemplateParmDecl::TemplateTemplateParmDecl( IdentifierInfo *Id, TemplateParameterList *Params, unsigned NumExpansions, TemplateParameterList * const *Expansions) : TemplateDecl(TemplateTemplateParm, DC, L, Id, Params), - TemplateParmPosition(D, P), DefaultArgument(), - DefaultArgumentWasInherited(false), ParameterPack(true), + TemplateParmPosition(D, P), ParameterPack(true), ExpandedParameterPack(true), NumExpandedParams(NumExpansions) { if (Expansions) std::memcpy(reinterpret_cast<void*>(this + 1), Expansions, @@ -663,6 +660,14 @@ TemplateTemplateParmDecl::CreateDeserialized(ASTContext &C, unsigned ID, nullptr, NumExpansions, nullptr); } +void TemplateTemplateParmDecl::setDefaultArgument( + const ASTContext &C, const TemplateArgumentLoc &DefArg) { + if (DefArg.getArgument().isNull()) + DefaultArgument.set(nullptr); + else + DefaultArgument.set(new (C) TemplateArgumentLoc(DefArg)); +} + //===----------------------------------------------------------------------===// // TemplateArgumentList Implementation //===----------------------------------------------------------------------===// |