| ! { dg-do run } |
| ! PR 25806: Functions returning pointers to arrays |
| program a |
| integer, target :: storage(5) |
| integer :: s(3) |
| |
| |
| print *, x(3) ! { dg-output " *1 *2 *3" } |
| |
| if (ssum(x(3)) /= 6) call abort() |
| |
| s = 0 |
| s = x(3) |
| if (any(s /= (/1, 2, 3/))) call abort() |
| |
| contains |
| |
| function x(n) result(t) |
| integer, intent(in) :: n |
| integer, pointer :: t(:) |
| integer :: i |
| |
| t => storage(1:n) |
| t = (/ (i, i = 1, n) /) |
| |
| end function x |
| |
| |
| integer function ssum(a) |
| integer, intent(in) :: a(:) |
| |
| ssum = sum(a) |
| |
| end function ssum |
| |
| end program a |
| |
| |