| ! { dg-do compile } |
| ! PR 92004 - checks in the absence of an explicit interface between |
| ! array elements and arrays |
| module x |
| implicit none |
| type t |
| real :: x |
| end type t |
| type tt |
| real :: x(2) |
| end type tt |
| type pointer_t |
| real, pointer :: x(:) |
| end type pointer_t |
| type alloc_t |
| real, dimension(:), allocatable :: x |
| end type alloc_t |
| contains |
| subroutine foo(a) |
| real, dimension(:) :: a |
| real, dimension(2), parameter :: b = [1.0, 2.0] |
| real, dimension(10) :: x |
| type (t), dimension(1) :: vv |
| type (pointer_t) :: pointer_v |
| real, dimension(:), pointer :: p |
| call invalid_1(a(1)) ! { dg-error "Rank mismatch" } |
| call invalid_1(a) ! { dg-error "Rank mismatch" } |
| call invalid_2(a) ! { dg-error "Element of assumed-shape or pointer" } |
| call invalid_2(a(1)) ! { dg-error "Element of assumed-shape or pointer" } |
| call invalid_3(b) ! { dg-error "Rank mismatch" } |
| call invalid_3(1.0) ! { dg-error "Rank mismatch" } |
| call invalid_4 (vv(1)%x) ! { dg-error "Rank mismatch" } |
| call invalid_4 (b) ! { dg-error "Rank mismatch" }w |
| call invalid_5 (b) ! { dg-error "Rank mismatch" } |
| call invalid_5 (vv(1)%x) ! { dg-error "Rank mismatch" } |
| call invalid_6 (x) ! { dg-error "cannot correspond to actual argument" } |
| call invalid_6 (pointer_v%x(1)) ! { dg-error "cannot correspond to actual argument" } |
| call invalid_7 (pointer_v%x(1)) ! { dg-error "Rank mismatch" } |
| call invalid_7 (x) ! { dg-error "Rank mismatch" } |
| call invalid_8 (p(1)) ! { dg-error "Rank mismatch" } |
| call invalid_8 (x) ! { dg-error "Rank mismatch" } |
| call invalid_9 (x) ! { dg-error "cannot correspond to actual argument" } |
| call invalid_9 (p(1)) ! { dg-error "cannot correspond to actual argument" } |
| end subroutine foo |
| |
| subroutine bar(a, alloc) |
| real, dimension(*) :: a |
| real, dimension(2), parameter :: b = [1.0, 2.0] |
| type (alloc_t), pointer :: alloc |
| type (tt) :: tt_var |
| ! None of the ones below should issue an error. |
| call valid_1 (a) |
| call valid_1 (a(1)) |
| call valid_2 (a(1)) |
| call valid_2 (a) |
| call valid_3 (b) |
| call valid_3 (b(1)) |
| call valid_4 (tt_var%x) |
| call valid_4 (tt_var%x(1)) |
| call valid_5 (alloc%x(1)) |
| call valid_5 (a) |
| end subroutine bar |
| end module x |