| ! { dg-do run } |
| ! |
| ! PR fortran/39427 |
| ! |
| module foo_module |
| interface foo |
| procedure constructor |
| end interface |
| |
| type foo |
| integer :: bar |
| end type |
| contains |
| type(foo) function constructor() |
| constructor%bar = 1 |
| end function |
| |
| subroutine test_foo() |
| type(foo) :: f |
| f = foo() |
| if (f%bar /= 1) call abort () |
| f = foo(2) |
| if (f%bar /= 2) call abort () |
| end subroutine test_foo |
| end module foo_module |
| |
| |
| ! Same as foo_module but order |
| ! of INTERFACE and TYPE reversed |
| module bar_module |
| type bar |
| integer :: bar |
| end type |
| |
| interface bar |
| procedure constructor |
| end interface |
| contains |
| type(bar) function constructor() |
| constructor%bar = 3 |
| end function |
| |
| subroutine test_bar() |
| type(bar) :: f |
| f = bar() |
| if (f%bar /= 3) call abort () |
| f = bar(4) |
| if (f%bar /= 4) call abort () |
| end subroutine test_bar |
| end module bar_module |
| |
| program main |
| use foo_module |
| use bar_module |
| implicit none |
| |
| type(foo) :: f |
| type(bar) :: b |
| |
| call test_foo() |
| f = foo() |
| if (f%bar /= 1) call abort () |
| f = foo(2) |
| if (f%bar /= 2) call abort () |
| |
| call test_bar() |
| b = bar() |
| if (b%bar /= 3) call abort () |
| b = bar(4) |
| if (b%bar /= 4) call abort () |
| end program main |
| |
| ! { dg-final { cleanup-tree-dump "foo_module bar_module" } } |