[Lldb-commits] [lldb] r263824 - 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.

Greg Clayton via lldb-commits lldb-commits at lists.llvm.org
Fri Mar 18 13:33:49 PDT 2016


Author: gclayton
Date: Fri Mar 18 15:33:49 2016
New Revision: 263824

URL: http://llvm.org/viewvc/llvm-project?rev=263824&view=rev
Log:
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.

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=263824&r1=263823&r2=263824&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Fri Mar 18 15:33:49 2016
@@ -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);
+                            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)
+                                // 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
                             {
-                                const DWARFRangeList::Entry& range = dwarf_scope_ranges.GetEntryRef(i);
-                                scope_ranges.Append(range.GetRangeBase() + die.GetCU()->GetBaseAddress(),
-                                                    range.GetByteSize());
+                                // 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:




More information about the lldb-commits mailing list