Index: lld/COFF/Chunks.h =================================================================== --- lld/COFF/Chunks.h +++ lld/COFF/Chunks.h @@ -216,8 +216,7 @@ private: StringRef SectionName; std::vector AssocChildren; - llvm::iterator_range Relocs; - size_t NumRelocs; + ArrayRef Relocs; // Used by the garbage collector. bool Live; Index: lld/COFF/Chunks.cpp =================================================================== --- lld/COFF/Chunks.cpp +++ lld/COFF/Chunks.cpp @@ -31,8 +31,7 @@ SectionChunk::SectionChunk(ObjFile *F, const coff_section *H) : Chunk(SectionKind), Repl(this), Header(H), File(F), - Relocs(File->getCOFFObj()->getRelocations(Header)), - NumRelocs(std::distance(Relocs.begin(), Relocs.end())) { + Relocs(File->getCOFFObj()->getRelocations(Header)) { // Initialize SectionName. File->getCOFFObj()->getSectionName(Header, SectionName); Index: lld/COFF/ICF.cpp =================================================================== --- lld/COFF/ICF.cpp +++ lld/COFF/ICF.cpp @@ -65,7 +65,7 @@ // Returns a hash value for S. uint32_t ICF::getHash(SectionChunk *C) { - return hash_combine(C->getPermissions(), C->SectionName, C->NumRelocs, + return hash_combine(C->getPermissions(), C->SectionName, C->Relocs.size(), C->Alignment, uint32_t(C->Header->SizeOfRawData), C->Checksum, C->getContents()); } @@ -123,7 +123,7 @@ // Compare "non-moving" part of two sections, namely everything // except relocation targets. bool ICF::equalsConstant(const SectionChunk *A, const SectionChunk *B) { - if (A->NumRelocs != B->NumRelocs) + if (A->Relocs.size() != B->Relocs.size()) return false; // Compare relocations. Index: llvm/include/llvm/Object/COFF.h =================================================================== --- llvm/include/llvm/Object/COFF.h +++ llvm/include/llvm/Object/COFF.h @@ -1012,8 +1012,7 @@ llvm_unreachable("null symbol table pointer!"); } - iterator_range - getRelocations(const coff_section *Sec) const; + ArrayRef getRelocations(const coff_section *Sec) const; std::error_code getSectionName(const coff_section *Sec, StringRef &Res) const; uint64_t getSectionSize(const coff_section *Sec) const; Index: llvm/lib/Object/COFFObjectFile.cpp =================================================================== --- llvm/lib/Object/COFFObjectFile.cpp +++ llvm/lib/Object/COFFObjectFile.cpp @@ -1147,13 +1147,10 @@ return toRel(Reloc.getRawDataRefImpl()); } -iterator_range +ArrayRef COFFObjectFile::getRelocations(const coff_section *Sec) const { - const coff_relocation *I = getFirstReloc(Sec, Data, base()); - const coff_relocation *E = I; - if (I) - E += getNumberOfRelocations(Sec, Data, base()); - return make_range(I, E); + return {getFirstReloc(Sec, Data, base()), + getNumberOfRelocations(Sec, Data, base())}; } #define LLVM_COFF_SWITCH_RELOC_TYPE_NAME(reloc_type) \