3 ! FIXME: Remove -w after polymorphic entities are supported.
6 ! Type-bound procedures
7 ! Test for errors in specific bindings, during resolution.
13 REAL FUNCTION proc_noarg ()
15 END FUNCTION proc_noarg
25 PROCEDURE() :: proc_nointf
28 SUBROUTINE proc_intf ()
29 END SUBROUTINE proc_intf
33 SUBROUTINE proc_abstract_intf ()
34 END SUBROUTINE proc_abstract_intf
39 PROCEDURE, NOPASS :: super_overrid => proc_sub_noarg
40 PROCEDURE, NOPASS, NON_OVERRIDABLE :: super_nonoverrid => proc_sub_noarg
43 TYPE, EXTENDS(supert) :: t
46 ! Bindings that should succeed
47 PROCEDURE, NOPASS :: p0 => proc_noarg
48 PROCEDURE, PASS :: p1 => proc_arg_first
49 PROCEDURE proc_arg_first
50 PROCEDURE, PASS(me) :: p2 => proc_arg_middle
51 PROCEDURE, PASS(me), NON_OVERRIDABLE :: p3 => proc_arg_last
52 PROCEDURE, NOPASS :: p4 => proc_nome
53 PROCEDURE, NOPASS :: p5 => proc_intf
54 PROCEDURE, NOPASS :: super_overrid => proc_sub_noarg
56 ! Bindings that should not succeed
57 PROCEDURE :: e0 => undefined ! { dg-error "has no IMPLICIT|module procedure" }
58 PROCEDURE, PASS :: e1 => proc_noarg ! { dg-error "at least one argument" }
59 PROCEDURE :: e2 => proc_noarg ! { dg-error "at least one argument" }
60 PROCEDURE, PASS(me) :: e3 => proc_nome ! { dg-error "no argument 'me'" }
61 PROCEDURE, PASS(me) :: e4 => proc_mewrong ! { dg-error "of the derived" }
62 PROCEDURE, PASS :: e5 => proc_mewrong ! { dg-error "of the derived" }
63 PROCEDURE :: e6 => noproc ! { dg-error "module procedure" }
64 PROCEDURE :: e7 => proc_nointf ! { dg-error "explicit interface" }
65 PROCEDURE, NOPASS :: e8 => proc_abstract_intf ! { dg-error "explicit interface" }
66 PROCEDURE :: super_nonoverrid => proc_arg_first ! { dg-error "NON_OVERRIDABLE" }
72 SUBROUTINE proc_arg_first (me, x)
76 END SUBROUTINE proc_arg_first
78 INTEGER FUNCTION proc_arg_middle (x, me, y)
82 END FUNCTION proc_arg_middle
84 SUBROUTINE proc_arg_last (x, me)
88 END SUBROUTINE proc_arg_last
90 SUBROUTINE proc_nome (arg, x, y)
94 END SUBROUTINE proc_nome
96 SUBROUTINE proc_mewrong (me, x)
100 END SUBROUTINE proc_mewrong
102 SUBROUTINE proc_sub_noarg ()
103 END SUBROUTINE proc_sub_noarg
112 PROCEDURE, NOPASS :: proc_no_module ! { dg-error "module procedure" }
117 SUBROUTINE proc_no_module ()
118 END SUBROUTINE proc_no_module
122 ! { dg-final { cleanup-modules "othermod testmod" } }