blob: 379ca52b25374a489d5c40ce3e85511aa6dbbb1d [file] [log] [blame]
Mark Wielaardafda91c2017-11-02 16:24:41 +01001#! /bin/sh
2# Copyright (C) 2017 Red Hat, Inc.
3# This file is part of elfutils.
4#
5# This file is free software; you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation; either version 3 of the License, or
8# (at your option) any later version.
9#
10# elfutils is distributed in the hope that it will be useful, but
11# WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18. $srcdir/test-subr.sh
19
20# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77589
21#
22# program repro
23# type small_stride
24# character*40 long_string
25# integer small_pad
26# end type small_stride
27# type(small_stride), dimension (20), target :: unpleasant
28# character*40, pointer, dimension(:):: c40pt
29# integer i
30# do i = 0,19
31# unpleasant(i+1)%small_pad = i+1
32# unpleasant(i+1)%long_string = char (ichar('0') + i) // '-hello'
33# end do
34# c40pt => unpleasant%long_string
35# print *, c40pt ! break-here
36# end program repro
37#
38# Needs GCC7+
39# gfortran -o testfile-stridex dwarf-stridex.f90 -Wall -g
40
41testfiles testfile-stridex
42
43testrun_compare ${abs_top_builddir}/tests/varlocs --exprlocs -e testfile-stridex <<\EOF
44module 'testfile-stridex'
45[b] CU 'dwarf-stridex.f90'@400717
46 producer (strp)
47 language (data1)
48 identifier_case (data1)
49 name (strp)
50 comp_dir (strp)
51 low_pc (addr)
52 high_pc (data8)
53 stmt_list (sec_offset)
54 [2e] base_type "integer(kind=8)"
55 byte_size (data1)
56 encoding (data1)
57 name (strp)
58 [35] structure_type "small_stride"
59 name (strp)
60 byte_size (data1)
61 decl_file (data1)
62 decl_line (data1)
63 sibling (ref4)
64 [41] member "long_string"
65 name (strp)
66 decl_file (data1)
67 decl_line (data1)
68 type (ref4)
69 data_member_location (data1) {plus_uconst(0)}
70 [4d] member "small_pad"
71 name (strp)
72 decl_file (data1)
73 decl_line (data1)
74 type (ref4)
75 data_member_location (data1) {plus_uconst(40)}
76 [5a] string_type
77 byte_size (data1)
78 [5c] base_type "integer(kind=4)"
79 byte_size (data1)
80 encoding (data1)
81 name (strp)
82 [63] const_type
83 type (ref4)
84 [68] subprogram "main"
85 external (flag_present)
86 name (strp)
87 decl_file (data1)
88 decl_line (data1)
89 type (ref4)
90 low_pc (addr)
91 high_pc (data8)
92 frame_base (exprloc) {call_frame_cfa {bregx(7,8)}}
93 GNU_all_tail_call_sites (flag_present)
94 sibling (ref4)
95 [89] formal_parameter "argc"
96 name (strp)
97 decl_file (data1)
98 decl_line (data1)
99 type (ref4)
100 location (exprloc) {fbreg(-20)}
101 [97] formal_parameter "argv"
102 name (strp)
103 decl_file (data1)
104 decl_line (data1)
105 type (ref4)
106 location (exprloc) {fbreg(-32), deref}
107 [a7] pointer_type
108 byte_size (data1)
109 type (ref4)
110 [ad] base_type "character(kind=1)"
111 byte_size (data1)
112 encoding (data1)
113 name (strp)
114 [b4] subprogram "repro"
115 name (strp)
116 decl_file (data1)
117 decl_line (data1)
118 main_subprogram (flag_present)
119 calling_convention (data1)
120 low_pc (addr)
121 high_pc (data8)
122 frame_base (exprloc) {call_frame_cfa {bregx(7,8)}}
123 GNU_all_tail_call_sites (flag_present)
124 sibling (ref4)
125 [d2] variable "c40pt"
126 name (strp)
127 decl_file (data1)
128 decl_line (data1)
129 type (ref4)
130 location (exprloc) {fbreg(-128)}
131 [e1] variable "span.0"
132 name (strp)
133 type (ref4)
134 artificial (flag_present)
135 location (exprloc) {fbreg(-80)}
136 [ee] variable "i"
137 name (string)
138 decl_file (data1)
139 decl_line (data1)
140 type (ref4)
141 location (exprloc) {fbreg(-68)}
142 [fb] variable "unpleasant"
143 name (strp)
144 decl_file (data1)
145 decl_line (data1)
146 type (ref4)
147 location (exprloc) {fbreg(-1008)}
148 [10a] lexical_block
149 low_pc (addr)
150 high_pc (data8)
151 sibling (ref4)
152 [11f] lexical_block
153 low_pc (addr)
154 high_pc (data8)
155 [131] lexical_block
156 low_pc (addr)
157 high_pc (data8)
158 [142] lexical_block
159 low_pc (addr)
160 high_pc (data8)
161 [153] lexical_block
162 low_pc (addr)
163 high_pc (data8)
164 [167] array_type
165 data_location (exprloc) {push_object_address, deref}
166 associated (exprloc) {push_object_address, deref, lit0, ne}
167 type (ref4)
168 sibling (ref4)
169 [178] subrange_type
170 lower_bound (exprloc) {push_object_address, plus_uconst(32), deref}
171 upper_bound (exprloc) {push_object_address, plus_uconst(40), deref}
172 byte_stride (exprloc) {push_object_address, plus_uconst(24), deref, GNU_variable_value([e1]) {fbreg(-80)}, mul}
173 [18f] array_type
174 type (ref4)
175 [194] subrange_type
176 type (ref4)
177 upper_bound (sdata)
178EOF
179
180exit 0