3 ! FIXME: Remove -w once CLASS is fully supported.
5 ! Type-bound procedures
6 ! Checks for correct errors with invalid OPERATOR/ASSIGNMENT usage.
11 TYPE t ! { dg-error "not yet implemented" }
13 PROCEDURE, PASS :: onearg
14 PROCEDURE, PASS :: onearg_alt => onearg
15 PROCEDURE, PASS :: onearg_alt2 => onearg
16 PROCEDURE, NOPASS :: nopassed => onearg
17 PROCEDURE, PASS :: threearg
18 PROCEDURE, PASS :: sub
19 PROCEDURE, PASS :: sub2 ! { dg-error "must be a FUNCTION" }
20 PROCEDURE, PASS :: func
22 ! These give errors at the targets' definitions.
23 GENERIC :: OPERATOR(.AND.) => sub2
24 GENERIC :: OPERATOR(*) => onearg
25 GENERIC :: ASSIGNMENT(=) => func
27 GENERIC :: OPERATOR(.UOPA.) => sub ! { dg-error "must be a FUNCTION" }
28 GENERIC :: OPERATOR(.UOPB.) => threearg ! { dg-error "at most, two arguments" }
29 ! We can't check for the 'at least one argument' error, because in this case
30 ! the procedure must be NOPASS and that other error is issued. But of
31 ! course this should be alright.
33 GENERIC :: OPERATOR(.UNARY.) => onearg_alt
34 GENERIC, PRIVATE :: OPERATOR(.UNARY.) => onearg_alt2 ! { dg-error "must have the same access" }
36 GENERIC :: OPERATOR(.UNARYPRIME.) => nopassed ! { dg-error "can't be NOPASS" }
37 GENERIC :: OPERATOR(-) => nopassed ! { dg-error "can't be NOPASS" }
42 INTEGER FUNCTION onearg (me) ! { dg-error "wrong number of arguments" }
43 CLASS(t), INTENT(IN) :: me
47 INTEGER FUNCTION threearg (a, b, c)
48 CLASS(t), INTENT(IN) :: a, b, c
52 LOGICAL FUNCTION func (me, b) ! { dg-error "must be a SUBROUTINE" }
53 CLASS(t), INTENT(OUT) :: me
54 CLASS(t), INTENT(IN) :: b
60 CLASS(t), INTENT(IN) :: a
63 SUBROUTINE sub2 (a, x)
64 CLASS(t), INTENT(IN) :: a
65 INTEGER, INTENT(IN) :: x
70 ! { dg-final { cleanup-modules "m" } }