<div dir="ltr">Seems like an awful lot of DWARF assembly given the short description of the conditions necessary to tickle the bug - does the test case need to have apple names sections in it, for example?</div><br><div class="gmail_quote"><div dir="ltr">On Sat, Feb 17, 2018 at 5:08 AM Jonas Devlieghere via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jdevlieghere<br>
Date: Sat Feb 17 05:06:37 2018<br>
New Revision: 325430<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=325430&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=325430&view=rev</a><br>
Log:<br>
[dwarfdump] Fix spurious verification errors for DW_AT_location attributes<br>
<br>
Verifying any DWARF file that is optimized and contains at least one tag<br>
with a DW_AT_location with a location list offset as a<br>
DW_AT_form_dataXXX results in dwarfdump spuriously claiming that the<br>
location list is invalid.<br>
<br>
Differential revision: <a href="https://reviews.llvm.org/D40199" rel="noreferrer" target="_blank">https://reviews.llvm.org/D40199</a><br>
<br>
Added:<br>
    llvm/trunk/test/tools/dsymutil/Inputs/invalid.o   (with props)<br>
    llvm/trunk/test/tools/dsymutil/Inputs/invalid.s<br>
Modified:<br>
    llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp<br>
    llvm/trunk/test/tools/dsymutil/X86/verify.test<br>
    llvm/trunk/test/tools/llvm-dwarfdump/X86/debugloc.s<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp?rev=325430&r1=325429&r2=325430&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp?rev=325430&r1=325429&r2=325430&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp Sat Feb 17 05:06:37 2018<br>
@@ -410,22 +410,27 @@ unsigned DWARFVerifier::verifyDebugInfoA<br>
     ReportError("DIE has invalid DW_AT_stmt_list encoding:");<br>
     break;<br>
   case DW_AT_location: {<br>
-    Optional<ArrayRef<uint8_t>> Expr = AttrValue.Value.getAsBlock();<br>
-    if (!Expr) {<br>
-      ReportError("DIE has invalid DW_AT_location encoding:");<br>
-      break;<br>
+    auto VerifyLocation = [&](StringRef D) {<br>
+      DWARFUnit *U = Die.getDwarfUnit();<br>
+      DataExtractor Data(D, DCtx.isLittleEndian(), 0);<br>
+      DWARFExpression Expression(Data, U->getVersion(),<br>
+                                 U->getAddressByteSize());<br>
+      bool Error = llvm::any_of(Expression, [](DWARFExpression::Operation &Op) {<br>
+        return Op.isError();<br>
+      });<br>
+      if (Error)<br>
+        ReportError("DIE contains invalid DWARF expression:");<br>
+    };<br>
+    if (Optional<ArrayRef<uint8_t>> Expr = AttrValue.Value.getAsBlock()) {<br>
+      // Verify inlined location.<br>
+      VerifyLocation(llvm::toStringRef(*Expr));<br>
+    } else if (auto LocOffset = AttrValue.Value.getAsUnsignedConstant()) {<br>
+      // Verify location list.<br>
+      if (auto DebugLoc = DCtx.getDebugLoc())<br>
+        if (auto LocList = DebugLoc->getLocationListAtOffset(*LocOffset))<br>
+          for (const auto &Entry : LocList->Entries)<br>
+            VerifyLocation({Entry.Loc.data(), Entry.Loc.size()});<br>
     }<br>
-<br>
-    DWARFUnit *U = Die.getDwarfUnit();<br>
-    DataExtractor Data(<br>
-        StringRef(reinterpret_cast<const char *>(Expr->data()), Expr->size()),<br>
-        DCtx.isLittleEndian(), 0);<br>
-    DWARFExpression Expression(Data, U->getVersion(), U->getAddressByteSize());<br>
-    bool Error = llvm::any_of(Expression, [](DWARFExpression::Operation &Op) {<br>
-      return Op.isError();<br>
-    });<br>
-    if (Error)<br>
-      ReportError("DIE contains invalid DWARF expression:");<br>
     break;<br>
   }<br>
<br>
<br>
Added: llvm/trunk/test/tools/dsymutil/Inputs/invalid.o<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/Inputs/invalid.o?rev=325430&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/Inputs/invalid.o?rev=325430&view=auto</a><br>
==============================================================================<br>
Binary file - no diff available.<br>
<br>
Propchange: llvm/trunk/test/tools/dsymutil/Inputs/invalid.o<br>
------------------------------------------------------------------------------<br>
    svn:executable = *<br>
<br>
Propchange: llvm/trunk/test/tools/dsymutil/Inputs/invalid.o<br>
------------------------------------------------------------------------------<br>
    svn:mime-type = application/octet-stream<br>
<br>
Added: llvm/trunk/test/tools/dsymutil/Inputs/invalid.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/Inputs/invalid.s?rev=325430&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/Inputs/invalid.s?rev=325430&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/tools/dsymutil/Inputs/invalid.s (added)<br>
+++ llvm/trunk/test/tools/dsymutil/Inputs/invalid.s Sat Feb 17 05:06:37 2018<br>
@@ -0,0 +1,262 @@<br>
+# The DW_AT_low_pc was modified to be greater than the DW_AT_high_pc.<br>
+<br>
+       .section        __TEXT,__text,regular,pure_instructions<br>
+       .macosx_version_min 10, 13<br>
+       .globl  _g                      ## -- Begin function g<br>
+       .p2align        4, 0x90<br>
+_g:                                     ## @g<br>
+Lfunc_begin0:<br>
+       .file   1 "inlined.c"<br>
+       .loc    1 1 0                   ## inlined.c:1:0<br>
+       .cfi_startproc<br>
+## %bb.0:                               ## %entry<br>
+       pushq   %rbp<br>
+       .cfi_def_cfa_offset 16<br>
+       .cfi_offset %rbp, -16<br>
+       movq    %rsp, %rbp<br>
+       .cfi_def_cfa_register %rbp<br>
+Ltmp0:<br>
+       .loc    1 2 1 prologue_end      ## inlined.c:2:1<br>
+       popq    %rbp<br>
+       retq<br>
+Ltmp1:<br>
+Lfunc_end0:<br>
+       .cfi_endproc<br>
+                                        ## -- End function<br>
+       .globl  _main                   ## -- Begin function main<br>
+       .p2align        4, 0x90<br>
+_main:                                  ## @main<br>
+Lfunc_begin1:<br>
+       .loc    1 3 0                   ## inlined.c:3:0<br>
+       .cfi_startproc<br>
+## %bb.0:                               ## %entry<br>
+       pushq   %rbp<br>
+       .cfi_def_cfa_offset 16<br>
+       .cfi_offset %rbp, -16<br>
+       movq    %rsp, %rbp<br>
+       .cfi_def_cfa_register %rbp<br>
+       xorl    %eax, %eax<br>
+Ltmp2:<br>
+       .loc    1 5 1 prologue_end      ## inlined.c:5:1<br>
+       popq    %rbp<br>
+       retq<br>
+Ltmp3:<br>
+Lfunc_end1:<br>
+       .cfi_endproc<br>
+                                        ## -- End function<br>
+       .section        __DWARF,__debug_str,regular,debug<br>
+Linfo_string:<br>
+       .asciz  "clang version 7.0.0 "  ## string offset=0<br>
+       .asciz  "inlined.c"             ## string offset=21<br>
+       .asciz  "/private/tmp"          ## string offset=31<br>
+       .asciz  "g"                     ## string offset=44<br>
+       .asciz  "main"                  ## string offset=46<br>
+       .asciz  "int"                   ## string offset=51<br>
+       .section        __DWARF,__debug_abbrev,regular,debug<br>
+Lsection_abbrev:<br>
+       .byte   1                       ## Abbreviation Code<br>
+       .byte   17                      ## DW_TAG_compile_unit<br>
+       .byte   1                       ## DW_CHILDREN_yes<br>
+       .byte   37                      ## DW_AT_producer<br>
+       .byte   14                      ## DW_FORM_strp<br>
+       .byte   19                      ## DW_AT_language<br>
+       .byte   5                       ## DW_FORM_data2<br>
+       .byte   3                       ## DW_AT_name<br>
+       .byte   14                      ## DW_FORM_strp<br>
+       .byte   16                      ## DW_AT_stmt_list<br>
+       .byte   23                      ## DW_FORM_sec_offset<br>
+       .byte   27                      ## DW_AT_comp_dir<br>
+       .byte   14                      ## DW_FORM_strp<br>
+       .byte   19                      ## DW_AT_low_pc <- LOW PC > HIGH PC<br>
+       .byte   1                       ## DW_FORM_addr<br>
+       .byte   18                      ## DW_AT_high_pc<br>
+       .byte   6                       ## DW_FORM_data4<br>
+       .byte   0                       ## EOM(1)<br>
+       .byte   0                       ## EOM(2)<br>
+       .byte   2                       ## Abbreviation Code<br>
+       .byte   46                      ## DW_TAG_subprogram<br>
+       .byte   0                       ## DW_CHILDREN_no<br>
+       .byte   17                      ## DW_AT_low_pc<br>
+       .byte   1                       ## DW_FORM_addr<br>
+       .byte   18                      ## DW_AT_high_pc<br>
+       .byte   6                       ## DW_FORM_data4<br>
+       .byte   64                      ## DW_AT_frame_base<br>
+       .byte   24                      ## DW_FORM_exprloc<br>
+       .byte   3                       ## DW_AT_name<br>
+       .byte   14                      ## DW_FORM_strp<br>
+       .byte   58                      ## DW_AT_decl_file<br>
+       .byte   11                      ## DW_FORM_data1<br>
+       .byte   59                      ## DW_AT_decl_line<br>
+       .byte   11                      ## DW_FORM_data1<br>
+       .byte   63                      ## DW_AT_external<br>
+       .byte   25                      ## DW_FORM_flag_present<br>
+       .byte   0                       ## EOM(1)<br>
+       .byte   0                       ## EOM(2)<br>
+       .byte   3                       ## Abbreviation Code<br>
+       .byte   46                      ## DW_TAG_subprogram<br>
+       .byte   0                       ## DW_CHILDREN_no<br>
+       .byte   17                      ## DW_AT_low_pc<br>
+       .byte   1                       ## DW_FORM_addr<br>
+       .byte   18                      ## DW_AT_high_pc<br>
+       .byte   6                       ## DW_FORM_data4<br>
+       .byte   64                      ## DW_AT_frame_base<br>
+       .byte   24                      ## DW_FORM_exprloc<br>
+       .byte   3                       ## DW_AT_name<br>
+       .byte   14                      ## DW_FORM_strp<br>
+       .byte   58                      ## DW_AT_decl_file<br>
+       .byte   11                      ## DW_FORM_data1<br>
+       .byte   59                      ## DW_AT_decl_line<br>
+       .byte   11                      ## DW_FORM_data1<br>
+       .byte   73                      ## DW_AT_type<br>
+       .byte   19                      ## DW_FORM_ref4<br>
+       .byte   63                      ## DW_AT_external<br>
+       .byte   25                      ## DW_FORM_flag_present<br>
+       .byte   0                       ## EOM(1)<br>
+       .byte   0                       ## EOM(2)<br>
+       .byte   4                       ## Abbreviation Code<br>
+       .byte   36                      ## DW_TAG_base_type<br>
+       .byte   0                       ## DW_CHILDREN_no<br>
+       .byte   3                       ## DW_AT_name<br>
+       .byte   14                      ## DW_FORM_strp<br>
+       .byte   62                      ## DW_AT_encoding<br>
+       .byte   11                      ## DW_FORM_data1<br>
+       .byte   11                      ## DW_AT_byte_size<br>
+       .byte   11                      ## DW_FORM_data1<br>
+       .byte   0                       ## EOM(1)<br>
+       .byte   0                       ## EOM(2)<br>
+       .byte   0                       ## EOM(3)<br>
+       .section        __DWARF,__debug_info,regular,debug<br>
+Lsection_info:<br>
+Lcu_begin0:<br>
+       .long   92                      ## Length of Unit<br>
+       .short  4                       ## DWARF version number<br>
+Lset0 = Lsection_abbrev-Lsection_abbrev ## Offset Into Abbrev. Section<br>
+       .long   Lset0<br>
+       .byte   8                       ## Address Size (in bytes)<br>
+       .byte   1                       ## Abbrev [1] 0xb:0x55 DW_TAG_compile_unit<br>
+       .long   0                       ## DW_AT_producer<br>
+       .short  12                      ## DW_AT_language<br>
+       .long   21                      ## DW_AT_name<br>
+Lset1 = Lline_table_start0-Lsection_line ## DW_AT_stmt_list<br>
+       .long   Lset1<br>
+       .long   31                      ## DW_AT_comp_dir<br>
+       .quad   Lfunc_begin0            ## DW_AT_low_pc<br>
+Lset2 = Lfunc_end1-Lfunc_begin0         ## DW_AT_high_pc<br>
+       .long   Lset2<br>
+       .byte   2                       ## Abbrev [2] 0x2a:0x15 DW_TAG_subprogram<br>
+       .quad   Lfunc_begin0            ## DW_AT_low_pc<br>
+Lset3 = Lfunc_end0-Lfunc_begin0         ## DW_AT_high_pc<br>
+       .long   Lset3<br>
+       .byte   1                       ## DW_AT_frame_base<br>
+       .byte   86<br>
+       .long   44                      ## DW_AT_name<br>
+       .byte   1                       ## DW_AT_decl_file<br>
+       .byte   1                       ## DW_AT_decl_line<br>
+                                        ## DW_AT_external<br>
+       .byte   3                       ## Abbrev [3] 0x3f:0x19 DW_TAG_subprogram<br>
+       .quad   Lfunc_begin1            ## DW_AT_low_pc<br>
+Lset4 = Lfunc_end1-Lfunc_begin1         ## DW_AT_high_pc<br>
+       .long   Lset4<br>
+       .byte   1                       ## DW_AT_frame_base<br>
+       .byte   86<br>
+       .long   46                      ## DW_AT_name<br>
+       .byte   1                       ## DW_AT_decl_file<br>
+       .byte   3                       ## DW_AT_decl_line<br>
+       .long   88                      ## DW_AT_type<br>
+                                        ## DW_AT_external<br>
+       .byte   4                       ## Abbrev [4] 0x58:0x7 DW_TAG_base_type<br>
+       .long   51                      ## DW_AT_name<br>
+       .byte   5                       ## DW_AT_encoding<br>
+       .byte   4                       ## DW_AT_byte_size<br>
+       .byte   0                       ## End Of Children Mark<br>
+       .section        __DWARF,__debug_ranges,regular,debug<br>
+Ldebug_range:<br>
+       .section        __DWARF,__debug_macinfo,regular,debug<br>
+Ldebug_macinfo:<br>
+Lcu_macro_begin0:<br>
+       .byte   0                       ## End Of Macro List Mark<br>
+       .section        __DWARF,__apple_names,regular,debug<br>
+Lnames_begin:<br>
+       .long   1212240712              ## Header Magic<br>
+       .short  1                       ## Header Version<br>
+       .short  0                       ## Header Hash Function<br>
+       .long   2                       ## Header Bucket Count<br>
+       .long   2                       ## Header Hash Count<br>
+       .long   12                      ## Header Data Length<br>
+       .long   0                       ## HeaderData Die Offset Base<br>
+       .long   1                       ## HeaderData Atom Count<br>
+       .short  1                       ## DW_ATOM_die_offset<br>
+       .short  6                       ## DW_FORM_data4<br>
+       .long   0                       ## Bucket 0<br>
+       .long   -1                      ## Bucket 1<br>
+       .long   177676                  ## Hash in Bucket 0<br>
+       .long   2090499946              ## Hash in Bucket 0<br>
+       .long   LNames1-Lnames_begin    ## Offset in Bucket 0<br>
+       .long   LNames0-Lnames_begin    ## Offset in Bucket 0<br>
+LNames1:<br>
+       .long   44                      ## g<br>
+       .long   1                       ## Num DIEs<br>
+       .long   42<br>
+       .long   0<br>
+LNames0:<br>
+       .long   46                      ## main<br>
+       .long   1                       ## Num DIEs<br>
+       .long   63<br>
+       .long   0<br>
+       .section        __DWARF,__apple_objc,regular,debug<br>
+Lobjc_begin:<br>
+       .long   1212240712              ## Header Magic<br>
+       .short  1                       ## Header Version<br>
+       .short  0                       ## Header Hash Function<br>
+       .long   1                       ## Header Bucket Count<br>
+       .long   0                       ## Header Hash Count<br>
+       .long   12                      ## Header Data Length<br>
+       .long   0                       ## HeaderData Die Offset Base<br>
+       .long   1                       ## HeaderData Atom Count<br>
+       .short  1                       ## DW_ATOM_die_offset<br>
+       .short  6                       ## DW_FORM_data4<br>
+       .long   -1                      ## Bucket 0<br>
+       .section        __DWARF,__apple_namespac,regular,debug<br>
+Lnamespac_begin:<br>
+       .long   1212240712              ## Header Magic<br>
+       .short  1                       ## Header Version<br>
+       .short  0                       ## Header Hash Function<br>
+       .long   1                       ## Header Bucket Count<br>
+       .long   0                       ## Header Hash Count<br>
+       .long   12                      ## Header Data Length<br>
+       .long   0                       ## HeaderData Die Offset Base<br>
+       .long   1                       ## HeaderData Atom Count<br>
+       .short  1                       ## DW_ATOM_die_offset<br>
+       .short  6                       ## DW_FORM_data4<br>
+       .long   -1                      ## Bucket 0<br>
+       .section        __DWARF,__apple_types,regular,debug<br>
+Ltypes_begin:<br>
+       .long   1212240712              ## Header Magic<br>
+       .short  1                       ## Header Version<br>
+       .short  0                       ## Header Hash Function<br>
+       .long   1                       ## Header Bucket Count<br>
+       .long   1                       ## Header Hash Count<br>
+       .long   20                      ## Header Data Length<br>
+       .long   0                       ## HeaderData Die Offset Base<br>
+       .long   3                       ## HeaderData Atom Count<br>
+       .short  1                       ## DW_ATOM_die_offset<br>
+       .short  6                       ## DW_FORM_data4<br>
+       .short  3                       ## DW_ATOM_die_tag<br>
+       .short  5                       ## DW_FORM_data2<br>
+       .short  4                       ## DW_ATOM_type_flags<br>
+       .short  11                      ## DW_FORM_data1<br>
+       .long   0                       ## Bucket 0<br>
+       .long   193495088               ## Hash in Bucket 0<br>
+       .long   Ltypes0-Ltypes_begin    ## Offset in Bucket 0<br>
+Ltypes0:<br>
+       .long   51                      ## int<br>
+       .long   1                       ## Num DIEs<br>
+       .long   88<br>
+       .short  36<br>
+       .byte   0<br>
+       .long   0<br>
+<br>
+.subsections_via_symbols<br>
+       .section        __DWARF,__debug_line,regular,debug<br>
+Lsection_line:<br>
+Lline_table_start0:<br>
<br>
Modified: llvm/trunk/test/tools/dsymutil/X86/verify.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/X86/verify.test?rev=325430&r1=325429&r2=325430&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/dsymutil/X86/verify.test?rev=325430&r1=325429&r2=325430&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/tools/dsymutil/X86/verify.test (original)<br>
+++ llvm/trunk/test/tools/dsymutil/X86/verify.test Sat Feb 17 05:06:37 2018<br>
@@ -1,8 +1,23 @@<br>
-# Multiple inputs in flat mode<br>
-RUN: not llvm-dsymutil -verify -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 %p/../Inputs/basic-archive.macho.x86_64 %p/../Inputs/basic-lto.macho.x86_64 %p/../Inputs/basic-lto-dw4.macho.x86_64 -o %t 2>&1 | FileCheck %s --check-prefix=QUIET<br>
-RUN: not llvm-dsymutil -verify -verbose -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 %p/../Inputs/basic-archive.macho.x86_64 %p/../Inputs/basic-lto.macho.x86_64 %p/../Inputs/basic-lto-dw4.macho.x86_64 -o %t 2>&1 | FileCheck %s --check-prefix=QUIET --check-prefix=VERBOSE<br>
+# Positive tests in regular and verbose mode.<br>
+# RUN: llvm-dsymutil -verify -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 %p/../Inputs/basic-archive.macho.x86_64 %p/../Inputs/basic-lto.macho.x86_64 %p/../Inputs/basic-lto-dw4.macho.x86_64 -o %t 2>&1 | FileCheck %s --allow-empty --check-prefix=QUIET-SUCCESS<br>
+# RUN: llvm-dsymutil -verify -verbose -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 %p/../Inputs/basic-archive.macho.x86_64 %p/../Inputs/basic-lto.macho.x86_64 %p/../Inputs/basic-lto-dw4.macho.x86_64 -o %t 2>&1 | FileCheck %s --check-prefix=QUIET-SUCCESS --check-prefix=VERBOSE<br>
<br>
-VERBOSE: Verifying DWARF for architecture: x86_64<br>
-VERBOSE: error: DIE has invalid DW_AT_location encoding:<br>
-VERBOSE: error: DIE has invalid DW_AT_location encoding:<br>
-QUIET: error: verification failed<br>
+# VERBOSE: Verifying DWARF for architecture: x86_64<br>
+# QUIET-SUCCESS-NOT: error: verification failed<br>
+<br>
+# Negative tests in regular and verbose mode.<br>
+# (Invalid object generated from ../Inputs/invalid.s by modified the low PC.)<br>
+# RUN: not llvm-dsymutil -verify -oso-prepend-path=%p/../Inputs -y %s -o %t 2>&1 | FileCheck %s --check-prefix=QUIET-FAIL<br>
+# RUN: not llvm-dsymutil -verify -verbose -oso-prepend-path=%p/../Inputs -y %s -o %t 2>&1 | FileCheck %s --check-prefix=QUIET-FAIL --check-prefix=VERBOSE<br>
+<br>
+# QUIET-FAIL: error: verification failed<br>
+<br>
+---<br>
+triple:          'x86_64-apple-darwin'<br>
+objects:<br>
+  - filename:        invalid.o<br>
+    timestamp:       1518197670<br>
+    symbols:<br>
+      - { sym: _main, objAddr: 0x0000000000000010, binAddr: 0x0000000100000FB0, size: 0x00000008 }<br>
+      - { sym: _g, objAddr: 0x0000000000000000, binAddr: 0x0000000100000FA0, size: 0x00000010 }<br>
+...<br>
<br>
Modified: llvm/trunk/test/tools/llvm-dwarfdump/X86/debugloc.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/debugloc.s?rev=325430&r1=325429&r2=325430&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dwarfdump/X86/debugloc.s?rev=325430&r1=325429&r2=325430&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/tools/llvm-dwarfdump/X86/debugloc.s (original)<br>
+++ llvm/trunk/test/tools/llvm-dwarfdump/X86/debugloc.s Sat Feb 17 05:06:37 2018<br>
@@ -2,6 +2,10 @@<br>
 # RUN: | llvm-dwarfdump --debug-loc - \<br>
 # RUN: | FileCheck %s<br>
<br>
+# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o - \<br>
+# RUN: | llvm-dwarfdump --verify - \<br>
+# RUN: | FileCheck %s --check-prefix VERIFY<br>
+<br>
 # CHECK: .debug_loc contents:<br>
<br>
 # CHECK: 0x00000000:<br>
@@ -12,6 +16,9 @@<br>
 # CHECK-NEXT: [0x0000000000000010, 0x0000000000000013): DW_OP_reg5 RDI<br>
 # CHECK-NEXT: [0x0000000000000013, 0x0000000000000014): DW_OP_reg0 RAX<br>
<br>
+# VERIFY: Verifying .debug_info Unit Header Chain<br>
+# VERIFY-NOT: DIE has invalid DW_AT_location encoding<br>
+<br>
 # Source:<br>
 #   int* foo(int* i) { return i; }<br>
 #   int* bar(int* i) { return i; }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>