diff options
Diffstat (limited to 'clang/lib/Serialization/ASTWriterDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTWriterDecl.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index e22a94df2f3..752373646e6 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -136,6 +136,12 @@ namespace clang { void VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D); void VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D); + void AddLocalOffset(uint64_t LocalOffset) { + uint64_t Offset = Writer.Stream.GetCurrentBitNo(); + assert(LocalOffset < Offset && "invalid offset"); + Record.push_back(LocalOffset ? Offset - LocalOffset : 0); + } + /// Add an Objective-C type parameter list to the given record. void AddObjCTypeParamList(ObjCTypeParamList *typeParams) { // Empty type parameter list. @@ -1555,8 +1561,8 @@ void ASTDeclWriter::VisitStaticAssertDecl(StaticAssertDecl *D) { /// contexts. void ASTDeclWriter::VisitDeclContext(DeclContext *DC, uint64_t LexicalOffset, uint64_t VisibleOffset) { - Record.push_back(LexicalOffset); - Record.push_back(VisibleOffset); + AddLocalOffset(LexicalOffset); + AddLocalOffset(VisibleOffset); } const Decl *ASTWriter::getFirstLocalDecl(const Decl *D) { @@ -1626,7 +1632,7 @@ void ASTDeclWriter::VisitRedeclarable(Redeclarable<T> *D) { else { auto Start = Writer.Stream.GetCurrentBitNo(); Writer.Stream.EmitRecord(LOCAL_REDECLARATIONS, LocalRedecls); - Record.push_back(Writer.Stream.GetCurrentBitNo() - Start); + AddLocalOffset(Start); } } else { Record.push_back(0); |