Index: source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h =================================================================== --- source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h +++ source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h @@ -31,6 +31,7 @@ DWARFCompileUnit(SymbolFileDWARF *dwarf2Data); ~DWARFCompileUnit(); + // Object must be clear - either constructed now or after calling Clear(). bool Extract(const lldb_private::DWARFDataExtractor &debug_info, lldb::offset_t *offset_ptr); size_t ExtractDIEsIfNeeded(bool cu_die_only); Index: source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp +++ source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp @@ -71,8 +71,7 @@ bool DWARFCompileUnit::Extract(const DWARFDataExtractor &debug_info, lldb::offset_t *offset_ptr) { - Clear(); - + assert(m_offset == DW_INVALID_OFFSET); m_offset = *offset_ptr; if (debug_info.ValidOffset(*offset_ptr)) { Index: source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp +++ source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp @@ -293,6 +293,8 @@ // and create a new one for our own use! if (!cu.unique()) cu.reset(new DWARFCompileUnit(dwarf2Data)); + else + cu->Clear(); // Make sure we start on a proper offset = next_cu_offset;