OLD | NEW |
1 ! { dg-do run } | 1 ! { dg-do run } |
2 | 2 |
3 ! FIXME: Remove -w after polymorphic entities are supported. | |
4 ! { dg-options "-w" } | |
5 | |
6 ! Type-bound procedures | 3 ! Type-bound procedures |
7 ! Check calls with passed-objects. | 4 ! Check calls with passed-objects. |
8 | 5 |
9 MODULE m | 6 MODULE m |
10 IMPLICIT NONE | 7 IMPLICIT NONE |
11 | 8 |
12 TYPE add | 9 TYPE add |
13 INTEGER :: wrong | 10 INTEGER :: wrong |
14 INTEGER :: val | 11 INTEGER :: val |
15 CONTAINS | 12 CONTAINS |
16 PROCEDURE, PASS :: func => func_add | 13 PROCEDURE, PASS :: func => func_add |
17 PROCEDURE, PASS(me) :: sub => sub_add | 14 PROCEDURE, PASS(me) :: sub => sub_add |
18 END TYPE add | 15 END TYPE add |
19 | 16 |
20 TYPE trueOrFalse | 17 TYPE trueOrFalse |
21 LOGICAL :: val | 18 LOGICAL :: val |
22 CONTAINS | 19 CONTAINS |
23 PROCEDURE, PASS :: swap | 20 PROCEDURE, PASS :: swap |
24 END TYPE trueOrFalse | 21 END TYPE trueOrFalse |
25 | 22 |
26 CONTAINS | 23 CONTAINS |
27 | 24 |
28 INTEGER FUNCTION func_add (me, x) | 25 INTEGER FUNCTION func_add (me, x) |
29 IMPLICIT NONE | 26 IMPLICIT NONE |
30 TYPE(add) :: me | 27 CLASS(add) :: me |
31 INTEGER :: x | 28 INTEGER :: x |
32 func_add = me%val + x | 29 func_add = me%val + x |
33 END FUNCTION func_add | 30 END FUNCTION func_add |
34 | 31 |
35 SUBROUTINE sub_add (res, me, x) | 32 SUBROUTINE sub_add (res, me, x) |
36 IMPLICIT NONE | 33 IMPLICIT NONE |
37 INTEGER, INTENT(OUT) :: res | 34 INTEGER, INTENT(OUT) :: res |
38 TYPE(add), INTENT(IN) :: me | 35 CLASS(add), INTENT(IN) :: me |
39 INTEGER, INTENT(IN) :: x | 36 INTEGER, INTENT(IN) :: x |
40 res = me%val + x | 37 res = me%val + x |
41 END SUBROUTINE sub_add | 38 END SUBROUTINE sub_add |
42 | 39 |
43 SUBROUTINE swap (me1, me2) | 40 SUBROUTINE swap (me1, me2) |
44 IMPLICIT NONE | 41 IMPLICIT NONE |
45 TYPE(trueOrFalse), INTENT(INOUT) :: me1, me2 | 42 CLASS(trueOrFalse), INTENT(INOUT) :: me1, me2 |
46 | 43 |
47 IF (.NOT. me1%val .OR. me2%val) THEN | 44 IF (.NOT. me1%val .OR. me2%val) THEN |
48 CALL abort () | 45 CALL abort () |
49 END IF | 46 END IF |
50 | 47 |
51 me1%val = .FALSE. | 48 me1%val = .FALSE. |
52 me2%val = .TRUE. | 49 me2%val = .TRUE. |
53 END SUBROUTINE swap | 50 END SUBROUTINE swap |
54 | 51 |
55 ! Do the testing here, in the same module as the type is. | 52 ! Do the testing here, in the same module as the type is. |
(...skipping 28 matching lines...) Expand all Loading... |
84 END SUBROUTINE test | 81 END SUBROUTINE test |
85 | 82 |
86 END MODULE m | 83 END MODULE m |
87 | 84 |
88 PROGRAM main | 85 PROGRAM main |
89 USE m, ONLY: test | 86 USE m, ONLY: test |
90 CALL test () | 87 CALL test () |
91 END PROGRAM main | 88 END PROGRAM main |
92 | 89 |
93 ! { dg-final { cleanup-modules "m" } } | 90 ! { dg-final { cleanup-modules "m" } } |
OLD | NEW |