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 | 1469b9196ce4394486371b39e9fa5d44975d3a29 (patch) | |
tree | 453e270eaf526cbb9e3ced6ae5f1b6ab43a2da34 /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | cb77930d6b20e53c735233eecf4572a1c30eb0c0 (diff) | |
download | bcm5719-llvm-1469b9196ce4394486371b39e9fa5d44975d3a29.tar.gz bcm5719-llvm-1469b9196ce4394486371b39e9fa5d44975d3a29.zip |
Refactor storage of default template arguments.
This is just a preparatory step towards fixing visibility for default template
arguments in modules builds.
llvm-svn: 239447
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 02273ed229a..63841fbca1a 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -2033,9 +2033,13 @@ void ASTDeclReader::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) { D->setDeclaredWithTypename(Record[Idx++]); - bool Inherited = Record[Idx++]; - TypeSourceInfo *DefArg = GetTypeSourceInfo(Record, Idx); - D->setDefaultArgument(DefArg, Inherited); + if (Record[Idx++]) + // FIXME: Rebuild inherited default argument chain when linking together + // the redecl chain. + D->setInheritedDefaultArgument( + Reader.getContext(), ReadDeclAs<TemplateTypeParmDecl>(Record, Idx)); + else + D->setDefaultArgument(GetTypeSourceInfo(Record, Idx)); } void ASTDeclReader::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) { @@ -2052,11 +2056,14 @@ void ASTDeclReader::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) { } else { // Rest of NonTypeTemplateParmDecl. D->ParameterPack = Record[Idx++]; - if (Record[Idx++]) { - Expr *DefArg = Reader.ReadExpr(F); - bool Inherited = Record[Idx++]; - D->setDefaultArgument(DefArg, Inherited); - } + if (Record[Idx++]) + // FIXME: Rebuild inherited default argument chain when linking together + // the redecl chain. + D->setInheritedDefaultArgument( + Reader.getContext(), + ReadDeclAs<NonTypeTemplateParmDecl>(Record, Idx)); + else + D->setDefaultArgument(Reader.ReadExpr(F)); } } @@ -2072,10 +2079,16 @@ void ASTDeclReader::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) { Data[I] = Reader.ReadTemplateParameterList(F, Record, Idx); } else { // Rest of TemplateTemplateParmDecl. - TemplateArgumentLoc Arg = Reader.ReadTemplateArgumentLoc(F, Record, Idx); - bool IsInherited = Record[Idx++]; - D->setDefaultArgument(Arg, IsInherited); D->ParameterPack = Record[Idx++]; + if (Record[Idx++]) + // FIXME: Rebuild inherited default argument chain when linking together + // the redecl chain. + D->setInheritedDefaultArgument( + Reader.getContext(), + ReadDeclAs<TemplateTemplateParmDecl>(Record, Idx)); + else + D->setDefaultArgument(Reader.getContext(), + Reader.ReadTemplateArgumentLoc(F, Record, Idx)); } } |