diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-05-22 20:59:29 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-05-22 20:59:29 +0000 |
commit | df3520581a4371eed1ea50d2080fed39d9a5bf10 (patch) | |
tree | 9dfcc25cf4a3089402f10e96afc9963e4d23524c /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | 5ebffb5555cf3e1e4fa53e481b0dcce18707a280 (diff) | |
download | bcm5719-llvm-df3520581a4371eed1ea50d2080fed39d9a5bf10.tar.gz bcm5719-llvm-df3520581a4371eed1ea50d2080fed39d9a5bf10.zip |
If a class template specialization from one module has its definition
instantiated in another module, and the instantiation uses a partial
specialization, include the partial specialization and its template arguments
in the update record. We'll need them if someone imports the second module and
tries to instantiate a member of the template.
llvm-svn: 209472
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 696a78295cb..d900f71c464 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -3201,6 +3201,16 @@ void ASTDeclReader::UpdateDecl(Decl *D, ModuleFile &ModuleFile, cast<ClassTemplateSpecializationDecl>(RD); Spec->setTemplateSpecializationKind(TSK); Spec->setPointOfInstantiation(POI); + + if (Record[Idx++]) { + auto PartialSpec = + ReadDeclAs<ClassTemplatePartialSpecializationDecl>(Record, Idx); + SmallVector<TemplateArgument, 8> TemplArgs; + Reader.ReadTemplateArgumentList(TemplArgs, F, Record, Idx); + auto *TemplArgList = TemplateArgumentList::CreateCopy( + Reader.getContext(), TemplArgs.data(), TemplArgs.size()); + Spec->setInstantiationOf(PartialSpec, TemplArgList); + } } RD->setTagKind((TagTypeKind)Record[Idx++]); |