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

            Bug ID: 77560
           Summary: Redefinition of lower bound in explicit-shape dummy
                    argument
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tkoenig at gcc dot gnu.org
  Target Milestone: ---

The following program segfaults:

subroutine foo(a,from,to)
  integer :: from, to
  real, dimension(from:to) :: a
  from = from + 1
  print *,a
end subroutine foo

program main
  real, dimension(3) :: a
  a = reshape([(i,i=1,3)],shape(a))
  print *,a
  call foo(a,1,3)
end program main

ig25@linux-fd1f:~/Krempel/Full> gfortran full.f90
ig25@linux-fd1f:~/Krempel/Full> ./a.out
   1.00000000       2.00000000       3.00000000    

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x7f5d3ec6d087 in ???
#1  0x7f5d3ec6df35 in ???
#2  0x7f5d3e18511f in ???
#3  0x400879 in ???
#4  0x400a2a in ???
#5  0x400a61 in ???
#6  0x7f5d3e171b04 in ???
#7  0x400718 in ???
        at ../sysdeps/x86_64/start.S:122
#8  0xffffffffffffffff in ???
Speicherzugriffsfehler

Although bad style, this is legal.

5.1.2.5.1 of J3/04-007 says

If an explicit-shape array has bounds that are not initialization expressions,
the bounds, and hence shape, are determined at entry to the procedure by
evaluating the bounds expressions. The bounds of such an array are unaffected
by
the redefinition or undefinition of any variable during execution of the
procedure.

Reply via email to