diff options
-rw-r--r-- | lld/ELF/SyntheticSections.cpp | 5 | ||||
-rw-r--r-- | lld/ELF/SyntheticSections.h | 3 |
2 files changed, 5 insertions, 3 deletions
diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index b13aa47fd63..9f33ab33846 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -417,10 +417,11 @@ CieRecord *EhFrameSection<ELFT>::addCie(EhSectionPiece &Cie, &Sec->template getFile<ELFT>()->getRelocTargetSym(Rels[FirstRelI]); // Search for an existing CIE by CIE contents/relocation target pair. - CieRecord *Rec = &CieMap[{Cie.data(), Personality}]; + CieRecord *&Rec = CieMap[{Cie.data(), Personality}]; // If not found, create a new one. - if (Rec->Cie == nullptr) { + if (!Rec) { + Rec = make<CieRecord>(); Rec->Cie = &Cie; CieRecords.push_back(Rec); } diff --git a/lld/ELF/SyntheticSections.h b/lld/ELF/SyntheticSections.h index 31766794d41..3f19afbdba5 100644 --- a/lld/ELF/SyntheticSections.h +++ b/lld/ELF/SyntheticSections.h @@ -103,7 +103,8 @@ private: std::vector<CieRecord *> CieRecords; // CIE records are uniquified by their contents and personality functions. - llvm::DenseMap<std::pair<ArrayRef<uint8_t>, SymbolBody *>, CieRecord> CieMap; + llvm::DenseMap<std::pair<ArrayRef<uint8_t>, SymbolBody *>, CieRecord *> + CieMap; }; class GotSection : public SyntheticSection { |