| ! { dg-do compile } |
| ! PR fortran/58331 - rank checking for CLASS dummy arguments |
| |
| module mymod |
| implicit none |
| contains |
| subroutine mysub(a, n) |
| integer, intent(in) :: n |
| class(*), intent(in) :: a(n) |
| |
| select type(a) |
| type is(integer) |
| print *,'a is integer' |
| print *, "n=", n, ' a=', a |
| class default |
| print *,'a is unsupported type' |
| stop 1 |
| end select |
| end |
| |
| ! Assumed rank |
| subroutine sub_ar (a) |
| class(*), intent(in) :: a(..) |
| print *, rank (a), size (a), ":", shape (a) |
| end |
| |
| ! Assumed shape |
| subroutine sub_as1 (a) |
| class(*), intent(in) :: a(:) |
| print *, rank (a), size (a), ":", shape (a) |
| end |
| subroutine sub_as2 (b) |
| class(*), intent(in) :: b(:,:) |
| print *, rank (b), size (b), ":", shape (b) |
| end |
| end |
| |
| program p |
| use mymod |
| implicit none |
| integer :: a(3) = [11, 12, 13] |
| integer :: b(2,2) = reshape([21, 22, 23, 24], [2,2]) |
| integer :: c = 1 |
| |
| call mysub(a,3) |
| call mysub(b,4) |
| call sub_ar(a) |
| call sub_ar(b) |
| call sub_ar(c) |
| call sub_as1(a) |
| call sub_as2(b) |
| ! |
| call mysub(c,1) ! { dg-error "rank-1 and scalar" } |
| call sub_as1(b) ! { dg-error "rank-1 and rank-2" } |
| call sub_as2(a) ! { dg-error "rank-2 and rank-1" } |
| end |