text: ! { dg-do run }
  !
  ! PR 40176:  Fortran 2003: Procedure pointers with array return value
  !
  ! Original test case by Barron Bichon <barron.bichon@swri.org>
  ! Modified by Janus Weil <janus@gcc.gnu.org>
  
  PROGRAM test_prog
  
   TYPE ProcPointerType
     PROCEDURE(triple), POINTER, NOPASS :: f
   END TYPE ProcPointerType
  
   TYPE (ProcPointerType) :: ppt
   PROCEDURE(triple), POINTER :: f
   REAL :: tres(2)
  
   ppt%f => triple
   f => ppt%f
   tres = f(2,[2.,4.])
   if (abs(tres(1)-6.)>1E-3) STOP 1
   if (abs(tres(2)-12.)>1E-3) STOP 2
   tres = ppt%f(2,[3.,5.])
   if (abs(tres(1)-9.)>1E-3) STOP 3
   if (abs(tres(2)-15.)>1E-3) STOP 4
  
  CONTAINS
  
   FUNCTION triple(n,x) RESULT(tre)
     INTEGER, INTENT(in) :: n
     REAL, INTENT(in) :: x(2)
     REAL :: tre(2)
     tre = 3.*x
   END FUNCTION triple
  
  END PROGRAM test_prog
  
  