Don't crash if we have a DIE that has a DW_AT_ranges attribute and yet the SymbolFile...
authorGreg Clayton <gclayton@apple.com>
Fri, 12 Feb 2016 00:07:16 +0000 (00:07 +0000)
committerGreg Clayton <gclayton@apple.com>
Fri, 12 Feb 2016 00:07:16 +0000 (00:07 +0000)
<rdar://problem/24458016>

llvm-svn: 260626

lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp

index b9d8254..1758f3a 100644 (file)
@@ -482,11 +482,19 @@ DWARFDebugInfoEntry::GetDIENamesAndRanges
                 case DW_AT_ranges:
                     {
                         const DWARFDebugRanges* debug_ranges = dwarf2Data->DebugRanges();
-                        debug_ranges->FindRanges(form_value.Unsigned(), ranges);
-                        // All DW_AT_ranges 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.
-                        ranges.Slide(cu->GetBaseAddress());
+                        if (debug_ranges)
+                        {
+                            debug_ranges->FindRanges(form_value.Unsigned(), ranges);
+                            // All DW_AT_ranges 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.
+                            ranges.Slide(cu->GetBaseAddress());
+                        }
+                        else
+                        {
+                            cu->GetSymbolFileDWARF()->GetObjectFile()->GetModule()->ReportError ("{0x%8.8x}: DIE has DW_AT_ranges(0x%" PRIx64 ") attribute yet DWARF has no .debug_ranges, please file a bug and attach the file at the start of this error message",
+                                                                                                 m_offset, form_value.Unsigned());
+                        }
                     }
                     break;