diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-12-05 01:31:47 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-12-05 01:31:47 +0000 |
commit | 891fc7f37a0be80c59a791d283f5e568254c07fa (patch) | |
tree | 880831f30f7be7807a86934a43a5996f48133eac /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | 913b42b0e180044c343d666d29412b1b1ff59749 (diff) | |
download | bcm5719-llvm-891fc7f37a0be80c59a791d283f5e568254c07fa.tar.gz bcm5719-llvm-891fc7f37a0be80c59a791d283f5e568254c07fa.zip |
Generalize "static data member instantiated" notification to cover variable templates too.
While here, split the "point of instantiation changed" notification out from
it; these two really are orthogonal changes.
llvm-svn: 319727
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 846c57a96d4..a3bf0d97126 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -3984,10 +3984,8 @@ void ASTDeclReader::UpdateDecl(Decl *D, break; } - case UPD_CXX_INSTANTIATED_STATIC_DATA_MEMBER: { + case UPD_CXX_ADDED_VAR_DEFINITION: { VarDecl *VD = cast<VarDecl>(D); - VD->getMemberSpecializationInfo()->setPointOfInstantiation( - ReadSourceLocation()); VD->NonParmVarDeclBits.IsInline = Record.readInt(); VD->NonParmVarDeclBits.IsInlineSpecified = Record.readInt(); uint64_t Val = Record.readInt(); @@ -4002,6 +4000,25 @@ void ASTDeclReader::UpdateDecl(Decl *D, break; } + case UPD_CXX_POINT_OF_INSTANTIATION: { + SourceLocation POI = Record.readSourceLocation(); + if (VarTemplateSpecializationDecl *VTSD = + dyn_cast<VarTemplateSpecializationDecl>(D)) { + VTSD->setPointOfInstantiation(POI); + } else if (auto *VD = dyn_cast<VarDecl>(D)) { + VD->getMemberSpecializationInfo()->setPointOfInstantiation(POI); + } else { + auto *FD = cast<FunctionDecl>(D); + if (auto *FTSInfo = FD->TemplateOrSpecialization + .dyn_cast<FunctionTemplateSpecializationInfo *>()) + FTSInfo->setPointOfInstantiation(POI); + else + FD->TemplateOrSpecialization.get<MemberSpecializationInfo *>() + ->setPointOfInstantiation(POI); + } + break; + } + case UPD_CXX_INSTANTIATED_DEFAULT_ARGUMENT: { auto Param = cast<ParmVarDecl>(D); |