1# RUN: yaml2obj %s | llvm-dwarfdump --statistics - | FileCheck %s
2
3## Check that coverage for variable locations which do not cover the parent
4## scope is tracked separately in "sum_all_variables(#bytes in any scope
5## covered by DW_AT_location)".
6##
7## The yaml represents this DWARF:
8##
9## DW_TAG_compile_unit
10##   DW_AT_low_pc	(0x0000000000000000)
11##   DW_AT_high_pc	(0x000000000000000b)
12##
13##   DW_TAG_subprogram
14##     DW_AT_low_pc	(0x0000000000000000)
15##     DW_AT_high_pc	(0x000000000000000b)
16##
17##     DW_TAG_lexical_block
18##       DW_AT_ranges	(0x00000000
19##          [0x0000000000000000, 0x0000000000000003)
20##          [0x0000000000000005, 0x0000000000000008))
21##
22##       // #bytes in parent scope: 6
23##       // #bytes in any scope covered by DW_AT_location: 6
24##       // #bytes in parent scope covered by DW_AT_location: 4
25##       DW_TAG_variable
26##         DW_AT_location	(0x00000000:
27##            [0x0000000000000000, 0x0000000000000006): DW_OP_reg5 RDI)
28##
29##       // #bytes in parent scope: 6
30##       // #bytes in any scope covered by DW_AT_location: 2
31##       // #bytes in parent scope covered by DW_AT_location: 0
32##       DW_TAG_variable
33##         DW_AT_location	(0x00000023:
34##            [0x0000000000000003, 0x0000000000000005): DW_OP_reg2 RCX)
35
36# CHECK: "version": 8,
37# CHECK: "sum_all_variables(#bytes in parent scope)": 12,
38# CHECK: "sum_all_variables(#bytes in any scope covered by DW_AT_location)": 8
39# CHECK: "sum_all_variables(#bytes in parent scope covered by DW_AT_location)": 4
40
41--- !ELF
42FileHeader:
43  Class:   ELFCLASS64
44  Data:    ELFDATA2LSB
45  Type:    ET_EXEC
46  Machine: EM_X86_64
47Sections:
48  - Name:         .debug_loc
49    Type:         SHT_PROGBITS
50    AddressAlign: 0x01
51    Content:      '00000000000000000600000000000000010055000000000000000000000000000000000300000000000000050000000000000001005200000000000000000000000000000000'
52  - Name:         .debug_ranges
53    Type:         SHT_PROGBITS
54    AddressAlign: 0x01
55    Content:      '000000000000000003000000000000000500000000000000080000000000000000000000000000000000000000000000'
56DWARF:
57  debug_abbrev:
58    - Table:
59      - Code:     1
60        Tag:      DW_TAG_compile_unit
61        Children: DW_CHILDREN_yes
62        Attributes:
63          - Attribute: DW_AT_low_pc
64            Form:      DW_FORM_addr
65          - Attribute: DW_AT_high_pc
66            Form:      DW_FORM_data4
67      - Code:     2
68        Tag:      DW_TAG_subprogram
69        Children: DW_CHILDREN_yes
70        Attributes:
71          - Attribute: DW_AT_low_pc
72            Form:      DW_FORM_addr
73          - Attribute: DW_AT_high_pc
74            Form:      DW_FORM_data4
75      - Code:     3
76        Tag:      DW_TAG_lexical_block
77        Children: DW_CHILDREN_yes
78        Attributes:
79          - Attribute: DW_AT_ranges
80            Form:      DW_FORM_sec_offset
81      - Code:     4
82        Tag:      DW_TAG_variable
83        Children: DW_CHILDREN_no
84        Attributes:
85          - Attribute: DW_AT_location
86            Form:      DW_FORM_sec_offset
87  debug_info:
88    - Version:    4
89      AbbrOffset: 0x00
90      Entries:
91        - AbbrCode: 1 ## DW_TAG_compile_unit
92          Values:
93            - Value: 0x00 ## DW_AT_low_pc
94            - Value: 0x0b ## DW_AT_high_pc
95        - AbbrCode: 2 ## DW_TAG_subprogram
96          Values:
97            - Value: 0x00 ## DW_AT_low_pc
98            - Value: 0x0b ## DW_AT_high_pc
99        - AbbrCode: 3 ## DW_TAG_lexical_block
100          Values:
101            - Value: 0x00 ## DW_AT_ranges
102        - AbbrCode: 4 ## DW_TAG_variable
103          Values:
104            - Value: 0x00 ## DW_AT_sec_offset
105        - AbbrCode: 4 ## DW_TAG_variable
106          Values:
107            - Value: 0x23 ## DW_AT_sec_offset
108        - AbbrCode: 0 ## NULL
109        - AbbrCode: 0 ## NULL
110        - AbbrCode: 0 ## NULL
111