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