From: Greg Clayton Date: Fri, 18 Mar 2016 20:33:49 +0000 (+0000) Subject: Fixed a bug where DW_AT_start_scope would fall through to DW_AT_artificial in SymbolF... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=31460392c1ae69af903d381cf7d6d2280eea94a3;p=platform%2Fupstream%2Fllvm.git Fixed a bug where DW_AT_start_scope would fall through to DW_AT_artificial in SymbolFileDWARF::ParseVariableDIE(). This was caught by the clang warning that catches unannotated case fall throughs. llvm-svn: 263824 --- diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp index 4446d95..842575f 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -4200,44 +4200,45 @@ SymbolFileDWARF::ParseVariableDIE } break; case DW_AT_specification: - { - DWARFDebugInfo* debug_info = DebugInfo(); - if (debug_info) - spec_die = debug_info->GetDIE(DIERef(form_value)); + { + DWARFDebugInfo* debug_info = DebugInfo(); + if (debug_info) + spec_die = debug_info->GetDIE(DIERef(form_value)); + } break; - } case DW_AT_start_scope: - { - if (form_value.Form() == DW_FORM_sec_offset) { - DWARFRangeList dwarf_scope_ranges; - const DWARFDebugRanges* debug_ranges = DebugRanges(); - debug_ranges->FindRanges(form_value.Unsigned(), dwarf_scope_ranges); - - // All DW_AT_start_scope are relative to the base address of the - // compile unit. We add the compile unit base address to make - // sure all the addresses are properly fixed up. - for (size_t i = 0, count = dwarf_scope_ranges.GetSize(); i < count; ++i) + if (form_value.Form() == DW_FORM_sec_offset) { - const DWARFRangeList::Entry& range = dwarf_scope_ranges.GetEntryRef(i); - scope_ranges.Append(range.GetRangeBase() + die.GetCU()->GetBaseAddress(), - range.GetByteSize()); + DWARFRangeList dwarf_scope_ranges; + const DWARFDebugRanges* debug_ranges = DebugRanges(); + debug_ranges->FindRanges(form_value.Unsigned(), dwarf_scope_ranges); + + // All DW_AT_start_scope are relative to the base address of the + // compile unit. We add the compile unit base address to make + // sure all the addresses are properly fixed up. + for (size_t i = 0, count = dwarf_scope_ranges.GetSize(); i < count; ++i) + { + const DWARFRangeList::Entry& range = dwarf_scope_ranges.GetEntryRef(i); + scope_ranges.Append(range.GetRangeBase() + die.GetCU()->GetBaseAddress(), + range.GetByteSize()); + } + } + else + { + // TODO: Handle the case when DW_AT_start_scope have form constant. The + // dwarf spec is a bit ambiguous about what is the expected behavior in + // case the enclosing block have a non coninious address range and the + // DW_AT_start_scope entry have a form constant. + GetObjectFile()->GetModule()->ReportWarning ("0x%8.8" PRIx64 ": DW_AT_start_scope has unsupported form type (0x%x)\n", + die.GetID(), + form_value.Form()); } - } - else - { - // TODO: Handle the case when DW_AT_start_scope have form constant. The - // dwarf spec is a bit ambiguous about what is the expected behavior in - // case the enclosing block have a non coninious address range and the - // DW_AT_start_scope entry have a form constant. - GetObjectFile()->GetModule()->ReportWarning ("0x%8.8" PRIx64 ": DW_AT_start_scope has unsupported form type (0x%x)\n", - die.GetID(), - form_value.Form()); - } - scope_ranges.Sort(); - scope_ranges.CombineConsecutiveRanges(); - } + scope_ranges.Sort(); + scope_ranges.CombineConsecutiveRanges(); + } + break; case DW_AT_artificial: is_artificial = form_value.Boolean(); break; case DW_AT_accessibility: break; //accessibility = DW_ACCESS_to_AccessType(form_value.Unsigned()); break; case DW_AT_declaration: