summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTReaderDecl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2014-05-22 20:59:29 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2014-05-22 20:59:29 +0000
commitdf3520581a4371eed1ea50d2080fed39d9a5bf10 (patch)
tree9dfcc25cf4a3089402f10e96afc9963e4d23524c /clang/lib/Serialization/ASTReaderDecl.cpp
parent5ebffb5555cf3e1e4fa53e481b0dcce18707a280 (diff)
downloadbcm5719-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.cpp10
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++]);
OpenPOWER on IntegriCloud