aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHReaderDecl.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/PCHReaderDecl.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/PCHReaderDecl.cpp')
-rw-r--r--lib/Frontend/PCHReaderDecl.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/Frontend/PCHReaderDecl.cpp b/lib/Frontend/PCHReaderDecl.cpp
index ea99ff249d..c05f864bc1 100644
--- a/lib/Frontend/PCHReaderDecl.cpp
+++ b/lib/Frontend/PCHReaderDecl.cpp
@@ -768,11 +768,12 @@ void PCHDeclReader::VisitClassTemplateDecl(ClassTemplateDecl *D) {
while (size--) {
ClassTemplateSpecializationDecl *CTSD
= cast<ClassTemplateSpecializationDecl>(Reader.GetDecl(Record[Idx++]));
+ llvm::SmallVector<TemplateArgument, 8> TemplArgs;
+ Reader.ReadTemplateArgumentList(TemplArgs, Record, Idx);
llvm::FoldingSetNodeID ID;
void *InsertPos = 0;
- ClassTemplateSpecializationDecl::Profile(ID,
- CTSD->getTemplateArgs().getFlatArgumentList(),
- CTSD->getTemplateArgs().flat_size(),
+ ClassTemplateSpecializationDecl::Profile(ID, TemplArgs.data(),
+ TemplArgs.size(),
*Reader.getContext());
D->getSpecializations().FindNodeOrInsertPos(ID, InsertPos);
D->getSpecializations().InsertNode(CTSD, InsertPos);
@@ -783,12 +784,13 @@ void PCHDeclReader::VisitClassTemplateDecl(ClassTemplateDecl *D) {
ClassTemplatePartialSpecializationDecl *CTSD
= cast<ClassTemplatePartialSpecializationDecl>(
Reader.GetDecl(Record[Idx++]));
+ llvm::SmallVector<TemplateArgument, 8> TemplArgs;
+ Reader.ReadTemplateArgumentList(TemplArgs, Record, Idx);
llvm::FoldingSetNodeID ID;
void *InsertPos = 0;
- ClassTemplatePartialSpecializationDecl::Profile(ID,
- CTSD->getTemplateArgs().getFlatArgumentList(),
- CTSD->getTemplateArgs().flat_size(),
- *Reader.getContext());
+ ClassTemplatePartialSpecializationDecl::Profile(ID, TemplArgs.data(),
+ TemplArgs.size(),
+ *Reader.getContext());
D->getPartialSpecializations().FindNodeOrInsertPos(ID, InsertPos);
D->getPartialSpecializations().InsertNode(CTSD, InsertPos);
}