[modules] Reconstruct template default argument inheritance on reload rather
than wasting storage and triggering eager deserializations by serializing it. llvm-svn: 239454
This commit is contained in:
@@ -1380,10 +1380,11 @@ void ASTDeclWriter::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
|
||||
VisitTypeDecl(D);
|
||||
|
||||
Record.push_back(D->wasDeclaredWithTypename());
|
||||
Record.push_back(D->defaultArgumentWasInherited());
|
||||
if (D->defaultArgumentWasInherited())
|
||||
Writer.AddDeclRef(D->getDefaultArgStorage().getInheritedFrom(), Record);
|
||||
else
|
||||
|
||||
bool OwnsDefaultArg = D->hasDefaultArgument() &&
|
||||
!D->defaultArgumentWasInherited();
|
||||
Record.push_back(OwnsDefaultArg);
|
||||
if (OwnsDefaultArg)
|
||||
Writer.AddTypeSourceInfo(D->getDefaultArgumentInfo(), Record);
|
||||
|
||||
Code = serialization::DECL_TEMPLATE_TYPE_PARM;
|
||||
@@ -1411,10 +1412,10 @@ void ASTDeclWriter::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) {
|
||||
} else {
|
||||
// Rest of NonTypeTemplateParmDecl.
|
||||
Record.push_back(D->isParameterPack());
|
||||
Record.push_back(D->defaultArgumentWasInherited());
|
||||
if (D->defaultArgumentWasInherited())
|
||||
Writer.AddDeclRef(D->getDefaultArgStorage().getInheritedFrom(), Record);
|
||||
else
|
||||
bool OwnsDefaultArg = D->hasDefaultArgument() &&
|
||||
!D->defaultArgumentWasInherited();
|
||||
Record.push_back(OwnsDefaultArg);
|
||||
if (OwnsDefaultArg)
|
||||
Writer.AddStmt(D->getDefaultArgument());
|
||||
Code = serialization::DECL_NON_TYPE_TEMPLATE_PARM;
|
||||
}
|
||||
@@ -1441,10 +1442,10 @@ void ASTDeclWriter::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
|
||||
} else {
|
||||
// Rest of TemplateTemplateParmDecl.
|
||||
Record.push_back(D->isParameterPack());
|
||||
Record.push_back(D->defaultArgumentWasInherited());
|
||||
if (D->defaultArgumentWasInherited())
|
||||
Writer.AddDeclRef(D->getDefaultArgStorage().getInheritedFrom(), Record);
|
||||
else
|
||||
bool OwnsDefaultArg = D->hasDefaultArgument() &&
|
||||
!D->defaultArgumentWasInherited();
|
||||
Record.push_back(OwnsDefaultArg);
|
||||
if (OwnsDefaultArg)
|
||||
Writer.AddTemplateArgumentLoc(D->getDefaultArgument(), Record);
|
||||
Code = serialization::DECL_TEMPLATE_TEMPLATE_PARM;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user