1! { dg-do compile }
2! Tests the fix for PR33945, the host association of overloaded_type_s
3! would be incorrectly blocked by the use associated overloaded_type.
4!
5! Contributed by Jonathan Hogg  <J.Hogg@rl.ac.uk>
6!
7module dtype
8   implicit none
9
10   type overloaded_type
11      double precision :: part
12   end type
13
14   interface overloaded_sub
15      module procedure overloaded_sub_d
16   end interface
17
18contains
19   subroutine overloaded_sub_d(otype)
20      type(overloaded_type), intent(in) :: otype
21
22      print *, "d type = ", otype%part
23   end subroutine
24end module
25
26module stype
27   implicit none
28
29   type overloaded_type
30      real :: part
31   end type
32
33   interface overloaded_sub
34      module procedure overloaded_sub_s
35   end interface
36
37contains
38   subroutine overloaded_sub_s(otype)
39      type(overloaded_type), intent(in) :: otype
40
41      print *, "s type = ", otype%part
42   end subroutine
43end module
44
45program test
46   use stype, overloaded_type_s => overloaded_type
47   use dtype, overloaded_type_d => overloaded_type
48   implicit none
49
50   type(overloaded_type_s) :: sval
51   type(overloaded_type_d) :: dval
52
53   sval%part = 1
54   dval%part = 2
55
56   call fred(sval, dval)
57
58contains
59   subroutine fred(sval, dval)
60      use stype
61
62      type(overloaded_type_s), intent(in) :: sval  ! This caused an error
63      type(overloaded_type_d), intent(in) :: dval
64
65      call overloaded_sub(sval)
66      call overloaded_sub(dval)
67   end subroutine
68end program
69