aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gfortran.dg/typebound_operator_1.f03
blob: 962c2bda8cdc41764bcc916d8f7abdd9fdc80141 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
! { dg-do compile }

! Type-bound procedures
! Check correct type-bound operator definitions.

MODULE m
  IMPLICIT NONE

  TYPE t
    LOGICAL :: x
  CONTAINS
    PROCEDURE, PASS :: onearg
    PROCEDURE, PASS :: twoarg1
    PROCEDURE, PASS :: twoarg2
    PROCEDURE, PASS(me) :: assign_proc

    GENERIC :: OPERATOR(.BINARY.) => twoarg1, twoarg2
    GENERIC :: OPERATOR(.UNARY.) => onearg
    GENERIC :: ASSIGNMENT(=) => assign_proc
  END TYPE t

CONTAINS

  INTEGER FUNCTION onearg (me)
    CLASS(t), INTENT(IN) :: me
    onearg = 5
  END FUNCTION onearg

  INTEGER FUNCTION twoarg1 (me, a)
    CLASS(t), INTENT(IN) :: me
    INTEGER, INTENT(IN) :: a
    twoarg1 = 42
  END FUNCTION twoarg1

  INTEGER FUNCTION twoarg2 (me, a)
    CLASS(t), INTENT(IN) :: me
    REAL, INTENT(IN) :: a
    twoarg2 = 123
  END FUNCTION twoarg2

  SUBROUTINE assign_proc (me, b)
    CLASS(t), INTENT(OUT) :: me
    LOGICAL, INTENT(IN) :: b
    me%x = .NOT. b
  END SUBROUTINE assign_proc

END MODULE m