File: modfile10.f90

package info (click to toggle)
llvm-toolchain-13 1%3A13.0.1-11
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,418,840 kB
  • sloc: cpp: 5,290,826; ansic: 996,570; asm: 544,593; python: 188,212; objc: 72,027; lisp: 30,291; f90: 25,395; sh: 24,898; javascript: 9,780; pascal: 9,398; perl: 7,484; ml: 5,432; awk: 3,523; makefile: 2,913; xml: 953; cs: 573; fortran: 539
file content (130 lines) | stat: -rw-r--r-- 2,224 bytes parent folder | download | duplicates (3)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
! RUN: %S/test_modfile.sh %s %t %flang_fc1
! REQUIRES: shell
! Test writing procedure bindings in a derived type.

module m
  interface
    subroutine a(i, j)
      integer :: i, j
    end subroutine
  end interface
  type, abstract :: t
    integer :: i
  contains
    procedure(a), deferred, nopass :: q
    procedure(b), deferred, nopass :: p, r
  end type
  type t2
    integer :: x
  contains
    private
    final :: c
    procedure, non_overridable :: d
  end type
  type, abstract :: t2a
  contains
    procedure(a), deferred, public, nopass :: e
  end type
  type t3
    sequence
    integer i
    real x
    double precision y
    double complex z
  end type
contains
  subroutine b()
  end subroutine
  subroutine c(x)
    type(t2) :: x
  end subroutine
  subroutine d(x)
    class(t2) :: x
  end subroutine
  subroutine test
    type(t2) :: x
    call x%d()
  end subroutine
end module

!Expect: m.mod
!module m
!  interface
!    subroutine a(i,j)
!      integer(4)::i
!      integer(4)::j
!    end
!  end interface
!  type,abstract::t
!    integer(4)::i
!  contains
!    procedure(a),deferred,nopass::q
!    procedure(b),deferred,nopass::p
!    procedure(b),deferred,nopass::r
!  end type
!  type::t2
!    integer(4)::x
!  contains
!    procedure,non_overridable,private::d
!    final::c
!  end type
!  type,abstract::t2a
!  contains
!    procedure(a),deferred,nopass::e
!  end type
!  type::t3
!    sequence
!    integer(4)::i
!    real(4)::x
!    real(8)::y
!    complex(8)::z
!  end type
!contains
!  subroutine b()
!  end
!  subroutine c(x)
!    type(t2)::x
!  end
!  subroutine d(x)
!    class(t2)::x
!  end
!  subroutine test()
!  end
!end

! Ensure the type is emitted before its use
module m2
  private s
  type :: t
  contains
    procedure :: foo
  end type
  abstract interface
    subroutine s(x)
      import
      type(t) :: x
    end subroutine
  end interface
contains
  subroutine foo(x)
    class(t) :: x
  end subroutine
end module
!Expect: m2.mod
!module m2
!  type::t
!  contains
!    procedure::foo
!  end type
!  private::s
!  abstract interface
!    subroutine s(x)
!      import::t
!      type(t)::x
!    end
!  end interface
!contains
!  subroutine foo(x)
!    class(t)::x
!  end
!end