1! { dg-do compile }
2
3! Type-bound procedures
4! Test for errors in specific bindings, during parsing (not resolution).
5
6MODULE 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 "Expected binding name" }
21    PROCEDURE :: p5 => proc2, ! { dg-error "Expected binding name" }
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 "Syntax error" }
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  END TYPE t
34
35CONTAINS
36
37END MODULE testmod
38