From: Paul Semel Date: Wed, 3 Apr 2019 17:13:45 +0000 (+0000) Subject: [DWARF] check whether the DIE is valid before querying for information X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b1e750e16283a1b28388abcc02dc428fbb2f66c0;p=llvm [DWARF] check whether the DIE is valid before querying for information Differential Revision: https://reviews.llvm.org/D60147 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357607 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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