1*8a64d80aSDavid Spickett# This tests a bug where we would incorrectly parse the size of an array if that 2*8a64d80aSDavid Spickett# size happened to match an existing DIE offset. This happened because we 3*8a64d80aSDavid Spickett# misinterpreted that value as a reference to a DIE specifying the VLA size even 4*8a64d80aSDavid Spickett# though the form was a data form (as it should be). 5*8a64d80aSDavid Spickett 6*8a64d80aSDavid Spickett# REQUIRES: lld 7*8a64d80aSDavid Spickett 8*8a64d80aSDavid Spickett# RUN: llvm-mc -triple x86_64-pc-linux %s -filetype=obj > %t.o 9*8a64d80aSDavid Spickett# RUN: ld.lld %t.o -o %t 10*8a64d80aSDavid Spickett# RUN: lldb-test symbols %t | FileCheck %s 11*8a64d80aSDavid Spickett 12*8a64d80aSDavid Spickett# CHECK: Variable{0x0000001e}, name = "X" 13*8a64d80aSDavid Spickett# CHECK-SAME: type = {0000000000000033} 0x{{[0-9A-F]*}} (char[56]) 14*8a64d80aSDavid Spickett 15*8a64d80aSDavid Spickett 16*8a64d80aSDavid Spickett# Generated from "char X[47];" 17*8a64d80aSDavid Spickett# The array size was modified by hand. 18*8a64d80aSDavid Spickett 19*8a64d80aSDavid Spickett .text 20*8a64d80aSDavid Spickett .file "-" 21*8a64d80aSDavid Spickett .file 1 "/tmp" "<stdin>" 22*8a64d80aSDavid Spickett .type X,@object # @X 23*8a64d80aSDavid Spickett .comm X,63,16 24*8a64d80aSDavid Spickett .section .debug_str,"MS",@progbits,1 25*8a64d80aSDavid Spickett.Linfo_string0: 26*8a64d80aSDavid Spickett .asciz "clang version 8.0.0 (trunk 349604) (llvm/trunk 349608)" # string offset=0 27*8a64d80aSDavid Spickett.Linfo_string1: 28*8a64d80aSDavid Spickett .asciz "-" # string offset=55 29*8a64d80aSDavid Spickett.Linfo_string2: 30*8a64d80aSDavid Spickett .asciz "/tmp" # string offset=57 31*8a64d80aSDavid Spickett.Linfo_string3: 32*8a64d80aSDavid Spickett .asciz "X" # string offset=62 33*8a64d80aSDavid Spickett.Linfo_string4: 34*8a64d80aSDavid Spickett .asciz "char" # string offset=64 35*8a64d80aSDavid Spickett.Linfo_string5: 36*8a64d80aSDavid Spickett .asciz "__ARRAY_SIZE_TYPE__" # string offset=69 37*8a64d80aSDavid Spickett .section .debug_abbrev,"",@progbits 38*8a64d80aSDavid Spickett .byte 1 # Abbreviation Code 39*8a64d80aSDavid Spickett .byte 17 # DW_TAG_compile_unit 40*8a64d80aSDavid Spickett .byte 1 # DW_CHILDREN_yes 41*8a64d80aSDavid Spickett .byte 37 # DW_AT_producer 42*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 43*8a64d80aSDavid Spickett .byte 19 # DW_AT_language 44*8a64d80aSDavid Spickett .byte 5 # DW_FORM_data2 45*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 46*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 47*8a64d80aSDavid Spickett .byte 16 # DW_AT_stmt_list 48*8a64d80aSDavid Spickett .byte 23 # DW_FORM_sec_offset 49*8a64d80aSDavid Spickett .byte 27 # DW_AT_comp_dir 50*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 51*8a64d80aSDavid Spickett .byte 0 # EOM(1) 52*8a64d80aSDavid Spickett .byte 0 # EOM(2) 53*8a64d80aSDavid Spickett .byte 2 # Abbreviation Code 54*8a64d80aSDavid Spickett .byte 52 # DW_TAG_variable 55*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 56*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 57*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 58*8a64d80aSDavid Spickett .byte 73 # DW_AT_type 59*8a64d80aSDavid Spickett .byte 19 # DW_FORM_ref4 60*8a64d80aSDavid Spickett .byte 63 # DW_AT_external 61*8a64d80aSDavid Spickett .byte 25 # DW_FORM_flag_present 62*8a64d80aSDavid Spickett .byte 58 # DW_AT_decl_file 63*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 64*8a64d80aSDavid Spickett .byte 59 # DW_AT_decl_line 65*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 66*8a64d80aSDavid Spickett .byte 2 # DW_AT_location 67*8a64d80aSDavid Spickett .byte 24 # DW_FORM_exprloc 68*8a64d80aSDavid Spickett .byte 0 # EOM(1) 69*8a64d80aSDavid Spickett .byte 0 # EOM(2) 70*8a64d80aSDavid Spickett .byte 3 # Abbreviation Code 71*8a64d80aSDavid Spickett .byte 1 # DW_TAG_array_type 72*8a64d80aSDavid Spickett .byte 1 # DW_CHILDREN_yes 73*8a64d80aSDavid Spickett .byte 73 # DW_AT_type 74*8a64d80aSDavid Spickett .byte 19 # DW_FORM_ref4 75*8a64d80aSDavid Spickett .byte 0 # EOM(1) 76*8a64d80aSDavid Spickett .byte 0 # EOM(2) 77*8a64d80aSDavid Spickett .byte 4 # Abbreviation Code 78*8a64d80aSDavid Spickett .byte 33 # DW_TAG_subrange_type 79*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 80*8a64d80aSDavid Spickett .byte 73 # DW_AT_type 81*8a64d80aSDavid Spickett .byte 19 # DW_FORM_ref4 82*8a64d80aSDavid Spickett .byte 55 # DW_AT_count 83*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 84*8a64d80aSDavid Spickett .byte 0 # EOM(1) 85*8a64d80aSDavid Spickett .byte 0 # EOM(2) 86*8a64d80aSDavid Spickett .byte 5 # Abbreviation Code 87*8a64d80aSDavid Spickett .byte 36 # DW_TAG_base_type 88*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 89*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 90*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 91*8a64d80aSDavid Spickett .byte 62 # DW_AT_encoding 92*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 93*8a64d80aSDavid Spickett .byte 11 # DW_AT_byte_size 94*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 95*8a64d80aSDavid Spickett .byte 0 # EOM(1) 96*8a64d80aSDavid Spickett .byte 0 # EOM(2) 97*8a64d80aSDavid Spickett .byte 6 # Abbreviation Code 98*8a64d80aSDavid Spickett .byte 36 # DW_TAG_base_type 99*8a64d80aSDavid Spickett .byte 0 # DW_CHILDREN_no 100*8a64d80aSDavid Spickett .byte 3 # DW_AT_name 101*8a64d80aSDavid Spickett .byte 14 # DW_FORM_strp 102*8a64d80aSDavid Spickett .byte 11 # DW_AT_byte_size 103*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 104*8a64d80aSDavid Spickett .byte 62 # DW_AT_encoding 105*8a64d80aSDavid Spickett .byte 11 # DW_FORM_data1 106*8a64d80aSDavid Spickett .byte 0 # EOM(1) 107*8a64d80aSDavid Spickett .byte 0 # EOM(2) 108*8a64d80aSDavid Spickett .byte 0 # EOM(3) 109*8a64d80aSDavid Spickett .section .debug_info,"",@progbits 110*8a64d80aSDavid Spickett.Lcu_begin0: 111*8a64d80aSDavid Spickett .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit 112*8a64d80aSDavid Spickett.Ldebug_info_start0: 113*8a64d80aSDavid Spickett .short 4 # DWARF version number 114*8a64d80aSDavid Spickett .long .debug_abbrev # Offset Into Abbrev. Section 115*8a64d80aSDavid Spickett .byte 8 # Address Size (in bytes) 116*8a64d80aSDavid Spickett .byte 1 # Abbrev [1] 0xb:0x43 DW_TAG_compile_unit 117*8a64d80aSDavid Spickett .long .Linfo_string0 # DW_AT_producer 118*8a64d80aSDavid Spickett .short 12 # DW_AT_language 119*8a64d80aSDavid Spickett .long .Linfo_string1 # DW_AT_name 120*8a64d80aSDavid Spickett .long 0 # DW_AT_stmt_list 121*8a64d80aSDavid Spickett .long .Linfo_string2 # DW_AT_comp_dir 122*8a64d80aSDavid Spickett .byte 2 # Abbrev [2] 0x1e:0x15 DW_TAG_variable 123*8a64d80aSDavid Spickett .long .Linfo_string3 # DW_AT_name 124*8a64d80aSDavid Spickett .long 51 # DW_AT_type 125*8a64d80aSDavid Spickett # DW_AT_external 126*8a64d80aSDavid Spickett .byte 1 # DW_AT_decl_file 127*8a64d80aSDavid Spickett .byte 1 # DW_AT_decl_line 128*8a64d80aSDavid Spickett .byte 9 # DW_AT_location 129*8a64d80aSDavid Spickett .byte 3 130*8a64d80aSDavid Spickett .quad X 131*8a64d80aSDavid Spickett .byte 3 # Abbrev [3] 0x33:0xc DW_TAG_array_type 132*8a64d80aSDavid Spickett .long 63 # DW_AT_type 133*8a64d80aSDavid Spickett.Ldie: 134*8a64d80aSDavid Spickett .byte 4 # Abbrev [4] 0x38:0x6 DW_TAG_subrange_type 135*8a64d80aSDavid Spickett .long 70 # DW_AT_type 136*8a64d80aSDavid Spickett .byte .Ldie-.Lcu_begin0 # DW_AT_count - should match the offset of an existing die 137*8a64d80aSDavid Spickett .byte 0 # End Of Children Mark 138*8a64d80aSDavid Spickett .byte 5 # Abbrev [5] 0x3f:0x7 DW_TAG_base_type 139*8a64d80aSDavid Spickett .long .Linfo_string4 # DW_AT_name 140*8a64d80aSDavid Spickett .byte 6 # DW_AT_encoding 141*8a64d80aSDavid Spickett .byte 1 # DW_AT_byte_size 142*8a64d80aSDavid Spickett .byte 6 # Abbrev [6] 0x46:0x7 DW_TAG_base_type 143*8a64d80aSDavid Spickett .long .Linfo_string5 # DW_AT_name 144*8a64d80aSDavid Spickett .byte 8 # DW_AT_byte_size 145*8a64d80aSDavid Spickett .byte 7 # DW_AT_encoding 146*8a64d80aSDavid Spickett .byte 0 # End Of Children Mark 147*8a64d80aSDavid Spickett.Ldebug_info_end0: 148