diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp index c1cd587877de0..7481b7787ccac 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp @@ -393,12 +393,17 @@ Expected DWARFDie::getAddressRanges() const { return DWARFAddressRangesVector{{LowPC, HighPC, Index}}; std::optional Value = find(DW_AT_ranges); - if (Value) { - if (Value->getForm() == DW_FORM_rnglistx) - return U->findRnglistFromIndex(*Value->getAsSectionOffset()); - return U->findRnglistFromOffset(*Value->getAsSectionOffset()); - } - return DWARFAddressRangesVector(); + if (!Value) + return DWARFAddressRangesVector(); + + std::optional SecOff = Value->getAsSectionOffset(); + if (!SecOff) + return DWARFAddressRangesVector(); + + if (Value->getForm() == DW_FORM_rnglistx) + return U->findRnglistFromIndex(*SecOff); + + return U->findRnglistFromOffset(*SecOff); } bool DWARFDie::addressRangeContainsAddress(const uint64_t Address) const {