| ! Program to test functions returning arrays |
| |
| program testfnarray |
| implicit none |
| integer, dimension (6, 5) :: a |
| integer n |
| |
| ! These first two shouldn't require a temporary. |
| a = 0 |
| a = test(6, 5) |
| if (a(1,1) .ne. 42) call abort |
| if (a(6,5) .ne. 43) call abort |
| |
| a = 0 |
| a(1:6:2, 2:5) = test2() |
| if (a(1,2) .ne. 42) call abort |
| if (a(5,5) .ne. 43) call abort |
| |
| a = 1 |
| ! This requires a temporary |
| a = test(6, 5) - a |
| if (a(1,1) .ne. 41) call abort |
| if (a(6,5) .ne. 42) call abort |
| |
| contains |
| |
| function test (x, y) |
| implicit none |
| integer x, y |
| integer, dimension (1:x, 1:y) :: test |
| |
| test(1, 1) = 42 |
| test(x, y) = 43 |
| end function |
| |
| function test2 () result (foo) |
| implicit none |
| integer, dimension (3, 4) :: foo |
| |
| foo(1, 1) = 42 |
| foo(3, 4) = 43 |
| end function |
| |
| end program |
| |