xref: /llvm-project/flang/test/Semantics/implicit15.f90 (revision 90d753ab75afdaab998cad20620b8197610e6dbd)
1!RUN: %flang_fc1 -fdebug-unparse  %s  2>&1 | FileCheck %s
2!Test inheritance of implicit rules in submodules and separate module
3!procedures.
4
5module m
6  implicit integer(1)(a-z)
7  interface
8    module subroutine mp(da) ! integer(2)
9      implicit integer(2)(a-z)
10    end
11  end interface
12  save :: mv ! integer(1)
13end
14
15submodule(m) sm1
16  implicit integer(8)(a-z)
17  save :: sm1v ! integer(8)
18  interface
19    module subroutine sm1p(da) ! default real
20    end
21  end interface
22end
23
24submodule(m:sm1) sm2
25  implicit integer(2)(a-c,e-z)
26  save :: sm2v ! integer(2)
27 contains
28  module subroutine sm1p(da) ! default real
29    save :: sm1pv ! inherited integer(2)
30    !CHECK: PRINT *, 1_4, 8_4, 2_4, 4_4, 2_4
31    print *, kind(mv), kind(sm1v), kind(sm2v), kind(da), kind(sm1pv)
32  end
33end
34
35submodule(m:sm2) sm3
36  implicit integer(8)(a-z)
37  save :: sm3v ! integer(8)
38 contains
39  module procedure mp
40    save :: mpv ! inherited integer(8)
41    call sm1p(1.)
42    !CHECK: PRINT *, 1_4, 8_4, 2_4, 8_4, 2_4, 8_4
43    print *, kind(mv), kind(sm1v), kind(sm2v), kind(sm3v), kind(da), kind(mpv)
44  end
45end
46
47program main
48  use m
49  call mp(1_2)
50end
51