diff options
Diffstat (limited to 'llvm/lib/MC/MCContext.cpp')
-rw-r--r-- | llvm/lib/MC/MCContext.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index 6e72b50..c1db7e3 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -650,10 +650,16 @@ MCSectionGOFF *MCContext::getGOFFSection(StringRef Section, SectionKind Kind, MCSection *Parent, const MCExpr *SubsectionId) { // Do the lookup. If we don't have a hit, return a new section. - auto &GOFFSection = GOFFUniquingMap[Section.str()]; - if (!GOFFSection) - GOFFSection = new (GOFFAllocator.Allocate()) - MCSectionGOFF(Section, Kind, Parent, SubsectionId); + auto IterBool = + GOFFUniquingMap.insert(std::make_pair(Section.str(), nullptr)); + auto Iter = IterBool.first; + if (!IterBool.second) + return Iter->second; + + StringRef CachedName = Iter->first; + MCSectionGOFF *GOFFSection = new (GOFFAllocator.Allocate()) + MCSectionGOFF(CachedName, Kind, Parent, SubsectionId); + Iter->second = GOFFSection; return GOFFSection; } |