summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReaderDecl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2015-06-10 00:29:03 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2015-06-10 00:29:03 +0000
commit1469b9196ce4394486371b39e9fa5d44975d3a29 (patch)
tree453e270eaf526cbb9e3ced6ae5f1b6ab43a2da34 /clang/lib/Serialization/ASTReaderDecl.cpp
parentcb77930d6b20e53c735233eecf4572a1c30eb0c0 (diff)
downloadbcm5719-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.cpp35
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));
}
}
OpenPOWER on IntegriCloud