text: ! { dg-do run }
  ! PR 49479 - this used not to print anything.
  ! Test case by Joost VandeVondele.
  MODULE M1
    IMPLICIT NONE
    type foo
       character(len=5) :: x
    end type foo
  CONTAINS
    SUBROUTINE S1(data)
      INTEGER, DIMENSION(:), INTENT(IN), &
           OPTIONAL                               :: DATA
      character(20) :: line
      IF (.not. PRESENT(data)) call abort
      write (unit=line,fmt='(I5)') size(data)
      if (line /= '    0               ') call abort
    END SUBROUTINE S1
  
    subroutine s_type(data)
      type(foo), dimension(:), intent(in), optional :: data
      character(20) :: line
      IF (.not. PRESENT(data)) call abort
      write (unit=line,fmt='(I5)') size(data)
      if (line /= '    0               ') call abort
    end subroutine s_type
  
    SUBROUTINE S2(N)
      INTEGER :: N
      INTEGER, ALLOCATABLE, DIMENSION(:, :)    :: blki
      type(foo), allocatable, dimension(:, :)  :: bar
      ALLOCATE(blki(3,N))
      allocate (bar(3,n))
      blki=0
      CALL S1(RESHAPE(blki,(/3*N/)))
      call s_type(reshape(bar, (/3*N/)))
    END SUBROUTINE S2
  
  END MODULE M1
  
  USE M1
  CALL S2(0)
  END
  