Rebase.
[official-gcc.git] / gcc / testsuite / gfortran.dg / typebound_call_1.f03
blob4e7797bdf5288d6f46bf59cb8cc58fa0ce9e05cd
1 ! { dg-do run }
3 ! Type-bound procedures
4 ! Check basic calls to NOPASS type-bound procedures.
6 MODULE m
7   IMPLICIT NONE
9   TYPE add
10   CONTAINS
11     PROCEDURE, NOPASS :: func => func_add
12     PROCEDURE, NOPASS :: sub => sub_add
13     PROCEDURE, NOPASS :: echo => echo_add
14   END TYPE add
16   TYPE mul
17   CONTAINS
18     PROCEDURE, NOPASS :: func => func_mul
19     PROCEDURE, NOPASS :: sub => sub_mul
20     PROCEDURE, NOPASS :: echo => echo_mul
21   END TYPE mul
23 CONTAINS
25   INTEGER FUNCTION func_add (a, b)
26     IMPLICIT NONE
27     INTEGER :: a, b
28     func_add = a + b
29   END FUNCTION func_add
31   INTEGER FUNCTION func_mul (a, b)
32     IMPLICIT NONE
33     INTEGER :: a, b
34     func_mul = a * b
35   END FUNCTION func_mul
37   SUBROUTINE sub_add (a, b, c)
38     IMPLICIT NONE
39     INTEGER, INTENT(IN) :: a, b
40     INTEGER, INTENT(OUT) :: c
41     c = a + b
42   END SUBROUTINE sub_add
44   SUBROUTINE sub_mul (a, b, c)
45     IMPLICIT NONE
46     INTEGER, INTENT(IN) :: a, b
47     INTEGER, INTENT(OUT) :: c
48     c = a * b
49   END SUBROUTINE sub_mul
51   SUBROUTINE echo_add ()
52     IMPLICIT NONE
53     WRITE (*,*) "Hi from adder!"
54   END SUBROUTINE echo_add
56   INTEGER FUNCTION echo_mul ()
57     IMPLICIT NONE
58     echo_mul = 5
59     WRITE (*,*) "Hi from muler!"
60   END FUNCTION echo_mul
62   ! Do the testing here, in the same module as the type is.
63   SUBROUTINE test ()
64     IMPLICIT NONE
66     TYPE(add) :: adder
67     TYPE(mul) :: muler
69     INTEGER :: x
71     IF (adder%func (2, 3) /= 5 .OR. muler%func (2, 3) /= 6) THEN
72       CALL abort ()
73     END IF
75     CALL adder%sub (2, 3, x)
76     IF (x /= 5) THEN
77       CALL abort ()
78     END IF
80     CALL muler%sub (2, 3, x)
81     IF (x /= 6) THEN
82       CALL abort ()
83     END IF
85     ! Check procedures without arguments.
86     CALL adder%echo ()
87     x = muler%echo ()
88     CALL adder%echo
89   END SUBROUTINE test
91 END MODULE m
93 PROGRAM main
94   USE m, ONLY: test
95   CALL test ()
96 END PROGRAM main