From 40e80710a0282a318ab2c33bbc8789a1b5c1352a Mon Sep 17 00:00:00 2001 From: Paul Semel Date: Wed, 3 Apr 2019 17:13:45 +0000 Subject: [PATCH] [DWARF] check whether the DIE is valid before querying for information Differential Revision: https://reviews.llvm.org/D60147 llvm-svn: 357607 --- lib/DebugInfo/DWARF/DWARFContext.cpp | 3 +++ test/DebugInfo/dwarfdump-bad-lookup-address.test | 11 +++++++++++ 2 files changed, 14 insertions(+) create mode 100644 test/DebugInfo/dwarfdump-bad-lookup-address.test diff --git a/lib/DebugInfo/DWARF/DWARFContext.cpp b/lib/DebugInfo/DWARF/DWARFContext.cpp index 789874f5cbd..720fadb0dc7 100644 --- a/lib/DebugInfo/DWARF/DWARFContext.cpp +++ b/lib/DebugInfo/DWARF/DWARFContext.cpp @@ -925,6 +925,9 @@ DWARFContext::DIEsForAddress DWARFContext::getDIEsForAddress(uint64_t Address) { DWARFDie DIE = Worklist.back(); Worklist.pop_back(); + if (!DIE.isValid()) + continue; + if (DIE.getTag() == DW_TAG_lexical_block && DIE.addressRangeContainsAddress(Address)) { Result.BlockDIE = DIE; diff --git a/test/DebugInfo/dwarfdump-bad-lookup-address.test b/test/DebugInfo/dwarfdump-bad-lookup-address.test new file mode 100644 index 00000000000..fc888513629 --- /dev/null +++ b/test/DebugInfo/dwarfdump-bad-lookup-address.test @@ -0,0 +1,11 @@ +#RUN: llvm-dwarfdump -lookup 1161 %p/Inputs/dwarfdump-test.macho-i386.o | FileCheck %s + +// When we pass an address to getDIEsFromAddress that doesn't belong to any DIE +// (only to a CU), this function is triggering an assert, which is not the +// intended behavior (as the address still belongs to a CU). + +#CHECK: DW_TAG_compile_unit +#CHECK-NEXT: DW_AT_producer{{.*}}"clang version 3.6.2 (tags/RELEASE_362/final)" +#CHECK-NEXT: DW_AT_language{{.*}}DW_LANG_C_plus_plus +#CHECK-NEXT: DW_AT_name{{.*}}"dwarfdump-test.cc" +#CHECK-NOT: DW_TAG