#! /bin/sh # Copyright (C) 2017 Red Hat, Inc. # This file is part of elfutils. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # elfutils is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. . $srcdir/test-subr.sh # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77589 # # program repro # type small_stride # character*40 long_string # integer small_pad # end type small_stride # type(small_stride), dimension (20), target :: unpleasant # character*40, pointer, dimension(:):: c40pt # integer i # do i = 0,19 # unpleasant(i+1)%small_pad = i+1 # unpleasant(i+1)%long_string = char (ichar('0') + i) // '-hello' # end do # c40pt => unpleasant%long_string # print *, c40pt ! break-here # end program repro # # Needs GCC7+ # gfortran -o testfile-stridex dwarf-stridex.f90 -Wall -g testfiles testfile-stridex testrun_compare ${abs_top_builddir}/tests/varlocs --exprlocs -e testfile-stridex <<\EOF module 'testfile-stridex' [b] CU 'dwarf-stridex.f90'@400717 producer (strp) language (data1) identifier_case (data1) name (strp) comp_dir (strp) low_pc (addr) high_pc (data8) stmt_list (sec_offset) [2e] base_type "integer(kind=8)" byte_size (data1) encoding (data1) name (strp) [35] structure_type "small_stride" name (strp) byte_size (data1) decl_file (data1) decl_line (data1) sibling (ref4) [41] member "long_string" name (strp) decl_file (data1) decl_line (data1) type (ref4) data_member_location (data1) {plus_uconst(0)} [4d] member "small_pad" name (strp) decl_file (data1) decl_line (data1) type (ref4) data_member_location (data1) {plus_uconst(40)} [5a] string_type byte_size (data1) [5c] base_type "integer(kind=4)" byte_size (data1) encoding (data1) name (strp) [63] const_type type (ref4) [68] subprogram "main" external (flag_present) name (strp) decl_file (data1) decl_line (data1) type (ref4) low_pc (addr) high_pc (data8) frame_base (exprloc) {call_frame_cfa {bregx(7,8)}} GNU_all_tail_call_sites (flag_present) sibling (ref4) [89] formal_parameter "argc" name (strp) decl_file (data1) decl_line (data1) type (ref4) location (exprloc) {fbreg(-20)} [97] formal_parameter "argv" name (strp) decl_file (data1) decl_line (data1) type (ref4) location (exprloc) {fbreg(-32), deref} [a7] pointer_type byte_size (data1) type (ref4) [ad] base_type "character(kind=1)" byte_size (data1) encoding (data1) name (strp) [b4] subprogram "repro" name (strp) decl_file (data1) decl_line (data1) main_subprogram (flag_present) calling_convention (data1) low_pc (addr) high_pc (data8) frame_base (exprloc) {call_frame_cfa {bregx(7,8)}} GNU_all_tail_call_sites (flag_present) sibling (ref4) [d2] variable "c40pt" name (strp) decl_file (data1) decl_line (data1) type (ref4) location (exprloc) {fbreg(-128)} [e1] variable "span.0" name (strp) type (ref4) artificial (flag_present) location (exprloc) {fbreg(-80)} [ee] variable "i" name (string) decl_file (data1) decl_line (data1) type (ref4) location (exprloc) {fbreg(-68)} [fb] variable "unpleasant" name (strp) decl_file (data1) decl_line (data1) type (ref4) location (exprloc) {fbreg(-1008)} [10a] lexical_block low_pc (addr) high_pc (data8) sibling (ref4) [11f] lexical_block low_pc (addr) high_pc (data8) [131] lexical_block low_pc (addr) high_pc (data8) [142] lexical_block low_pc (addr) high_pc (data8) [153] lexical_block low_pc (addr) high_pc (data8) [167] array_type data_location (exprloc) {push_object_address, deref} associated (exprloc) {push_object_address, deref, lit0, ne} type (ref4) sibling (ref4) [178] subrange_type lower_bound (exprloc) {push_object_address, plus_uconst(32), deref} upper_bound (exprloc) {push_object_address, plus_uconst(40), deref} byte_stride (exprloc) {push_object_address, plus_uconst(24), deref, GNU_variable_value([e1]) {fbreg(-80)}, mul} [18f] array_type type (ref4) [194] subrange_type type (ref4) upper_bound (sdata) EOF exit 0