[Bug fortran/70070] ICE on initializing character data beyond min/max bound
gscfq@t-online.de
gcc-bugzilla@gcc.gnu.org
Fri Feb 7 09:48:00 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70070
--- Comment #11 from G. Steinmetz <gscfq@t-online.de> ---
A generator might be helpful for validations :
$ cat generator_char_data.f90
program generator_char_data
implicit none
character(*), parameter :: fmt = '(*(a,i0))'
integer :: i, j, nfile
!- variant with longer span and steps
! integer, parameter :: n = 10**7
! integer, parameter :: nstep = n/100
! integer, parameter :: m = 10**7
! integer, parameter :: mstep = m/100
integer, parameter :: n = 100
integer, parameter :: nstep = 1
integer, parameter :: m = 1000
integer, parameter :: mstep = 10
print *, 'n, nstep :', n, nstep
print *, 'm, mstep :', m, mstep
nfile = 0
do i = 1, n, nstep
do j = i+1, i+m, mstep
call test_variant (0, 1)
call test_variant (1, 1)
end do
do j = 0, -m, -mstep
call test_variant (0, 2)
call test_variant (1, 2)
end do
end do
print *, 'generated files :', nfile
contains
subroutine test_open
character(16) :: chfile
nfile = nfile + 1
write (chfile, fmt) 'z', nfile, '.f90'
open (1, file=chfile)
end
subroutine test_close
close (1)
end
subroutine test_variant (kdef, kvar)
integer, intent(in) :: kdef, kvar
call test_open
write (1, fmt) 'program p'
if ( kdef == 1 ) then
write (1, fmt) ' integer :: i'
end if
write (1, fmt) ' character(', i, ') :: c'
if ( kvar == 1 ) then
write (1, fmt) ' data (c(i:i), i=1,', j, ') /', j, '*"c"/'
else
write (1, fmt) ' data (c(i:i), i=', j, ',', i, ') /', i-j+1, '*"c"/'
end if
write (1, fmt) 'end'
call test_close
end
end
Run it :
gfortran generator_char_data.f90
./a.out
for i in z*.f*; do
timeout 2.0 gfortran -c $i
done > list 2>&1
grep 'internal compiler' list
More information about the Gcc-bugs
mailing list