xref: /llvm-project/flang/test/Semantics/modfile71.F90 (revision 038b42ba5b47b1aa2d47ef5706a713f6bfbbc37c)
1*038b42baSPeter Klausler!RUN: %flang_fc1 -fsyntax-only -fhermetic-module-files -DSTEP=1 %s
2*038b42baSPeter Klausler!RUN: %flang_fc1 -fsyntax-only -DSTEP=2 %s
3*038b42baSPeter Klausler!RUN: not %flang_fc1 -fsyntax-only -pedantic %s 2>&1 | FileCheck %s
4*038b42baSPeter Klausler
5*038b42baSPeter Klausler! Tests that a module captured in a hermetic module file is compatible when
6*038b42baSPeter Klausler! USE'd with a module of the same name USE'd directly.
7*038b42baSPeter Klausler
8*038b42baSPeter Klausler#if STEP == 1
9*038b42baSPeter Klauslermodule modfile71a
10*038b42baSPeter Klausler  ! not errors
11*038b42baSPeter Klausler  integer, parameter :: good_named_const = 123
12*038b42baSPeter Klausler  integer :: good_var = 1
13*038b42baSPeter Klausler  type :: good_derived
14*038b42baSPeter Klausler    integer component
15*038b42baSPeter Klausler  end type
16*038b42baSPeter Klausler  procedure(), pointer :: good_proc_ptr
17*038b42baSPeter Klausler  generic :: gen => bad_subroutine
18*038b42baSPeter Klausler  ! bad, but okay if unused
19*038b42baSPeter Klausler  integer, parameter :: unused_bad_named_const = 123
20*038b42baSPeter Klausler  integer :: unused_bad_var = 1
21*038b42baSPeter Klausler  type :: unused_bad_derived
22*038b42baSPeter Klausler    integer component
23*038b42baSPeter Klausler  end type
24*038b42baSPeter Klausler  procedure(), pointer :: unused_bad_proc_ptr
25*038b42baSPeter Klausler  ! errors
26*038b42baSPeter Klausler  integer, parameter :: bad_named_const = 123
27*038b42baSPeter Klausler  integer :: bad_var = 1
28*038b42baSPeter Klausler  type :: bad_derived
29*038b42baSPeter Klausler    integer component
30*038b42baSPeter Klausler  end type
31*038b42baSPeter Klausler  procedure(), pointer :: bad_proc_ptr
32*038b42baSPeter Klausler contains
33*038b42baSPeter Klausler  subroutine good_subroutine
34*038b42baSPeter Klausler  end
35*038b42baSPeter Klausler  subroutine unused_bad_subroutine(x)
36*038b42baSPeter Klausler    integer x
37*038b42baSPeter Klausler  end
38*038b42baSPeter Klausler  subroutine bad_subroutine(x)
39*038b42baSPeter Klausler    integer x
40*038b42baSPeter Klausler  end
41*038b42baSPeter Klauslerend
42*038b42baSPeter Klausler
43*038b42baSPeter Klauslermodule modfile71b
44*038b42baSPeter Klausler  use modfile71a ! capture hermetically
45*038b42baSPeter Klauslerend
46*038b42baSPeter Klausler
47*038b42baSPeter Klausler#elif STEP == 2
48*038b42baSPeter Klauslermodule modfile71a
49*038b42baSPeter Klausler  ! not errors
50*038b42baSPeter Klausler  integer, parameter :: good_named_const = 123
51*038b42baSPeter Klausler  integer :: good_var = 1
52*038b42baSPeter Klausler  type :: good_derived
53*038b42baSPeter Klausler    integer component
54*038b42baSPeter Klausler  end type
55*038b42baSPeter Klausler  procedure(), pointer :: good_proc_ptr
56*038b42baSPeter Klausler  generic :: gen => bad_subroutine
57*038b42baSPeter Klausler  ! bad, but okay if unused
58*038b42baSPeter Klausler  integer, parameter :: unused_bad_named_const = 666
59*038b42baSPeter Klausler  real :: unused_bad_var = 1.
60*038b42baSPeter Klausler  type :: unused_bad_derived
61*038b42baSPeter Klausler    real component
62*038b42baSPeter Klausler  end type
63*038b42baSPeter Klausler  real, pointer :: unused_bad_proc_ptr
64*038b42baSPeter Klausler  ! errors
65*038b42baSPeter Klausler  integer, parameter :: bad_named_const = 666
66*038b42baSPeter Klausler  real :: bad_var = 1.
67*038b42baSPeter Klausler  type :: bad_derived
68*038b42baSPeter Klausler    real component
69*038b42baSPeter Klausler  end type
70*038b42baSPeter Klausler  real, pointer :: bad_proc_ptr
71*038b42baSPeter Klausler contains
72*038b42baSPeter Klausler  subroutine good_subroutine
73*038b42baSPeter Klausler  end
74*038b42baSPeter Klausler  subroutine unused_bad_subroutine(x)
75*038b42baSPeter Klausler    real x
76*038b42baSPeter Klausler  end
77*038b42baSPeter Klausler  subroutine bad_subroutine(x)
78*038b42baSPeter Klausler    real x
79*038b42baSPeter Klausler  end
80*038b42baSPeter Klauslerend
81*038b42baSPeter Klausler
82*038b42baSPeter Klausler#else
83*038b42baSPeter Klausler
84*038b42baSPeter Klausler!CHECK: warning: 'bad_derived' is use-associated from 'bad_derived' in two distinct instances of module 'modfile71a'
85*038b42baSPeter Klausler!CHECK: warning: 'bad_named_const' is use-associated from 'bad_named_const' in two distinct instances of module 'modfile71a'
86*038b42baSPeter Klausler!CHECK: warning: 'bad_proc_ptr' is use-associated from 'bad_proc_ptr' in two distinct instances of module 'modfile71a'
87*038b42baSPeter Klausler!CHECK: warning: 'bad_subroutine' is use-associated from 'bad_subroutine' in two distinct instances of module 'modfile71a'
88*038b42baSPeter Klausler!CHECK: warning: 'bad_var' is use-associated from 'bad_var' in two distinct instances of module 'modfile71a'
89*038b42baSPeter Klausler!CHECK: warning: 'good_derived' is use-associated from 'good_derived' in two distinct instances of module 'modfile71a'
90*038b42baSPeter Klausler!CHECK: warning: 'good_named_const' is use-associated from 'good_named_const' in two distinct instances of module 'modfile71a'
91*038b42baSPeter Klausler!CHECK: warning: 'good_proc_ptr' is use-associated from 'good_proc_ptr' in two distinct instances of module 'modfile71a'
92*038b42baSPeter Klausler!CHECK: warning: 'good_subroutine' is use-associated from 'good_subroutine' in two distinct instances of module 'modfile71a'
93*038b42baSPeter Klausler!CHECK: warning: 'good_var' is use-associated from 'good_var' in two distinct instances of module 'modfile71a'
94*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_derived' is use-associated from 'unused_bad_derived' in two distinct instances of module 'modfile71a'
95*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_named_const' is use-associated from 'unused_bad_named_const' in two distinct instances of module 'modfile71a'
96*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_proc_ptr' is use-associated from 'unused_bad_proc_ptr' in two distinct instances of module 'modfile71a'
97*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_subroutine' is use-associated from 'unused_bad_subroutine' in two distinct instances of module 'modfile71a'
98*038b42baSPeter Klausler!CHECK: warning: 'unused_bad_var' is use-associated from 'unused_bad_var' in two distinct instances of module 'modfile71a'
99*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_derived' is ambiguous
100*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_named_const' is ambiguous
101*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_var' is ambiguous
102*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_proc_ptr' is ambiguous
103*038b42baSPeter Klausler!CHECK: error: Reference to 'bad_subroutine' is ambiguous
104*038b42baSPeter Klausler!CHECK-NOT: error:
105*038b42baSPeter Klausler!CHECK-NOT: warning:
106*038b42baSPeter Klausler
107*038b42baSPeter Klauslerprogram main
108*038b42baSPeter Klausler  use modfile71a
109*038b42baSPeter Klausler  use modfile71b
110*038b42baSPeter Klausler  type(good_derived) goodx
111*038b42baSPeter Klausler  type(bad_derived) badx
112*038b42baSPeter Klausler  print *, good_named_const
113*038b42baSPeter Klausler  good_var = 1
114*038b42baSPeter Klausler  good_proc_ptr => null()
115*038b42baSPeter Klausler  call good_subroutine
116*038b42baSPeter Klausler  print *, bad_named_const
117*038b42baSPeter Klausler  print *, bad_var
118*038b42baSPeter Klausler  bad_proc_ptr => null()
119*038b42baSPeter Klausler  call bad_subroutine(1)
120*038b42baSPeter Klauslerend
121*038b42baSPeter Klausler#endif
122