aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHWriterDecl.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-07-20 13:59:40 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-07-20 13:59:40 +0000
commitbc5ab7c9e307fea5ecb979b30815da7a370e1c05 (patch)
treedb39d4e37f726f6f6c287fe268b2d6b5e34b87a3 /lib/Frontend/PCHWriterDecl.cpp
parentcc0b1bc979b650a8a8b34b2032a074fd7724a90d (diff)
Whether the specialization should be added to template's folding set when read from PCH,
is determined by a isCanonicalDecl check. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108833 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHWriterDecl.cpp')
-rw-r--r--lib/Frontend/PCHWriterDecl.cpp14
1 files changed, 4 insertions, 10 deletions
diff --git a/lib/Frontend/PCHWriterDecl.cpp b/lib/Frontend/PCHWriterDecl.cpp
index 64875521c1..5d6a6d267e 100644
--- a/lib/Frontend/PCHWriterDecl.cpp
+++ b/lib/Frontend/PCHWriterDecl.cpp
@@ -828,10 +828,6 @@ void PCHDeclWriter::VisitTemplateDecl(TemplateDecl *D) {
Writer.AddTemplateParameterList(D->getTemplateParameters(), Record);
}
-static bool IsKeptInFoldingSet(ClassTemplateSpecializationDecl *D) {
- return D->getTypeForDecl()->getAsCXXRecordDecl() == D;
-}
-
void PCHDeclWriter::VisitClassTemplateDecl(ClassTemplateDecl *D) {
VisitTemplateDecl(D);
@@ -845,7 +841,7 @@ void PCHDeclWriter::VisitClassTemplateDecl(ClassTemplateDecl *D) {
CTSDSetTy &CTSDSet = D->getSpecializations();
Record.push_back(CTSDSet.size());
for (CTSDSetTy::iterator I=CTSDSet.begin(), E = CTSDSet.end(); I!=E; ++I) {
- assert(IsKeptInFoldingSet(&*I));
+ assert(I->isCanonicalDecl() && "Expected only canonical decls in set");
Writer.AddDeclRef(&*I, Record);
}
@@ -853,7 +849,7 @@ void PCHDeclWriter::VisitClassTemplateDecl(ClassTemplateDecl *D) {
CTPSDSetTy &CTPSDSet = D->getPartialSpecializations();
Record.push_back(CTPSDSet.size());
for (CTPSDSetTy::iterator I=CTPSDSet.begin(), E=CTPSDSet.end(); I!=E; ++I) {
- assert(IsKeptInFoldingSet(&*I));
+ assert(I->isCanonicalDecl() && "Expected only canonical decls in set");
Writer.AddDeclRef(&*I, Record);
}
@@ -892,10 +888,8 @@ void PCHDeclWriter::VisitClassTemplateSpecializationDecl(
Writer.AddSourceLocation(D->getPointOfInstantiation(), Record);
Record.push_back(D->getSpecializationKind());
- bool IsInInFoldingSet = IsKeptInFoldingSet(D);
- Record.push_back(IsInInFoldingSet);
- if (IsInInFoldingSet) {
- // When reading, we'll add it to the folding set of this one.
+ if (D->isCanonicalDecl()) {
+ // When reading, we'll add it to the folding set of the following template.
Writer.AddDeclRef(D->getSpecializedTemplate()->getCanonicalDecl(), Record);
}