diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-06-22 22:18:46 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-06-22 22:18:46 +0000 |
commit | 05a21351d68c2656e49798fe5789d92a203971a9 (patch) | |
tree | be4d31e4b2012c1813884ef8ea373a77b9d999bb /clang/lib/Serialization/ASTWriter.cpp | |
parent | ff051957fc296283ad5e6423a5bc3e3b217cde2e (diff) | |
download | bcm5719-llvm-05a21351d68c2656e49798fe5789d92a203971a9.tar.gz bcm5719-llvm-05a21351d68c2656e49798fe5789d92a203971a9.zip |
PR33002: When we instantiate the definition of a static data member, we might
have attached an initializer to the in-class declaration. If so, include the
initializer in the update record for the instantiation.
llvm-svn: 306065
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index dcacabec122..1c0db14ced1 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -5033,9 +5033,18 @@ void ASTWriter::WriteDeclUpdatesBlocks(RecordDataImpl &OffsetsRecord) { case UPD_CXX_ADDED_FUNCTION_DEFINITION: break; - case UPD_CXX_INSTANTIATED_STATIC_DATA_MEMBER: + case UPD_CXX_INSTANTIATED_STATIC_DATA_MEMBER: { + const VarDecl *VD = cast<VarDecl>(D); Record.AddSourceLocation(Update.getLoc()); + if (VD->getInit()) { + Record.push_back(!VD->isInitKnownICE() ? 1 + : (VD->isInitICE() ? 3 : 2)); + Record.AddStmt(const_cast<Expr*>(VD->getInit())); + } else { + Record.push_back(0); + } break; + } case UPD_CXX_INSTANTIATED_DEFAULT_ARGUMENT: Record.AddStmt(const_cast<Expr *>( |