aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gfortran.dg/typebound_generic_3.f03
blob: 6f7af2eafb6d00120318ec6880a1bbea59c342a9 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
! { dg-do run }

! Type-bound procedures
! Check calls with GENERIC bindings.

MODULE m
  IMPLICIT NONE

  TYPE t
  CONTAINS
    PROCEDURE, NOPASS :: plain_int
    PROCEDURE, NOPASS :: plain_real
    PROCEDURE, PASS(me) :: passed_intint
    PROCEDURE, PASS(me) :: passed_realreal

    GENERIC :: gensub => plain_int, plain_real, passed_intint, passed_realreal
  END TYPE t

CONTAINS

  SUBROUTINE plain_int (x)
    IMPLICIT NONE
    INTEGER :: x
    WRITE (*,*) "Plain Integer"
  END SUBROUTINE plain_int

  SUBROUTINE plain_real (x)
    IMPLICIT NONE
    REAL :: x
    WRITE (*,*) "Plain Real"
  END SUBROUTINE plain_real

  SUBROUTINE passed_intint (me, x, y)
    IMPLICIT NONE
    CLASS(t) :: me
    INTEGER :: x, y
    WRITE (*,*) "Passed Integer"
  END SUBROUTINE passed_intint

  SUBROUTINE passed_realreal (x, me, y)
    IMPLICIT NONE
    REAL :: x, y
    CLASS(t) :: me
    WRITE (*,*) "Passed Real"
  END SUBROUTINE passed_realreal

END MODULE m

PROGRAM main
  USE m
  IMPLICIT NONE

  TYPE(t) :: myobj

  CALL myobj%gensub (5)
  CALL myobj%gensub (2.5)
  CALL myobj%gensub (5, 5)
  CALL myobj%gensub (2.5, 2.5)
END PROGRAM main

! { dg-output "Plain Integer(\n|\r\n|\r).*Plain Real(\n|\r\n|\r).*Passed Integer(\n|\r\n|\r).*Passed Real" }