Index: llvm/lib/DebugInfo/DWARF/DWARFContext.cpp =================================================================== --- llvm/lib/DebugInfo/DWARF/DWARFContext.cpp +++ llvm/lib/DebugInfo/DWARF/DWARFContext.cpp @@ -925,6 +925,9 @@ DWARFDie DIE = Worklist.back(); Worklist.pop_back(); + if (!DIE.isValid()) + continue; + if (DIE.getTag() == DW_TAG_lexical_block && DIE.addressRangeContainsAddress(Address)) { Result.BlockDIE = DIE; Index: llvm/test/DebugInfo/dwarfdump-bad-lookup-address.test =================================================================== --- /dev/null +++ llvm/test/DebugInfo/dwarfdump-bad-lookup-address.test @@ -0,0 +1,10 @@ +#RUN: llvm-dwarfdump -lookup 1161 %p/Inputs/dwarfdump-test.macho-i386.o | FileCheck %s + +#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-NEXT: DW_AT_stmt_list{{.*}}00000000 +#CHECK-NEXT: DW_AT_comp_dir{{.*}}"/tmp/dbginfo" +#CHECK-NEXT: DW_AT_low_pc{{.*}}0000000000000000 +#CHECK-NEXT: DW_AT_ranges{{.*}}00000000