xref: /llvm-project/flang/test/Semantics/resolve97.f90 (revision 6c1ac141d3c98af9738bc77fcb55602cbff7751f)
1*6c1ac141SIvan Zhechev! RUN: %python %S/test_errors.py %s %flang_fc1
2882fa241Speter klausler
3882fa241Speter klausler! Check errors from illegal (10.1.12 para 2) forward references
4882fa241Speter klausler! in specification expressions to entities declared later in the
5882fa241Speter klausler! same specification part.
6882fa241Speter klausler
7882fa241Speter klauslermodule m1
8882fa241Speter klausler  integer :: m1j1, m1j2, m1j3, m1j4
9882fa241Speter klausler contains
10882fa241Speter klausler  subroutine s1
11882fa241Speter klausler    !ERROR: Forward reference to 'm1j1' is not allowed in the same specification part
12882fa241Speter klausler    integer(kind=kind(m1j1)) :: t_s1m1j1
13882fa241Speter klausler    integer(kind=kind(m1s1j1)) :: t_s1j1 ! implicitly typed in s1
14882fa241Speter klausler    integer :: m1j1, m1s1j1, m1s1j2, m1s1j4
15882fa241Speter klausler    block
16882fa241Speter klausler      !ERROR: Forward reference to 'm1j2' is not allowed in the same specification part
17882fa241Speter klausler      integer(kind=kind(m1j2)) :: t_s1bm1j2
18882fa241Speter klausler      !ERROR: Forward reference to 'm1s1j2' is not allowed in the same specification part
19882fa241Speter klausler      integer(kind=kind(m1s1j2)) :: t_s1bm1s1j2
20882fa241Speter klausler      !ERROR: Forward reference to 'm1s1j3' is not allowed in the same specification part
21882fa241Speter klausler      integer(kind=kind(m1s1j3)) :: t_m1s1j3 ! m1s1j3 implicitly typed in s1
22882fa241Speter klausler      integer :: m1j2, m1s1j2, m1s1j3
23882fa241Speter klausler    end block
24882fa241Speter klausler   contains
25882fa241Speter klausler    subroutine s2
26882fa241Speter klausler      !ERROR: Forward reference to 'm1j3' is not allowed in the same specification part
27882fa241Speter klausler      integer(kind=kind(m1j3)) :: t_m1j3
28882fa241Speter klausler      !ERROR: Forward reference to 'm1s1j3' is not allowed in the same specification part
29882fa241Speter klausler      integer(kind=kind(m1s1j3)) :: t_m1s1j3
30882fa241Speter klausler      integer :: m1j3, m1s1j3, m1s2j1
31882fa241Speter klausler      block
32882fa241Speter klausler        !ERROR: Forward reference to 'm1j4' is not allowed in the same specification part
33882fa241Speter klausler        integer(kind=kind(m1j4)) :: t_m1j4
34882fa241Speter klausler        !ERROR: Forward reference to 'm1s1j4' is not allowed in the same specification part
35882fa241Speter klausler        integer(kind=kind(m1s1j4)) :: t_m1s1j4
36882fa241Speter klausler        !ERROR: Forward reference to 'm1s2j1' is not allowed in the same specification part
37882fa241Speter klausler        integer(kind=kind(m1s2j1)) :: t_m1s2j1
38882fa241Speter klausler        !ERROR: Forward reference to 'm1s2j2' is not allowed in the same specification part
39882fa241Speter klausler        integer(kind=kind(m1s2j2)) :: t_m1s2j2 ! m1s2j2 implicitly typed in s2
40882fa241Speter klausler        integer :: m1j4, m1s1j4, m1s2j1, m1s2j2
41882fa241Speter klausler      end block
42882fa241Speter klausler    end subroutine
43882fa241Speter klausler  end subroutine
44882fa241Speter klauslerend module
45882fa241Speter klausler
46882fa241Speter klauslermodule m2
47882fa241Speter klausler  implicit none
48882fa241Speter klausler  integer :: m2j1, m2j2, m2j3, m2j4
49882fa241Speter klausler contains
50882fa241Speter klausler  subroutine s1
51882fa241Speter klausler    !ERROR: Forward reference to 'm2j1' is not allowed in the same specification part
52882fa241Speter klausler    integer(kind=kind(m2j1)) :: t_s1m2j1
53882fa241Speter klausler    !ERROR: No explicit type declared for 'm2s1j1'
54882fa241Speter klausler    integer(kind=kind(m2s1j1)) :: t_s1j1
55882fa241Speter klausler    integer :: m2j1, m2s1j1, m2s1j2, m2s1j4
56882fa241Speter klausler    block
57882fa241Speter klausler      !ERROR: Forward reference to 'm2j2' is not allowed in the same specification part
58882fa241Speter klausler      integer(kind=kind(m2j2)) :: t_s1bm2j2
59882fa241Speter klausler      !ERROR: Forward reference to 'm2s1j2' is not allowed in the same specification part
60882fa241Speter klausler      integer(kind=kind(m2s1j2)) :: t_s1bm2s1j2
61882fa241Speter klausler      !ERROR: No explicit type declared for 'm2s1j3'
62882fa241Speter klausler      integer(kind=kind(m2s1j3)) :: t_m2s1j3
63882fa241Speter klausler      integer :: m2j2, m2s1j2, m2s1j3
64882fa241Speter klausler    end block
65882fa241Speter klausler   contains
66882fa241Speter klausler    subroutine s2
67882fa241Speter klausler      !ERROR: Forward reference to 'm2j3' is not allowed in the same specification part
68882fa241Speter klausler      integer(kind=kind(m2j3)) :: t_m2j3
69882fa241Speter klausler      !ERROR: No explicit type declared for 'm2s1j3'
70882fa241Speter klausler      integer(kind=kind(m2s1j3)) :: t_m2s1j3
71882fa241Speter klausler      integer :: m2j3, m2s1j3, m2s2j1
72882fa241Speter klausler      block
73882fa241Speter klausler        !ERROR: Forward reference to 'm2j4' is not allowed in the same specification part
74882fa241Speter klausler        integer(kind=kind(m2j4)) :: t_m2j4
75882fa241Speter klausler        !ERROR: Forward reference to 'm2s1j4' is not allowed in the same specification part
76882fa241Speter klausler        integer(kind=kind(m2s1j4)) :: t_m2s1j4
77882fa241Speter klausler        !ERROR: Forward reference to 'm2s2j1' is not allowed in the same specification part
78882fa241Speter klausler        integer(kind=kind(m2s2j1)) :: t_m2s2j1
79882fa241Speter klausler        !ERROR: No explicit type declared for 'm2s2j2'
80882fa241Speter klausler        integer(kind=kind(m2s2j2)) :: t_m2s2j2
81882fa241Speter klausler        integer :: m2j4, m2s1j4, m2s2j1, m2s2j2
82882fa241Speter klausler      end block
83882fa241Speter klausler    end subroutine
84882fa241Speter klausler  end subroutine
85882fa241Speter klauslerend module
86882fa241Speter klausler
87882fa241Speter klausler! Case that elicited bad errors
88882fa241Speter klauslerSUBROUTINE KEEL
89882fa241Speter klausler  INTEGER NODES
90882fa241Speter klausler CONTAINS
91882fa241Speter klausler  SUBROUTINE SGEOM
92882fa241Speter klausler    REAL :: RADIUS(nodes)
93882fa241Speter klausler  END SUBROUTINE
94882fa241Speter klauslerEND SUBROUTINE KEEL
95