On Thu, Apr 14, 2016 at 4:18 AM, Nico Weber <tha...@chromium.org> wrote:
> This broke building on > http://lab.llvm.org:8011/builders/clang-x64-ninja-win7 . I tried fixing > in r266290. > Oh, this is the hilarious MSVC do-while-inside-range-for bug again. Thanks for the fix =) > On Wed, Apr 13, 2016 at 5:57 PM, Richard Smith via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: rsmith >> Date: Wed Apr 13 16:57:08 2016 >> New Revision: 266254 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=266254&view=rev >> Log: >> [modules] Remove CXX_CTOR_INITIALIZERS_OFFSETS table. Instead of storing >> an ID >> of a table entry in the corresponding decl, store an offset from the >> current >> record to the relevant CXX_CTOR_INITIALIZERS record. This results in fewer >> indirections and a minor .pcm file size reduction. >> >> Modified: >> cfe/trunk/include/clang/AST/DeclCXX.h >> cfe/trunk/include/clang/AST/RecursiveASTVisitor.h >> cfe/trunk/include/clang/Serialization/ASTBitCodes.h >> cfe/trunk/include/clang/Serialization/ASTReader.h >> cfe/trunk/include/clang/Serialization/ASTWriter.h >> cfe/trunk/include/clang/Serialization/Module.h >> cfe/trunk/lib/CodeGen/CGClass.cpp >> cfe/trunk/lib/Serialization/ASTReader.cpp >> cfe/trunk/lib/Serialization/ASTReaderDecl.cpp >> cfe/trunk/lib/Serialization/ASTWriter.cpp >> cfe/trunk/lib/Serialization/ASTWriterDecl.cpp >> cfe/trunk/lib/Serialization/Module.cpp >> >> Modified: cfe/trunk/include/clang/AST/DeclCXX.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/AST/DeclCXX.h (original) >> +++ cfe/trunk/include/clang/AST/DeclCXX.h Wed Apr 13 16:57:08 2016 >> @@ -2134,8 +2134,7 @@ public: >> assert(I < getNumArrayIndices() && "Out of bounds member array >> index"); >> getTrailingObjects<VarDecl *>()[I] = Index; >> } >> - ArrayRef<VarDecl *> getArrayIndexes() { >> - assert(getNumArrayIndices() != 0 && "Getting indexes for non-array >> init"); >> + ArrayRef<VarDecl *> getArrayIndices() { >> return llvm::makeArrayRef(getTrailingObjects<VarDecl *>(), >> getNumArrayIndices()); >> } >> >> Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original) >> +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Wed Apr 13 16:57:08 >> 2016 >> @@ -839,10 +839,10 @@ bool RecursiveASTVisitor<Derived>::Trave >> if (Init->isWritten() || getDerived().shouldVisitImplicitCode()) >> TRY_TO(TraverseStmt(Init->getInit())); >> >> - if (Init->getNumArrayIndices() && >> getDerived().shouldVisitImplicitCode()) >> - for (VarDecl *VD : Init->getArrayIndexes()) { >> + if (getDerived().shouldVisitImplicitCode()) >> + for (VarDecl *VD : Init->getArrayIndices()) >> TRY_TO(TraverseDecl(VD)); >> - } >> + >> return true; >> } >> >> >> Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original) >> +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Wed Apr 13 >> 16:57:08 2016 >> @@ -573,9 +573,7 @@ namespace clang { >> /// \brief Record code for potentially unused local typedef names. >> UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES = 52, >> >> - /// \brief Record code for the table of offsets to >> CXXCtorInitializers >> - /// lists. >> - CXX_CTOR_INITIALIZERS_OFFSETS = 53, >> + // ID 53 used to be a table of constructor initializer records. >> >> /// \brief Delete expressions that will be analyzed later. >> DELETE_EXPRS_TO_ANALYZE = 54, >> >> Modified: cfe/trunk/include/clang/Serialization/ASTReader.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Serialization/ASTReader.h (original) >> +++ cfe/trunk/include/clang/Serialization/ASTReader.h Wed Apr 13 16:57:08 >> 2016 >> @@ -1971,11 +1971,6 @@ public: >> ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record, >> unsigned &Idx); >> >> - /// \brief Read a CXXCtorInitializers ID from the given record and >> - /// return its global bit offset. >> - uint64_t ReadCXXCtorInitializersRef(ModuleFile &M, const RecordData >> &Record, >> - unsigned &Idx); >> - >> /// \brief Read the contents of a CXXCtorInitializer array. >> CXXCtorInitializer **GetExternalCXXCtorInitializers(uint64_t Offset) >> override; >> >> >> Modified: cfe/trunk/include/clang/Serialization/ASTWriter.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTWriter.h?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Serialization/ASTWriter.h (original) >> +++ cfe/trunk/include/clang/Serialization/ASTWriter.h Wed Apr 13 16:57:08 >> 2016 >> @@ -438,33 +438,6 @@ private: >> /// in the order they should be written. >> SmallVector<QueuedCXXBaseSpecifiers, 2> CXXBaseSpecifiersToWrite; >> >> - /// \brief The offset of each CXXCtorInitializer list within the AST. >> - SmallVector<uint32_t, 16> CXXCtorInitializersOffsets; >> - >> - /// \brief The first ID number we can use for our own ctor >> initializers. >> - serialization::CXXCtorInitializersID FirstCXXCtorInitializersID; >> - >> - /// \brief The ctor initializers ID that will be assigned to the next >> new >> - /// list of C++ ctor initializers. >> - serialization::CXXCtorInitializersID NextCXXCtorInitializersID; >> - >> - /// \brief A set of C++ ctor initializers that is queued to be written >> - /// into the AST file. >> - struct QueuedCXXCtorInitializers { >> - QueuedCXXCtorInitializers() : ID() {} >> - >> - QueuedCXXCtorInitializers(serialization::CXXCtorInitializersID ID, >> - ArrayRef<CXXCtorInitializer*> Inits) >> - : ID(ID), Inits(Inits) {} >> - >> - serialization::CXXCtorInitializersID ID; >> - ArrayRef<CXXCtorInitializer*> Inits; >> - }; >> - >> - /// \brief Queue of C++ ctor initializers to be written to the AST >> file, >> - /// in the order they should be written. >> - SmallVector<QueuedCXXCtorInitializers, 2> CXXCtorInitializersToWrite; >> - >> /// \brief A mapping from each known submodule to its ID number, which >> will >> /// be a positive integer. >> llvm::DenseMap<Module *, unsigned> SubmoduleIDs; >> @@ -494,7 +467,6 @@ private: >> void WritePragmaDiagnosticMappings(const DiagnosticsEngine &Diag, >> bool isModule); >> void WriteCXXBaseSpecifiersOffsets(); >> - void WriteCXXCtorInitializersOffsets(); >> >> unsigned TypeExtQualAbbrev; >> unsigned TypeFunctionProtoAbbrev; >> @@ -660,11 +632,6 @@ public: >> /// \brief Emit a UnresolvedSet structure. >> void AddUnresolvedSet(const ASTUnresolvedSet &Set, RecordDataImpl >> &Record); >> >> - /// \brief Emit the ID for a CXXCtorInitializer array and register the >> array >> - /// for later serialization. >> - void AddCXXCtorInitializersRef(ArrayRef<CXXCtorInitializer *> Inits, >> - RecordDataImpl &Record); >> - >> /// \brief Add a string to the given record. >> void AddString(StringRef Str, RecordDataImpl &Record); >> >> @@ -703,15 +670,10 @@ public: >> /// via \c AddCXXBaseSpecifiersRef(). >> void FlushCXXBaseSpecifiers(); >> >> - /// \brief Flush all of the C++ constructor initializer lists that >> have been >> - /// added via \c AddCXXCtorInitializersRef(). >> - void FlushCXXCtorInitializers(); >> - >> /// \brief Flush all pending records that are tacked onto the end of >> /// decl and decl update records. >> void FlushPendingAfterDecl() { >> FlushCXXBaseSpecifiers(); >> - FlushCXXCtorInitializers(); >> } >> >> /// \brief Record an ID for the given switch-case statement. >> @@ -988,15 +950,8 @@ public: >> /// \brief Emit a C++ base specifier. >> void AddCXXBaseSpecifier(const CXXBaseSpecifier &Base); >> >> - /// \brief Emit the ID for a CXXCtorInitializer array and register the >> array >> - /// for later serialization. >> - void AddCXXCtorInitializersRef(ArrayRef<CXXCtorInitializer *> Inits) { >> - return Writer->AddCXXCtorInitializersRef(Inits, *Record); >> - } >> - >> /// \brief Emit a CXXCtorInitializer array. >> - void AddCXXCtorInitializers(const CXXCtorInitializer *const >> *CtorInitializers, >> - unsigned NumCtorInitializers); >> + void AddCXXCtorInitializers(ArrayRef<CXXCtorInitializer*> CtorInits); >> >> void AddCXXDefinitionData(const CXXRecordDecl *D); >> >> >> Modified: cfe/trunk/include/clang/Serialization/Module.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/Module.h?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Serialization/Module.h (original) >> +++ cfe/trunk/include/clang/Serialization/Module.h Wed Apr 13 16:57:08 >> 2016 >> @@ -406,13 +406,6 @@ public: >> /// indexed by the C++ base specifier set ID (-1). >> const uint32_t *CXXBaseSpecifiersOffsets; >> >> - /// \brief The number of C++ ctor initializer lists in this AST file. >> - unsigned LocalNumCXXCtorInitializers; >> - >> - /// \brief Offset of each C++ ctor initializer list within the >> bitstream, >> - /// indexed by the C++ ctor initializer list ID minus 1. >> - const uint32_t *CXXCtorInitializersOffsets; >> - >> /// \brief Array of file-level DeclIDs sorted by file. >> const serialization::DeclID *FileSortedDecls; >> unsigned NumFileSortedDecls; >> >> Modified: cfe/trunk/lib/CodeGen/CGClass.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGClass.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGClass.cpp Wed Apr 13 16:57:08 2016 >> @@ -746,7 +746,7 @@ static void EmitMemberInitializer(CodeGe >> >> ArrayRef<VarDecl *> ArrayIndexes; >> if (MemberInit->getNumArrayIndices()) >> - ArrayIndexes = MemberInit->getArrayIndexes(); >> + ArrayIndexes = MemberInit->getArrayIndices(); >> CGF.EmitInitializerForField(Field, LHS, MemberInit->getInit(), >> ArrayIndexes); >> } >> >> >> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Wed Apr 13 16:57:08 2016 >> @@ -3064,17 +3064,6 @@ ASTReader::ReadASTBlock(ModuleFile &F, u >> break; >> } >> >> - case CXX_CTOR_INITIALIZERS_OFFSETS: { >> - if (F.LocalNumCXXCtorInitializers != 0) { >> - Error("duplicate CXX_CTOR_INITIALIZERS_OFFSETS record in AST >> file"); >> - return Failure; >> - } >> - >> - F.LocalNumCXXCtorInitializers = Record[0]; >> - F.CXXCtorInitializersOffsets = (const uint32_t *)Blob.data(); >> - break; >> - } >> - >> case DIAG_PRAGMA_MAPPINGS: >> if (F.PragmaDiagMappings.empty()) >> F.PragmaDiagMappings.swap(Record); >> @@ -6303,18 +6292,6 @@ void ASTReader::CompleteRedeclChain(cons >> } >> } >> >> -uint64_t ASTReader::ReadCXXCtorInitializersRef(ModuleFile &M, >> - const RecordData &Record, >> - unsigned &Idx) { >> - if (Idx >= Record.size() || Record[Idx] > >> M.LocalNumCXXCtorInitializers) { >> - Error("malformed AST file: missing C++ ctor initializers"); >> - return 0; >> - } >> - >> - unsigned LocalID = Record[Idx++]; >> - return getGlobalBitOffset(M, M.CXXCtorInitializersOffsets[LocalID - >> 1]); >> -} >> - >> CXXCtorInitializer ** >> ASTReader::GetExternalCXXCtorInitializers(uint64_t Offset) { >> RecordLocation Loc = getLocalBitOffset(Offset); >> >> Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Wed Apr 13 16:57:08 2016 >> @@ -59,6 +59,11 @@ namespace clang { >> return LocalOffset ? Offset - LocalOffset : 0; >> } >> >> + uint64_t ReadGlobalOffset(ModuleFile &F, const RecordData &R, >> unsigned &I) { >> + uint64_t Local = ReadLocalOffset(R, I); >> + return Local ? Reader.getGlobalBitOffset(F, Local) : 0; >> + } >> + >> SourceLocation ReadSourceLocation(const RecordData &R, unsigned &I) { >> return Reader.ReadSourceLocation(F, R, I); >> } >> @@ -472,8 +477,7 @@ void ASTDeclReader::Visit(Decl *D) { >> if (auto *CD = dyn_cast<CXXConstructorDecl>(FD)) { >> CD->NumCtorInitializers = Record[Idx++]; >> if (CD->NumCtorInitializers) >> - CD->CtorInitializers = >> - Reader.ReadCXXCtorInitializersRef(F, Record, Idx); >> + CD->CtorInitializers = ReadGlobalOffset(F, Record, Idx); >> } >> Reader.PendingBodies[FD] = GetCurrentCursorOffset(); >> HasPendingBody = true; >> @@ -1137,7 +1141,7 @@ void ASTDeclReader::VisitObjCImplementat >> D->setHasDestructors(Record[Idx++]); >> D->NumIvarInitializers = Record[Idx++]; >> if (D->NumIvarInitializers) >> - D->IvarInitializers = Reader.ReadCXXCtorInitializersRef(F, Record, >> Idx); >> + D->IvarInitializers = ReadGlobalOffset(F, Record, Idx); >> } >> >> void ASTDeclReader::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) { >> @@ -3745,8 +3749,7 @@ void ASTDeclReader::UpdateDecl(Decl *D, >> if (auto *CD = dyn_cast<CXXConstructorDecl>(FD)) { >> CD->NumCtorInitializers = Record[Idx++]; >> if (CD->NumCtorInitializers) >> - CD->CtorInitializers = >> - Reader.ReadCXXCtorInitializersRef(F, Record, Idx); >> + CD->CtorInitializers = ReadGlobalOffset(F, Record, Idx); >> } >> // Store the offset of the body so we can lazily load it later. >> Reader.PendingBodies[FD] = GetCurrentCursorOffset(); >> >> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Wed Apr 13 16:57:08 2016 >> @@ -983,7 +983,6 @@ void ASTWriter::WriteBlockInfoBlock() { >> RECORD(MSSTRUCT_PRAGMA_OPTIONS); >> RECORD(POINTERS_TO_MEMBERS_PRAGMA_OPTIONS); >> RECORD(UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES); >> - RECORD(CXX_CTOR_INITIALIZERS_OFFSETS); >> RECORD(DELETE_EXPRS_TO_ANALYZE); >> >> // SourceManager Block. >> @@ -2725,26 +2724,6 @@ void ASTWriter::WritePragmaDiagnosticMap >> Stream.EmitRecord(DIAG_PRAGMA_MAPPINGS, Record); >> } >> >> -void ASTWriter::WriteCXXCtorInitializersOffsets() { >> - if (CXXCtorInitializersOffsets.empty()) >> - return; >> - >> - // Create a blob abbreviation for the C++ ctor initializer offsets. >> - using namespace llvm; >> - >> - auto *Abbrev = new BitCodeAbbrev(); >> - Abbrev->Add(BitCodeAbbrevOp(CXX_CTOR_INITIALIZERS_OFFSETS)); >> - Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 32)); // size >> - Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); >> - unsigned CtorInitializersOffsetAbbrev = Stream.EmitAbbrev(Abbrev); >> - >> - // Write the base specifier offsets table. >> - RecordData::value_type Record[] = {CXX_CTOR_INITIALIZERS_OFFSETS, >> - CXXCtorInitializersOffsets.size()}; >> - Stream.EmitRecordWithBlob(CtorInitializersOffsetAbbrev, Record, >> - bytes(CXXCtorInitializersOffsets)); >> -} >> - >> void ASTWriter::WriteCXXBaseSpecifiersOffsets() { >> if (CXXBaseSpecifiersOffsets.empty()) >> return; >> @@ -4116,7 +4095,7 @@ ASTWriter::ASTWriter( >> FirstSelectorID(NUM_PREDEF_SELECTOR_IDS), >> NextSelectorID(FirstSelectorID), >> NumStatements(0), NumMacros(0), >> NumLexicalDeclContexts(0), NumVisibleDeclContexts(0), >> - NextCXXBaseSpecifiersID(1), NextCXXCtorInitializersID(1), >> + NextCXXBaseSpecifiersID(1), >> TypeExtQualAbbrev(0), TypeFunctionProtoAbbrev(0), >> DeclParmVarAbbrev(0), >> DeclContextLexicalAbbrev(0), DeclContextVisibleLookupAbbrev(0), >> UpdateVisibleAbbrev(0), DeclRecordAbbrev(0), DeclTypedefAbbrev(0), >> @@ -4518,7 +4497,6 @@ uint64_t ASTWriter::WriteASTCore(Sema &S >> if (!DeclUpdatesOffsetsRecord.empty()) >> Stream.EmitRecord(DECL_UPDATE_OFFSETS, DeclUpdatesOffsetsRecord); >> WriteCXXBaseSpecifiersOffsets(); >> - WriteCXXCtorInitializersOffsets(); >> WriteFileDeclIDsMap(); >> WriteSourceManagerBlock(Context.getSourceManager(), PP); >> WriteComments(); >> @@ -4899,14 +4877,6 @@ void ASTWriter::AddCXXTemporary(const CX >> AddDeclRef(Temp->getDestructor(), Record); >> } >> >> -void ASTWriter::AddCXXCtorInitializersRef(ArrayRef<CXXCtorInitializer *> >> Inits, >> - RecordDataImpl &Record) { >> - assert(!Inits.empty() && "Empty ctor initializer sets are not >> recorded"); >> - CXXCtorInitializersToWrite.push_back( >> - QueuedCXXCtorInitializers(NextCXXCtorInitializersID, Inits)); >> - Record.push_back(NextCXXCtorInitializersID++); >> -} >> - >> void ASTWriter::AddCXXBaseSpecifiersRef(CXXBaseSpecifier const *Bases, >> CXXBaseSpecifier const *BasesEnd, >> RecordDataImpl &Record) { >> @@ -5488,69 +5458,50 @@ void ASTWriter::FlushCXXBaseSpecifiers() >> } >> >> // FIXME: Move this out of the main ASTRecordWriter interface. >> -void ASTRecordWriter::AddCXXCtorInitializers( >> - const CXXCtorInitializer *const *CtorInitializers, >> - unsigned NumCtorInitializers) { >> - Record->push_back(NumCtorInitializers); >> - for (unsigned i=0; i != NumCtorInitializers; ++i) { >> - const CXXCtorInitializer *Init = CtorInitializers[i]; >> +static uint64_t >> +EmitCXXCtorInitializers(ASTWriter &W, >> + ArrayRef<CXXCtorInitializer *> CtorInits) { >> + ASTWriter::RecordData Record; >> + ASTRecordWriter Writer(W, Record); >> + Writer.push_back(CtorInits.size()); >> >> + for (auto *Init : CtorInits) { >> if (Init->isBaseInitializer()) { >> - Record->push_back(CTOR_INITIALIZER_BASE); >> - AddTypeSourceInfo(Init->getTypeSourceInfo()); >> - Record->push_back(Init->isBaseVirtual()); >> + Writer.push_back(CTOR_INITIALIZER_BASE); >> + Writer.AddTypeSourceInfo(Init->getTypeSourceInfo()); >> + Writer.push_back(Init->isBaseVirtual()); >> } else if (Init->isDelegatingInitializer()) { >> - Record->push_back(CTOR_INITIALIZER_DELEGATING); >> - AddTypeSourceInfo(Init->getTypeSourceInfo()); >> + Writer.push_back(CTOR_INITIALIZER_DELEGATING); >> + Writer.AddTypeSourceInfo(Init->getTypeSourceInfo()); >> } else if (Init->isMemberInitializer()){ >> - Record->push_back(CTOR_INITIALIZER_MEMBER); >> - AddDeclRef(Init->getMember()); >> + Writer.push_back(CTOR_INITIALIZER_MEMBER); >> + Writer.AddDeclRef(Init->getMember()); >> } else { >> - Record->push_back(CTOR_INITIALIZER_INDIRECT_MEMBER); >> - AddDeclRef(Init->getIndirectMember()); >> + Writer.push_back(CTOR_INITIALIZER_INDIRECT_MEMBER); >> + Writer.AddDeclRef(Init->getIndirectMember()); >> } >> >> - AddSourceLocation(Init->getMemberLocation()); >> - AddStmt(Init->getInit()); >> - AddSourceLocation(Init->getLParenLoc()); >> - AddSourceLocation(Init->getRParenLoc()); >> - Record->push_back(Init->isWritten()); >> + Writer.AddSourceLocation(Init->getMemberLocation()); >> + Writer.AddStmt(Init->getInit()); >> + Writer.AddSourceLocation(Init->getLParenLoc()); >> + Writer.AddSourceLocation(Init->getRParenLoc()); >> + Writer.push_back(Init->isWritten()); >> if (Init->isWritten()) { >> - Record->push_back(Init->getSourceOrder()); >> + Writer.push_back(Init->getSourceOrder()); >> } else { >> - Record->push_back(Init->getNumArrayIndices()); >> - for (unsigned i=0, e=Init->getNumArrayIndices(); i != e; ++i) >> - AddDeclRef(Init->getArrayIndex(i)); >> + Writer.push_back(Init->getNumArrayIndices()); >> + for (auto *VD : Init->getArrayIndices()) >> + Writer.AddDeclRef(VD); >> } >> } >> -} >> - >> -void ASTWriter::FlushCXXCtorInitializers() { >> - RecordData Record; >> - >> - unsigned N = CXXCtorInitializersToWrite.size(); >> - (void)N; // Silence unused warning in non-assert builds. >> - for (auto &Init : CXXCtorInitializersToWrite) { >> - Record.clear(); >> - >> - ASTRecordWriter Writer(*this, Record); >> - Writer.AddCXXCtorInitializers(Init.Inits.data(), Init.Inits.size()); >> - uint64_t Offset = >> Writer.Emit(serialization::DECL_CXX_CTOR_INITIALIZERS); >> >> - // Record the offset of this mem-initializer list. >> - unsigned Index = Init.ID - 1; >> - if (Index == CXXCtorInitializersOffsets.size()) >> - CXXCtorInitializersOffsets.push_back(Offset); >> - else { >> - if (Index > CXXCtorInitializersOffsets.size()) >> - CXXCtorInitializersOffsets.resize(Index + 1); >> - CXXCtorInitializersOffsets[Index] = Offset; >> - } >> - } >> + return Writer.Emit(serialization::DECL_CXX_CTOR_INITIALIZERS); >> +} >> >> - assert(N == CXXCtorInitializersToWrite.size() && >> - "added more ctor initializers while writing ctor initializers"); >> - CXXCtorInitializersToWrite.clear(); >> +// FIXME: Move this out of the main ASTRecordWriter interface. >> +void ASTRecordWriter::AddCXXCtorInitializers( >> + ArrayRef<CXXCtorInitializer *> CtorInits) { >> + AddOffset(EmitCXXCtorInitializers(*Writer, CtorInits)); >> } >> >> void ASTRecordWriter::AddCXXDefinitionData(const CXXRecordDecl *D) { >> >> Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Wed Apr 13 16:57:08 2016 >> @@ -823,7 +823,7 @@ void ASTDeclWriter::VisitObjCImplementat >> Record.push_back(D->hasDestructors()); >> Record.push_back(D->NumIvarInitializers); >> if (D->NumIvarInitializers) >> - Record.AddCXXCtorInitializersRef( >> + Record.AddCXXCtorInitializers( >> llvm::makeArrayRef(D->init_begin(), D->init_end())); >> Code = serialization::DECL_OBJC_IMPLEMENTATION; >> } >> @@ -2177,7 +2177,7 @@ void ASTRecordWriter::AddFunctionDefinit >> if (auto *CD = dyn_cast<CXXConstructorDecl>(FD)) { >> Record->push_back(CD->getNumCtorInitializers()); >> if (CD->getNumCtorInitializers()) >> - AddCXXCtorInitializersRef( >> + AddCXXCtorInitializers( >> llvm::makeArrayRef(CD->init_begin(), CD->init_end())); >> } >> AddStmt(FD->getBody()); >> >> Modified: cfe/trunk/lib/Serialization/Module.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/Module.cpp?rev=266254&r1=266253&r2=266254&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Serialization/Module.cpp (original) >> +++ cfe/trunk/lib/Serialization/Module.cpp Wed Apr 13 16:57:08 2016 >> @@ -38,7 +38,6 @@ ModuleFile::ModuleFile(ModuleKind Kind, >> SelectorLookupTableData(nullptr), SelectorLookupTable(nullptr), >> LocalNumDecls(0), DeclOffsets(nullptr), BaseDeclID(0), >> LocalNumCXXBaseSpecifiers(0), CXXBaseSpecifiersOffsets(nullptr), >> - LocalNumCXXCtorInitializers(0), CXXCtorInitializersOffsets(nullptr), >> FileSortedDecls(nullptr), NumFileSortedDecls(0), >> ObjCCategoriesMap(nullptr), LocalNumObjCCategoriesInMap(0), >> LocalNumTypes(0), TypeOffsets(nullptr), BaseTypeIndex(0) >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits