aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHWriterDecl.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-07-02 11:55:37 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-07-02 11:55:37 +0000
commit7d530487714b300be95fd71de68a3287078a814f (patch)
treebe29e28cb6b566305e4d5e08e71288ce13bb57f0 /lib/Frontend/PCHWriterDecl.cpp
parent37ffed3b7f229844cae2463ff82b527506c86c74 (diff)
Fix reading ClassTemplateDecl's ClassTemplateSpecializationDecls and ClassTemplatePartialSpecializationDecls.
Store/read also their template arguments because they may be initializing and not be able to provide them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107476 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHWriterDecl.cpp')
-rw-r--r--lib/Frontend/PCHWriterDecl.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/Frontend/PCHWriterDecl.cpp b/lib/Frontend/PCHWriterDecl.cpp
index 86af50b0bc..d43ba7a27f 100644
--- a/lib/Frontend/PCHWriterDecl.cpp
+++ b/lib/Frontend/PCHWriterDecl.cpp
@@ -751,14 +751,24 @@ void PCHDeclWriter::VisitClassTemplateDecl(ClassTemplateDecl *D) {
typedef llvm::FoldingSet<ClassTemplateSpecializationDecl> CTSDSetTy;
CTSDSetTy &CTSDSet = D->getSpecializations();
Record.push_back(CTSDSet.size());
- for (CTSDSetTy::iterator I=CTSDSet.begin(), E = CTSDSet.end(); I!=E; ++I)
- Writer.AddDeclRef(&*I, Record);
+ for (CTSDSetTy::iterator I=CTSDSet.begin(), E = CTSDSet.end(); I!=E; ++I) {
+ ClassTemplateSpecializationDecl *CTSD = &*I;
+ Writer.AddDeclRef(CTSD, Record);
+ // Write the argument list here because we may get it uninitialized when
+ // reading it back.
+ Writer.AddTemplateArgumentList(&CTSD->getTemplateArgs(), Record);
+ }
typedef llvm::FoldingSet<ClassTemplatePartialSpecializationDecl> CTPSDSetTy;
CTPSDSetTy &CTPSDSet = D->getPartialSpecializations();
Record.push_back(CTPSDSet.size());
- for (CTPSDSetTy::iterator I=CTPSDSet.begin(), E = CTPSDSet.end(); I!=E; ++I)
- Writer.AddDeclRef(&*I, Record);
+ for (CTPSDSetTy::iterator I=CTPSDSet.begin(), E=CTPSDSet.end(); I!=E; ++I) {
+ ClassTemplatePartialSpecializationDecl *CTPSD = &*I;
+ Writer.AddDeclRef(CTPSD, Record);
+ // Write the argument list here because we may get it uninitialized when
+ // reading it back.
+ Writer.AddTemplateArgumentList(&CTPSD->getTemplateArgs(), Record);
+ }
// InjectedClassNameType is computed, no need to write it.