| ! { dg-do run } |
| ! |
| ! TS 29113 |
| ! 6.3 Argument association |
| ! An assumed-rank dummy argument may correspond to an actual argument of |
| ! any rank. [...] If the actual argument has rank greater than zero, the |
| ! rank and extents of the dummy argument are assumed from the actual |
| ! argument, including the lack of a final extent in the case of an |
| ! assumed-size array. If the actual argument is an array and the dummy |
| ! argument is allocatable or a pointer, the bounds of the dummy argument |
| ! are assumed from the actual argument. |
| |
| program test |
| |
| integer :: a(3, 4, 5) |
| integer :: b(-3:3, 0:4, 2:5, 10:20) |
| |
| call testit (a, rank(a), shape(a), lbound(a), ubound(a)) |
| call testit (b, rank(b), shape(b), lbound(b), ubound(b)) |
| |
| contains |
| |
| subroutine testit (x, r, s, l, u) |
| integer :: x(..) |
| integer :: r |
| integer :: s(r) |
| integer :: l(r) |
| integer :: u(r) |
| |
| ! expect rank to match |
| if (rank (x) .ne. r) stop 101 |
| |
| ! expect shape to match |
| if (size (shape (x)) .ne. r) stop 102 |
| if (any (shape (x) .ne. s)) stop 103 |
| |
| ! expect lbound and ubound functions to return rank-sized arrays. |
| ! for non-pointer/non-allocatable arrays, bounds are normalized |
| ! to be 1-based. |
| if (size (lbound (x)) .ne. r) stop 104 |
| if (any (lbound (x) .ne. 1)) stop 105 |
| |
| if (size (ubound (x)) .ne. r) stop 106 |
| if (any (ubound (x) .ne. u - l + 1)) stop 107 |
| if (any (ubound (x) .ne. s)) stop 108 |
| end subroutine |
| |
| end program |