PR inline-asm/84742
[official-gcc.git] / gcc / testsuite / gfortran.dg / typebound_generic_5.f03
blob5021f9ae5c6933084480310c713b57d9da64c138
1 ! { dg-do run }
3 ! Check that generic bindings targetting ELEMENTAL procedures work.
5 MODULE m
6   IMPLICIT NONE
8   TYPE :: t
9   CONTAINS
10     PROCEDURE, NOPASS :: double
11     PROCEDURE, NOPASS :: double_here
12     GENERIC :: double_it => double
13     GENERIC :: double_inplace => double_here
14   END TYPE t
16 CONTAINS
18   ELEMENTAL INTEGER FUNCTION double (val)
19     IMPLICIT NONE
20     INTEGER, INTENT(IN) :: val
21     double = 2 * val
22   END FUNCTION double
24   ELEMENTAL SUBROUTINE double_here (val)
25     IMPLICIT NONE
26     INTEGER, INTENT(INOUT) :: val
27     val = 2 * val
28   END SUBROUTINE double_here
30 END MODULE m
32 PROGRAM main
33   USE m
34   IMPLICIT NONE
36   TYPE(t) :: obj
37   INTEGER :: arr(42), arr2(42), arr3(42), arr4(42)
38   INTEGER :: i
40   arr = (/ (i, i = 1, 42) /)
42   arr2 = obj%double (arr)
43   arr3 = obj%double_it (arr)
45   arr4 = arr
46   CALL obj%double_inplace (arr4)
48   IF (ANY (arr2 /= 2 * arr) .OR. &
49       ANY (arr3 /= 2 * arr) .OR. &
50       ANY (arr4 /= 2 * arr)) THEN
51     STOP 1
52   END IF
53 END PROGRAM main