| ! { dg-do compile } |
| ! Tests the fix for PR36366 a regression in which the order of USE statements |
| ! in 'test2' would cause the result of 'test1' not to have a reference to |
| ! the derived type 'inner'. |
| ! |
| ! Contributed by Jakub Jelinek <jakub@gcc.gnu.org> |
| ! |
| MODULE types |
| IMPLICIT NONE |
| TYPE :: inner |
| INTEGER, POINTER :: i(:) |
| END TYPE inner |
| |
| TYPE :: outer |
| TYPE(inner), POINTER :: inr(:) |
| END TYPE outer |
| END MODULE types |
| |
| MODULE mymod |
| IMPLICIT NONE |
| CONTAINS |
| FUNCTION test1() |
| USE types |
| IMPLICIT NONE |
| TYPE(outer), POINTER :: test1 |
| NULLIFY(test1) |
| END FUNCTION test1 |
| END MODULE mymod |
| |
| MODULE test |
| IMPLICIT NONE |
| CONTAINS |
| |
| SUBROUTINE test2(a) |
| USE mymod |
| USE types |
| IMPLICIT NONE |
| TYPE(outer), INTENT(INOUT) :: a |
| INTEGER :: i |
| i = a%inr(1)%i(1) |
| END SUBROUTINE test2 |
| |
| SUBROUTINE test3(a) |
| USE types |
| IMPLICIT NONE |
| TYPE(outer), INTENT(IN) :: a |
| END SUBROUTINE test3 |
| END MODULE test |