Author: tberghammer Date: Mon Sep 14 10:44:29 2015 New Revision: 247571 URL: http://llvm.org/viewvc/llvm-project?rev=247571&view=rev Log: Fix a possible SEGV in SymbolFileDWARF
The iterator pointing to an element of a dense map was used after the element from was removed from the map what isn't guaranteed to be valid at that time. Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp?rev=247571&r1=247570&r2=247571&view=diff ============================================================================== --- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original) +++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Mon Sep 14 10:44:29 2015 @@ -1513,15 +1513,16 @@ SymbolFileDWARF::CompleteType (CompilerT // We have already resolved this type... return true; } + + DWARFDebugInfo* debug_info = DebugInfo(); + DWARFDIE dwarf_die = debug_info->GetDIE(die_it->getSecond()); + // Once we start resolving this type, remove it from the forward declaration // map in case anyone child members or other types require this type to get resolved. // The type will get resolved when all of the calls to SymbolFileDWARF::ResolveClangOpaqueTypeDefinition // are done. - GetForwardDeclClangTypeToDie().erase (clang_type_no_qualifiers.GetOpaqueQualType()); + GetForwardDeclClangTypeToDie().erase (die_it); - DWARFDebugInfo* debug_info = DebugInfo(); - - DWARFDIE dwarf_die = debug_info->GetDIE(die_it->getSecond()); Type *type = GetDIEToType().lookup (dwarf_die.GetDIE()); Log *log (LogChannelDWARF::GetLogIfAny(DWARF_LOG_DEBUG_INFO|DWARF_LOG_TYPE_COMPLETION)); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits