https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70070

--- Comment #11 from G. Steinmetz <gs...@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

Reply via email to