gfortran.h (gfc_typebound_proc): New struct.
[gcc.git] / gcc / testsuite / gfortran.dg / typebound_proc_4.f03
1 ! { dg-do compile }
2
3 ! Type-bound procedures
4 ! Test for errors in specific bindings, during parsing (not resolution).
5
6 MODULE testmod
7 IMPLICIT NONE
8
9 TYPE t
10 REAL :: a
11 CONTAINS
12 PROCEDURE p0 ! { dg-error "no IMPLICIT|module procedure" }
13 PRIVATE ! { dg-error "must precede" }
14 PROCEDURE p1 => proc1 ! { dg-error "::" }
15 PROCEDURE :: ! { dg-error "Expected binding name" }
16 PROCEDURE ! { dg-error "Expected binding name" }
17 PROCEDURE ? ! { dg-error "Expected binding name" }
18 PROCEDURE :: p2 => ! { dg-error "Expected binding target" }
19 PROCEDURE :: p3 =>, ! { dg-error "Expected binding target" }
20 PROCEDURE p4, ! { dg-error "Junk after" }
21 PROCEDURE :: p5 => proc2, ! { dg-error "Junk after" }
22 PROCEDURE :: p0 => proc3 ! { dg-error "already a procedure" }
23 PROCEDURE, PASS p6 ! { dg-error "::" }
24 PROCEDURE, PASS NON_OVERRIDABLE ! { dg-error "Expected" }
25 PROCEDURE PASS :: ! { dg-error "Junk after" }
26 PROCEDURE, PASS (x ! { dg-error "Expected" }
27 PROCEDURE, PASS () ! { dg-error "Expected" }
28 PROCEDURE, NOPASS, PASS ! { dg-error "illegal PASS" }
29 PROCEDURE, PASS, NON_OVERRIDABLE, PASS(x) ! { dg-error "illegal PASS" }
30 PROCEDURE, PUBLIC, PRIVATE ! { dg-error "Duplicate" }
31 PROCEDURE, NON_OVERRIDABLE, NON_OVERRIDABLE ! { dg-error "Duplicate" }
32 PROCEDURE, NOPASS, NOPASS ! { dg-error "illegal NOPASS" }
33
34 ! TODO: Correct these when things get implemented.
35 PROCEDURE, DEFERRED :: x ! { dg-error "not yet implemented" }
36 PROCEDURE(abc) ! { dg-error "abstract type" }
37 END TYPE t
38
39 CONTAINS
40
41 END MODULE testmod
42
43 ! { dg-final { cleanup-modules "testmod" } }