[DWARF] check whether the DIE is valid before querying for information

Differential Revision: https://reviews.llvm.org/D60147

llvm-svn: 357607
This commit is contained in:
Paul Semel 2019-04-03 17:13:45 +00:00
parent 1de15f6f33
commit 0c27bc2e1f
2 changed files with 14 additions and 0 deletions

View File

@ -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;

View File

@ -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