diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-02 11:55:37 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-07-02 11:55:37 +0000 |
commit | 7d530487714b300be95fd71de68a3287078a814f (patch) | |
tree | be29e28cb6b566305e4d5e08e71288ce13bb57f0 /lib/Frontend/PCHReaderDecl.cpp | |
parent | 37ffed3b7f229844cae2463ff82b527506c86c74 (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.cpp | 16 |
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); } |