! { dg-do run } ! ! PR 40176: Fortran 2003: Procedure pointers with array return value ! ! Original test case by Barron Bichon ! Modified by Janus Weil 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) call abort() if (abs(tres(2)-12.)>1E-3) call abort() tres = ppt%f(2,[3.,5.]) if (abs(tres(1)-9.)>1E-3) call abort() if (abs(tres(2)-15.)>1E-3) call abort() 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