2 ! Tests dynamic dispatch of class subroutines.
4 ! Contributed by Paul Thomas <pault@gcc.gnu.org>
9 procedure(make_real), pointer :: ptr
11 procedure, pass :: real => make_real
12 procedure, pass :: make_integer
13 procedure, pass :: prod => i_m_j
14 generic, public :: extract => real, make_integer
15 generic, public :: base_extract => real, make_integer
18 type, extends(t1) :: t2
21 procedure, pass :: real => make_real2
22 procedure, pass :: make_integer_2
23 procedure, pass :: prod => i_m_j_2
24 generic, public :: extract => real, make_integer_2
27 subroutine make_real (arg, arg2)
28 class(t1), intent(in) :: arg
31 end subroutine make_real
33 subroutine make_real2 (arg, arg2)
34 class(t2), intent(in) :: arg
37 end subroutine make_real2
39 subroutine make_integer (arg, arg2, arg3)
40 class(t1), intent(in) :: arg
43 end subroutine make_integer
45 subroutine make_integer_2 (arg, arg2, arg3)
46 class(t2), intent(in) :: arg
49 end subroutine make_integer_2
51 subroutine i_m_j (arg, arg2)
52 class(t1), intent(in) :: arg
57 subroutine i_m_j_2 (arg, arg2)
58 class(t2), intent(in) :: arg
61 end subroutine i_m_j_2
65 type, extends(t1) :: l1
68 class(t1), pointer :: a !=> NULL()
75 a => b ! declared type
77 if (r .ne. real (42)) call abort
79 if (i .ne. 42) call abort
81 if (i .ne. 84) call abort
82 call a%base_extract (2, i)
83 if (i .ne. 84) call abort
85 a => c ! extension in module
87 if (r .ne. real (99)) call abort
89 if (i .ne. 99) call abort
91 if (i .ne. 297) call abort
92 call a%base_extract (3, i)
93 if (i .ne. 126) call abort
95 a => d ! extension in main
97 if (r .ne. real (42)) call abort
99 if (i .ne. 42) call abort
100 call a%extract (4, i)
101 if (i .ne. 168) call abort
102 call a%extract (4, i)
103 if (i .ne. 168) call abort
105 ! { dg-final { cleanup-modules "m" } }