diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-20 13:59:40 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-20 13:59:40 +0000 |
commit | bc5ab7c9e307fea5ecb979b30815da7a370e1c05 (patch) | |
tree | db39d4e37f726f6f6c287fe268b2d6b5e34b87a3 /lib/Frontend/PCHWriterDecl.cpp | |
parent | cc0b1bc979b650a8a8b34b2032a074fd7724a90d (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.cpp | 14 |
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); } |