3 ! Type-bound procedures
4 ! Compiling and errors with GENERIC binding declarations.
5 ! Bindings with NOPASS.
12 PROCEDURE, NOPASS :: p1 => intf1
13 PROCEDURE, NOPASS :: p1a => intf1a
14 PROCEDURE, NOPASS :: p2 => intf2
15 PROCEDURE, NOPASS :: p3 => intf3
16 PROCEDURE, NOPASS :: subr
18 GENERIC :: gen1 => p1a ! { dg-error "are ambiguous" }
20 GENERIC, PUBLIC :: gen1 => p1, p2
21 GENERIC :: gen1 => p3 ! Implicitly PUBLIC.
22 GENERIC, PRIVATE :: gen2 => p1
24 GENERIC :: gen2 => p2 ! { dg-error "same access" }
25 GENERIC :: gen1 => p1 ! { dg-error "already defined as specific binding" }
26 GENERIC, PASS :: gen3 => p1 ! { dg-error "Expected access-specifier" }
27 GENERIC :: p1 => p1 ! { dg-error "already a non-generic procedure" }
28 PROCEDURE, NOPASS :: gen1 => intf1 ! { dg-error "already a procedure" }
29 GENERIC :: gen3 => ! { dg-error "specific binding" }
30 GENERIC :: gen4 => p1 x ! { dg-error "Junk after" }
31 GENERIC :: gen5 => p_notthere ! { dg-error "Undefined specific binding" }
33 GENERIC :: gen7 => gen6 ! { dg-error "must target a specific binding" }
35 GENERIC :: gensubr => p2 ! { dg-error "mixed FUNCTION/SUBROUTINE" }
36 GENERIC :: gensubr => subr
42 PROCEDURE, NOPASS :: p1 => intf1
43 PROCEDURE, NOPASS :: p1a => intf1a
44 PROCEDURE, NOPASS :: p2 => intf2
45 PROCEDURE, NOPASS :: p3 => intf3
46 PROCEDURE, NOPASS :: sub1 => subr
48 GENERIC :: gen1 => p1, p2
51 GENERIC :: gensub => sub1
54 TYPE, EXTENDS(supert) :: t
56 GENERIC :: gen2 => p1a ! { dg-error "are ambiguous" }
58 GENERIC :: p1 => p2 ! { dg-error "can't overwrite specific" }
59 GENERIC :: gensub => p2 ! { dg-error "mixed FUNCTION/SUBROUTINE" }
61 PROCEDURE, NOPASS :: gen1 => intf1 ! { dg-error "Can't overwrite GENERIC" }
66 INTEGER FUNCTION intf1 (a, b)
72 INTEGER FUNCTION intf1a (a, b)
78 INTEGER FUNCTION intf2 (a, b)
84 LOGICAL FUNCTION intf3 ()
96 ! { dg-final { cleanup-modules "m" } }