| ! { dg-do compile } |
| ! This tests the fix for PR28735 in which an ICE would be triggered in resolve_ref |
| ! because the references to 'a' and 'b' in the dummy arguments of mysub have |
| ! no symtrees in module bar, being private there. |
| ! |
| ! Contributed by Andrew Sampson <adsspamtrap01@yahoo.com> |
| ! |
| !-- foo.F ----------------------------------------------- |
| module foo |
| implicit none |
| public |
| integer, allocatable :: a(:), b(:) |
| end module foo |
| |
| !-- bar.F --------------------------------------------- |
| module bar |
| use foo |
| implicit none |
| private ! This triggered the ICE |
| public :: mysub ! since a and b are not public |
| |
| contains |
| |
| subroutine mysub(n, parray1) |
| integer, intent(in) :: n |
| real, dimension(a(n):b(n)) :: parray1 |
| if ((n == 1) .and. size(parray1, 1) /= 10) STOP 1 |
| if ((n == 2) .and. size(parray1, 1) /= 42) STOP 2 |
| end subroutine mysub |
| end module bar |
| |
| !-- sub.F ------------------------------------------------------- |
| subroutine sub() |
| |
| use foo |
| use bar |
| real :: z(100) |
| allocate (a(2), b(2)) |
| a = (/1, 6/) |
| b = (/10, 47/) |
| call mysub (1, z) |
| call mysub (2, z) |
| |
| return |
| end |
| |
| !-- MAIN ------------------------------------------------------ |
| use bar |
| call sub () |
| end |