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

--- Comment #24 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Reduced test

module tst
  implicit none
contains

  subroutine bar (a, b, n, m)
    integer, dimension(:), allocatable, intent(inout) :: a
    integer, dimension(:), pointer, intent(inout) :: b
    integer, intent(out) :: n, m
    n = lbound(a,1)
    m = lbound(b,1)
  end subroutine bar

end module tst

program main
  use tst
  implicit none
  integer, dimension(:), allocatable :: x
!  integer, dimension(:), allocatable, target :: x
  integer, dimension(:), pointer :: y
  integer :: n,m


  allocate (x(0))
!  y => x
  call bar (x, y, n, m)
!  print *, m, n
  if (n .ne. 1 .or. m .ne. 1) call abort

end program main

gives

Program aborted. Backtrace:
#0  0x1020a0472
#1  0x1020a1612
#2  0x102176428
#3  0x102098ecb
Abort

The program runs without abort if

(1) I uncomment the line

!  print *, m, n

(2) I uncomment the lines

!  integer, dimension(:), allocatable, target :: x

and

!  y => x

and I comment the line

  integer, dimension(:), allocatable :: x

I wonder if the above code is valid Fortran.

Reply via email to