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:


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to