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 ! Implicitelly 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" }
32 GENERIC :: gen6 => gen1 ! { dg-error "must target a specific binding" }
34 GENERIC :: gensubr => p2 ! { dg-error "mixed FUNCTION/SUBROUTINE" }
35 GENERIC :: gensubr => subr
41 PROCEDURE, NOPASS :: p1 => intf1
42 PROCEDURE, NOPASS :: p1a => intf1a
43 PROCEDURE, NOPASS :: p2 => intf2
44 PROCEDURE, NOPASS :: p3 => intf3
45 PROCEDURE, NOPASS :: sub1 => subr
47 GENERIC :: gen1 => p1, p2
50 GENERIC :: gensub => sub1
53 TYPE, EXTENDS(supert) :: t
55 GENERIC :: gen2 => p1a ! { dg-error "are ambiguous" }
57 GENERIC :: p1 => p2 ! { dg-error "can't overwrite specific" }
58 GENERIC :: gensub => p2 ! { dg-error "mixed FUNCTION/SUBROUTINE" }
60 PROCEDURE, NOPASS :: gen1 => intf1 ! { dg-error "Can't overwrite GENERIC" }
65 INTEGER FUNCTION intf1 (a, b)
71 INTEGER FUNCTION intf1a (a, b)
77 INTEGER FUNCTION intf2 (a, b)
83 LOGICAL FUNCTION intf3 ()
95 ! { dg-final { cleanup-modules "m" } }