diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-10-24 17:26:31 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-10-24 17:26:31 +0000 |
commit | 134db1fff5653c164ef41c898943521c49f6ebab (patch) | |
tree | 5d967613d702c8d384ad63d208c097939d0102b7 /lib/Serialization/ASTWriterDecl.cpp | |
parent | c01dc6fb5bae1ac60910e8fbf1d22a8fa1e691f7 (diff) |
Simplify and "robust-ify" the way that CXXRecord references point to the definition data when loaded from PCH.
Temporary disable 'test/PCH/chain-cxx.cpp' until a better way to fix it is in place.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117234 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Serialization/ASTWriterDecl.cpp')
-rw-r--r-- | lib/Serialization/ASTWriterDecl.cpp | 23 |
1 files changed, 5 insertions, 18 deletions
diff --git a/lib/Serialization/ASTWriterDecl.cpp b/lib/Serialization/ASTWriterDecl.cpp index 19f198cb65..4463ce931b 100644 --- a/lib/Serialization/ASTWriterDecl.cpp +++ b/lib/Serialization/ASTWriterDecl.cpp @@ -758,26 +758,13 @@ void ASTDeclWriter::WriteCXXDefinitionData( } void ASTDeclWriter::VisitCXXRecordDecl(CXXRecordDecl *D) { - // See comments at ASTDeclReader::VisitCXXRecordDecl about why this happens - // before VisitRecordDecl. - enum { Data_NoDefData, Data_Owner, Data_NotOwner }; - bool OwnsDefinitionData = false; - if (D->DefinitionData) { - assert(D->DefinitionData->Definition && - "DefinitionData don't point to a definition decl!"); - OwnsDefinitionData = D->DefinitionData->Definition == D; - if (OwnsDefinitionData) { - Record.push_back(Data_Owner); - } else { - Record.push_back(Data_NotOwner); - Writer.AddDeclRef(D->DefinitionData->Definition, Record); - } - } else - Record.push_back(Data_NoDefData); - VisitRecordDecl(D); - if (OwnsDefinitionData) { + CXXRecordDecl *DefinitionDecl = 0; + if (D->DefinitionData) + DefinitionDecl = D->DefinitionData->Definition; + Writer.AddDeclRef(DefinitionDecl, Record); + if (D == DefinitionDecl) { assert(D->DefinitionData); WriteCXXDefinitionData(*D->DefinitionData); } |