Index: lld/trunk/ELF/InputFiles.cpp =================================================================== --- lld/trunk/ELF/InputFiles.cpp +++ lld/trunk/ELF/InputFiles.cpp @@ -876,7 +876,7 @@ // Partially parse the shared object file so that we can call // getSoName on this object. template void SharedFile::parseDynamic() { - const Elf_Shdr *DynamicSec = nullptr; + ArrayRef DynamicTags; const ELFFile Obj = this->getObj(); ArrayRef Sections = CHECK(Obj.sections(), this); @@ -889,7 +889,8 @@ this->initSymtab(Sections, &Sec); break; case SHT_DYNAMIC: - DynamicSec = &Sec; + DynamicTags = + CHECK(Obj.template getSectionContentsAsArray(&Sec), this); break; case SHT_GNU_versym: this->VersymSec = &Sec; @@ -904,11 +905,7 @@ error("SHT_GNU_versym should be associated with symbol table"); // Search for a DT_SONAME tag to initialize this->SoName. - if (!DynamicSec) - return; - ArrayRef Arr = - CHECK(Obj.template getSectionContentsAsArray(DynamicSec), this); - for (const Elf_Dyn &Dyn : Arr) { + for (const Elf_Dyn &Dyn : DynamicTags) { if (Dyn.d_tag == DT_NEEDED) { uint64_t Val = Dyn.getVal(); if (Val >= this->StringTable.size())