diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-03-21 01:48:23 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-03-21 01:48:23 +0000 |
| commit | 5652c0f44800a4a154767ce9b2da1d8b4dffc096 (patch) | |
| tree | ad0ad9aa98962d3b42691e076d1e86bb29cbb78e /clang/lib | |
| parent | 37575693186976cf7828832e48b4b75edc469cd1 (diff) | |
| download | bcm5719-llvm-5652c0f44800a4a154767ce9b2da1d8b4dffc096.tar.gz bcm5719-llvm-5652c0f44800a4a154767ce9b2da1d8b4dffc096.zip | |
Serialize and deserialize mangling numbers.
llvm-svn: 204423
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Serialization/ASTCommon.h | 4 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 21 |
3 files changed, 29 insertions, 4 deletions
diff --git a/clang/lib/Serialization/ASTCommon.h b/clang/lib/Serialization/ASTCommon.h index b6f54a472ee..9f4d7a9acdd 100644 --- a/clang/lib/Serialization/ASTCommon.h +++ b/clang/lib/Serialization/ASTCommon.h @@ -28,7 +28,9 @@ enum DeclUpdateKind { UPD_CXX_INSTANTIATED_STATIC_DATA_MEMBER, UPD_CXX_RESOLVED_EXCEPTION_SPEC, UPD_CXX_DEDUCED_RETURN_TYPE, - UPD_DECL_MARKED_USED + UPD_DECL_MARKED_USED, + UPD_MANGLING_NUMBER, + UPD_STATIC_LOCAL_NUMBER }; TypeIdx TypeIdxFromBuiltin(const BuiltinType *BT); diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 53c26e94e1f..c186ba00ee5 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -2968,6 +2968,14 @@ void ASTDeclReader::UpdateDecl(Decl *D, ModuleFile &ModuleFile, D->Used = true; break; } + + case UPD_MANGLING_NUMBER: + Reader.Context.setManglingNumber(cast<NamedDecl>(D), Record[Idx++]); + break; + + case UPD_STATIC_LOCAL_NUMBER: + Reader.Context.setStaticLocalNumber(cast<VarDecl>(D), Record[Idx++]); + break; } } } diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 55dd375dc1f..1399ce2434c 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -4085,6 +4085,17 @@ void ASTWriter::WriteASTCore(Sema &SemaRef, Record.push_back({UPD_CXX_ADDED_ANONYMOUS_NAMESPACE, NS}); } + // Add update records for all mangling numbers and static local numbers. + // These aren't really update records, but this is a convenient way of + // tagging this rare extra data onto the declarations. + for (const auto &Number : Context.MangleNumbers) + if (!Number.first->isFromASTFile()) + DeclUpdates[Number.first].push_back({UPD_MANGLING_NUMBER, Number.second}); + for (const auto &Number : Context.StaticLocalNumbers) + if (!Number.first->isFromASTFile()) + DeclUpdates[Number.first].push_back({UPD_STATIC_LOCAL_NUMBER, + Number.second}); + // Make sure visible decls, added to DeclContexts previously loaded from // an AST file, are registered for serialization. for (SmallVectorImpl<const Decl *>::iterator @@ -4187,13 +4198,12 @@ void ASTWriter::WriteASTCore(Sema &SemaRef, } while (!DeclUpdates.empty()); Stream.ExitBlock(); - if (!DeclUpdatesOffsetsRecord.empty()) - Stream.EmitRecord(DECL_UPDATE_OFFSETS, DeclUpdatesOffsetsRecord); - DoneWritingDeclsAndTypes = true; // These things can only be done once we've written out decls and types. WriteTypeDeclOffsets(); + if (!DeclUpdatesOffsetsRecord.empty()) + Stream.EmitRecord(DECL_UPDATE_OFFSETS, DeclUpdatesOffsetsRecord); WriteCXXBaseSpecifiersOffsets(); WriteFileDeclIDsMap(); WriteSourceManagerBlock(Context.getSourceManager(), PP, isysroot); @@ -4372,6 +4382,11 @@ void ASTWriter::WriteDeclUpdatesBlocks(RecordDataImpl &OffsetsRecord) { case UPD_DECL_MARKED_USED: break; + + case UPD_MANGLING_NUMBER: + case UPD_STATIC_LOCAL_NUMBER: + Record.push_back(Update.getNumber()); + break; } } |

