2010-12-20 Tobias Burnus <burnus@net-b.de>
[official-gcc.git] / gcc / testsuite / gfortran.dg / typebound_operator_1.f03
blobf756a595b402288dcf7d17774e425a42ba622133
1 ! { dg-do compile }
3 ! Type-bound procedures
4 ! Check correct type-bound operator definitions.
6 MODULE m
7   IMPLICIT NONE
9   TYPE t
10     LOGICAL :: x
11   CONTAINS
12     PROCEDURE, PASS :: onearg
13     PROCEDURE, PASS :: twoarg1
14     PROCEDURE, PASS :: twoarg2
15     PROCEDURE, PASS(me) :: assign_proc
17     GENERIC :: OPERATOR(.BINARY.) => twoarg1, twoarg2
18     GENERIC :: OPERATOR(.UNARY.) => onearg
19     GENERIC :: ASSIGNMENT(=) => assign_proc
20   END TYPE t
22 CONTAINS
24   INTEGER FUNCTION onearg (me)
25     CLASS(t), INTENT(IN) :: me
26     onearg = 5
27   END FUNCTION onearg
29   INTEGER FUNCTION twoarg1 (me, a)
30     CLASS(t), INTENT(IN) :: me
31     INTEGER, INTENT(IN) :: a
32     twoarg1 = 42
33   END FUNCTION twoarg1
35   INTEGER FUNCTION twoarg2 (me, a)
36     CLASS(t), INTENT(IN) :: me
37     REAL, INTENT(IN) :: a
38     twoarg2 = 123
39   END FUNCTION twoarg2
41   SUBROUTINE assign_proc (me, b)
42     CLASS(t), INTENT(OUT) :: me
43     LOGICAL, INTENT(IN) :: b
44     me%x = .NOT. b
45   END SUBROUTINE assign_proc
47 END MODULE m
49 ! { dg-final { cleanup-modules "m" } }