re PR fortran/78741 (ICE in gfc_get_symbol_decl, at fortran/trans-decl.c:1534)
[official-gcc.git] / gcc / testsuite / gfortran.dg / typebound_call_1.f03
blob20688635ff47dec9b60ed5e389057f1008b5cd48
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       STOP 1
73     END IF
75     CALL adder%sub (2, 3, x)
76     IF (x /= 5) THEN
77       STOP 2
78     END IF
80     CALL muler%sub (2, 3, x)
81     IF (x /= 6) THEN
82       STOP 3
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