Index: lld/trunk/ELF/SyntheticSections.h =================================================================== --- lld/trunk/ELF/SyntheticSections.h +++ lld/trunk/ELF/SyntheticSections.h @@ -515,7 +515,7 @@ GdbHashTab SymbolTable; // The CU vector portion of the constant pool. - std::vector>> CuVectors; + std::vector> CuVectors; std::vector AddressArea; Index: lld/trunk/ELF/SyntheticSections.cpp =================================================================== --- lld/trunk/ELF/SyntheticSections.cpp +++ lld/trunk/ELF/SyntheticSections.cpp @@ -1778,11 +1778,11 @@ std::tie(IsNew, Sym) = SymbolTable.add(Hash, Offset); if (IsNew) { Sym->CuVectorIndex = CuVectors.size(); - CuVectors.push_back({{CuId, Pair.second}}); - continue; + CuVectors.push_back({}); } - CuVectors[Sym->CuVectorIndex].push_back({CuId, Pair.second}); + CuVectors[Sym->CuVectorIndex].push_back((Pair.second << 24) | + (uint32_t)CuId); } } @@ -1806,7 +1806,7 @@ ConstantPoolOffset = SymTabOffset + SymbolTable.getCapacity() * SymTabEntrySize; - for (std::vector> &CuVec : CuVectors) { + for (std::vector &CuVec : CuVectors) { CuVectorsOffset.push_back(CuVectorsSize); CuVectorsSize += OffsetTypeSize * (CuVec.size() + 1); } @@ -1859,14 +1859,11 @@ } // Write the CU vectors into the constant pool. - for (std::vector> &CuVec : CuVectors) { + for (std::vector &CuVec : CuVectors) { write32le(Buf, CuVec.size()); Buf += 4; - for (std::pair &P : CuVec) { - uint32_t Index = P.first; - uint8_t Flags = P.second; - Index |= Flags << 24; - write32le(Buf, Index); + for (uint32_t Val : CuVec) { + write32le(Buf, Val); Buf += 4; } }