diff --git a/include/llvm/MC/MCContext.h b/include/llvm/MC/MCContext.h index a17e05d87c1..c1f2fac82f7 100644 --- a/include/llvm/MC/MCContext.h +++ b/include/llvm/MC/MCContext.h @@ -164,7 +164,7 @@ namespace llvm { struct ELFSectionKey { std::string SectionName; - std::string GroupName; + StringRef GroupName; ELFSectionKey(StringRef SectionName, StringRef GroupName) : SectionName(SectionName), GroupName(GroupName) {} bool operator<(const ELFSectionKey &Other) const { @@ -176,7 +176,7 @@ namespace llvm { struct COFFSectionKey { std::string SectionName; - std::string GroupName; + StringRef GroupName; int SelectionKey; COFFSectionKey(StringRef SectionName, StringRef GroupName, int SelectionKey) diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index 2afa21219fc..2cb81d06b05 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -291,6 +291,12 @@ const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type, unsigned Flags, unsigned EntrySize, StringRef Group, bool Unique, const char *BeginSymName) { + MCSymbol *GroupSym = nullptr; + if (!Group.empty()) { + GroupSym = GetOrCreateSymbol(Group); + Group = GroupSym->getName(); + } + // Do the lookup, if we have a hit, return it. auto IterBool = ELFUniquingMap.insert( std::make_pair(ELFSectionKey{Section, Group}, nullptr)); @@ -298,10 +304,6 @@ const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type, if (!IterBool.second && !Unique) return Entry.second; - MCSymbol *GroupSym = nullptr; - if (!Group.empty()) - GroupSym = GetOrCreateSymbol(Group); - StringRef CachedName = Entry.first.SectionName; SectionKind Kind; @@ -340,18 +342,19 @@ const MCSectionCOFF * MCContext::getCOFFSection(StringRef Section, unsigned Characteristics, SectionKind Kind, StringRef COMDATSymName, int Selection, const char *BeginSymName) { - // Do the lookup, if we have a hit, return it. + MCSymbol *COMDATSymbol = nullptr; + if (!COMDATSymName.empty()) { + COMDATSymbol = GetOrCreateSymbol(COMDATSymName); + COMDATSymName = COMDATSymbol->getName(); + } + // Do the lookup, if we have a hit, return it. COFFSectionKey T{Section, COMDATSymName, Selection}; auto IterBool = COFFUniquingMap.insert(std::make_pair(T, nullptr)); auto Iter = IterBool.first; if (!IterBool.second) return Iter->second; - MCSymbol *COMDATSymbol = nullptr; - if (!COMDATSymName.empty()) - COMDATSymbol = GetOrCreateSymbol(COMDATSymName); - MCSymbol *Begin = nullptr; if (BeginSymName) Begin = createTempSymbol(BeginSymName, false);