! { 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) STOP 1 f = foo(2) if (f%bar /= 2) STOP 2 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) STOP 3 f = bar(4) if (f%bar /= 4) STOP 4 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) STOP 5 f = foo(2) if (f%bar /= 2) STOP 6 call test_bar() b = bar() if (b%bar /= 3) STOP 7 b = bar(4) if (b%bar /= 4) STOP 8 end program main