Index: source/Plugins/SymbolFile/DWARF/DIERef.h =================================================================== --- source/Plugins/SymbolFile/DWARF/DIERef.h +++ source/Plugins/SymbolFile/DWARF/DIERef.h @@ -25,10 +25,6 @@ explicit DIERef(const DWARFFormValue &form_value); - bool operator<(const DIERef &ref) const { - return die_offset < ref.die_offset; - } - explicit operator bool() const { return cu_offset != DW_INVALID_OFFSET || die_offset != DW_INVALID_OFFSET; } Index: source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -998,7 +998,7 @@ clang_type.GetOpaqueQualType(); dwarf->GetForwardDeclClangTypeToDie() [ClangUtil::RemoveFastQualifiers(clang_type).GetOpaqueQualType()] = - die.GetDIERef(); + die.GetID(); m_ast.SetHasExternalStorage(clang_type.GetOpaqueQualType(), true); } } Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h =================================================================== --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -311,7 +311,8 @@ typedef llvm::DenseMap DIEToClangType; - typedef llvm::DenseMap ClangTypeToDIE; + typedef llvm::DenseMap + ClangTypeToDIE; struct DWARFDataSegment { llvm::once_flag m_flag; @@ -475,8 +476,8 @@ bool m_fetched_external_modules : 1; lldb_private::LazyBool m_supports_DW_AT_APPLE_objc_complete_type; - typedef std::shared_ptr> DIERefSetSP; - typedef std::unordered_map NameToOffsetMap; + typedef std::set DIERefSet; + typedef llvm::StringMap NameToOffsetMap; NameToOffsetMap m_function_scope_qualified_name_map; std::unique_ptr m_ranges; std::unique_ptr m_rnglists; Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -2341,15 +2341,9 @@ dwo->GetMangledNamesForFunction(scope_qualified_name, mangled_names); } - NameToOffsetMap::iterator iter = - m_function_scope_qualified_name_map.find(scope_qualified_name); - if (iter == m_function_scope_qualified_name_map.end()) - return; - - DIERefSetSP set_sp = (*iter).second; - std::set::iterator set_iter; - for (set_iter = set_sp->begin(); set_iter != set_sp->end(); set_iter++) { - DWARFDIE die = DebugInfo()->GetDIE(*set_iter); + for (lldb::user_id_t uid : + m_function_scope_qualified_name_map.lookup(scope_qualified_name)) { + DWARFDIE die = GetDIE(uid); mangled_names.push_back(ConstString(die.GetMangledName())); } } @@ -2988,22 +2982,12 @@ type_list->Insert(type_sp); if (die.Tag() == DW_TAG_subprogram) { - DIERef die_ref = die.GetDIERef(); std::string scope_qualified_name(GetDeclContextForUID(die.GetID()) .GetScopeQualifiedName() .AsCString("")); if (scope_qualified_name.size()) { - NameToOffsetMap::iterator iter = - m_function_scope_qualified_name_map.find( - scope_qualified_name); - if (iter != m_function_scope_qualified_name_map.end()) - (*iter).second->insert(die_ref); - else { - DIERefSetSP new_set(new std::set); - new_set->insert(die_ref); - m_function_scope_qualified_name_map.emplace( - std::make_pair(scope_qualified_name, new_set)); - } + m_function_scope_qualified_name_map[scope_qualified_name].insert( + die.GetID()); } } }