xref: /llvm-project/flang/test/Semantics/argshape01.f90 (revision e86591b37d4eb92ffca21b43b224d155ec688337)
1*e86591b3SPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
2ae426a05SPeter Klausler! Detect incompatible argument shapes
3ae426a05SPeter Klauslermodule m
4*e86591b3SPeter Klausler  integer :: ha = 1
5ae426a05SPeter Klausler contains
6ae426a05SPeter Klausler  subroutine s1(a)
7ae426a05SPeter Klausler    real, intent(in) :: a(2,3)
8ae426a05SPeter Klausler  end
9ae426a05SPeter Klausler  subroutine s2(a)
10ae426a05SPeter Klausler    real, intent(in) :: a(3,2)
11ae426a05SPeter Klausler  end
12f7e43041SPeter Klausler  subroutine s3(a)
13f7e43041SPeter Klausler    real, intent(in) :: a(3,*)
14f7e43041SPeter Klausler  end
15f7e43041SPeter Klausler  subroutine s4(a)
16f7e43041SPeter Klausler    real, intent(in) :: a(:,:)
17f7e43041SPeter Klausler  end
18f7e43041SPeter Klausler  subroutine s5(a)
19f7e43041SPeter Klausler    real, intent(in) :: a(..)
20f7e43041SPeter Klausler  end
21*e86591b3SPeter Klausler  subroutine s6(a,n,m)
22*e86591b3SPeter Klausler    integer, intent(in) :: n, m
23*e86591b3SPeter Klausler    real, intent(in) :: a(n, m)
24*e86591b3SPeter Klausler  end
25*e86591b3SPeter Klausler  subroutine s6b(a,nn,mm)
26*e86591b3SPeter Klausler    integer, intent(in) :: nn, mm
27*e86591b3SPeter Klausler    real, intent(in) :: a(nn, mm)
28*e86591b3SPeter Klausler  end
29*e86591b3SPeter Klausler  subroutine s7(a,n,m)
30*e86591b3SPeter Klausler    integer, intent(in) :: n, m
31*e86591b3SPeter Klausler    real, intent(in) :: a(m, n)
32*e86591b3SPeter Klausler  end
33*e86591b3SPeter Klausler  subroutine s8(a,n,m)
34*e86591b3SPeter Klausler    integer, intent(in) :: n, m
35*e86591b3SPeter Klausler    real, intent(in) :: a(n+1,m+1)
36*e86591b3SPeter Klausler  end
37*e86591b3SPeter Klausler  subroutine s8b(a,n,m)
38*e86591b3SPeter Klausler    integer, intent(in) :: n, m
39*e86591b3SPeter Klausler    real, intent(in) :: a(n-1,m+2)
40*e86591b3SPeter Klausler  end
41*e86591b3SPeter Klausler  subroutine s9(a)
42*e86591b3SPeter Klausler    real, intent(in) :: a(ha,ha)
43*e86591b3SPeter Klausler  end
44*e86591b3SPeter Klausler  subroutine s9b(a)
45*e86591b3SPeter Klausler    real, intent(in) :: a(ha,ha)
46*e86591b3SPeter Klausler  end
47ae426a05SPeter Klausler  subroutine s1c(s)
48ae426a05SPeter Klausler    procedure(s1) :: s
49ae426a05SPeter Klausler  end
50ae426a05SPeter Klausler  subroutine s2c(s)
51ae426a05SPeter Klausler    procedure(s2) :: s
52ae426a05SPeter Klausler  end
53f7e43041SPeter Klausler  subroutine s3c(s)
54f7e43041SPeter Klausler    procedure(s3) :: s
55f7e43041SPeter Klausler  end
56f7e43041SPeter Klausler  subroutine s4c(s)
57f7e43041SPeter Klausler    procedure(s4) :: s
58f7e43041SPeter Klausler  end
59f7e43041SPeter Klausler  subroutine s5c(s)
60f7e43041SPeter Klausler    procedure(s5) :: s
61f7e43041SPeter Klausler  end
62*e86591b3SPeter Klausler  subroutine s6c(s)
63*e86591b3SPeter Klausler    procedure(s6) :: s
64*e86591b3SPeter Klausler  end
65*e86591b3SPeter Klausler  subroutine s7c(s)
66*e86591b3SPeter Klausler    procedure(s7) :: s
67*e86591b3SPeter Klausler  end
68*e86591b3SPeter Klausler  subroutine s8c(s)
69*e86591b3SPeter Klausler    procedure(s8) :: s
70*e86591b3SPeter Klausler  end
71*e86591b3SPeter Klausler  subroutine s9c(s)
72*e86591b3SPeter Klausler    procedure(s9) :: s
73*e86591b3SPeter Klausler  end
74ae426a05SPeter Klauslerend
75ae426a05SPeter Klausler
76ae426a05SPeter Klauslerprogram main
77ae426a05SPeter Klausler  use m
78ae426a05SPeter Klausler  procedure(s1), pointer :: ps1
79ae426a05SPeter Klausler  procedure(s2), pointer :: ps2
80f7e43041SPeter Klausler  procedure(s3), pointer :: ps3
81f7e43041SPeter Klausler  procedure(s4), pointer :: ps4
82f7e43041SPeter Klausler  procedure(s5), pointer :: ps5
83*e86591b3SPeter Klausler  procedure(s6), pointer :: ps6
84*e86591b3SPeter Klausler  procedure(s7), pointer :: ps7
85*e86591b3SPeter Klausler  procedure(s8), pointer :: ps8
86*e86591b3SPeter Klausler  procedure(s9), pointer :: ps9
87ae426a05SPeter Klausler  call s1c(s1)
88ae426a05SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
89ae426a05SPeter Klausler  call s1c(s2)
90ae426a05SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
91f7e43041SPeter Klausler  call s1c(s3)
92*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
93f7e43041SPeter Klausler  call s1c(s4)
94f7e43041SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
95f7e43041SPeter Klausler  call s1c(s5)
96*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': distinct numbers of dummy arguments
97*e86591b3SPeter Klausler  call s1c(s6)
98f7e43041SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
99ae426a05SPeter Klausler  call s2c(s1)
100ae426a05SPeter Klausler  call s2c(s2)
101*e86591b3SPeter Klausler  call s6c(s6)
102*e86591b3SPeter Klausler  call s6c(s6b)
103*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
104*e86591b3SPeter Klausler  call s6c(s7)
105*e86591b3SPeter Klausler  !WARNING: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
106*e86591b3SPeter Klausler  call s6c(s8)
107*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
108*e86591b3SPeter Klausler  call s7c(s6)
109*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
110*e86591b3SPeter Klausler  call s7c(s8)
111*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
112*e86591b3SPeter Klausler  call s8c(s6)
113*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
114*e86591b3SPeter Klausler  call s8c(s7)
115*e86591b3SPeter Klausler  call s8c(s8)
116*e86591b3SPeter Klausler  !WARNING: Actual procedure argument has possible interface incompatibility with dummy argument 's=': possibly incompatible dummy argument #1: distinct dummy data object shapes
117*e86591b3SPeter Klausler  call s8c(s8b)
118*e86591b3SPeter Klausler  call s9c(s9)
119*e86591b3SPeter Klausler  call s9c(s9b)
120ae426a05SPeter Klausler  ps1 => s1
121ae426a05SPeter Klausler  !ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's2': incompatible dummy argument #1: incompatible dummy data object shapes
122ae426a05SPeter Klausler  ps1 => s2
123f7e43041SPeter Klausler  !ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's3': incompatible dummy argument #1: incompatible dummy data object shapes
124f7e43041SPeter Klausler  ps1 => s3
125*e86591b3SPeter Klausler  !ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's4': incompatible dummy argument #1: incompatible dummy data object shapes
126f7e43041SPeter Klausler  ps1 => s4
127f7e43041SPeter Klausler  !ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's5': incompatible dummy argument #1: incompatible dummy data object shapes
128f7e43041SPeter Klausler  ps1 => s5
129*e86591b3SPeter Klausler  !ERROR: Procedure pointer 'ps1' associated with incompatible procedure designator 's6': distinct numbers of dummy arguments
130*e86591b3SPeter Klausler  ps1 => s6
131ae426a05SPeter Klausler  !ERROR: Procedure pointer 'ps2' associated with incompatible procedure designator 's1': incompatible dummy argument #1: incompatible dummy data object shapes
132ae426a05SPeter Klausler  ps2 => s1
133ae426a05SPeter Klausler  ps2 => s2
134ae426a05SPeter Klausler  call s1c(ps1)
135ae426a05SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
136ae426a05SPeter Klausler  call s1c(ps2)
137ae426a05SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
138f7e43041SPeter Klausler  call s1c(ps3)
139*e86591b3SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
140f7e43041SPeter Klausler  call s1c(ps4)
141f7e43041SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
142f7e43041SPeter Klausler  call s1c(ps5)
143f7e43041SPeter Klausler  !ERROR: Actual procedure argument has interface incompatible with dummy argument 's=': incompatible dummy argument #1: incompatible dummy data object shapes
144ae426a05SPeter Klausler  call s2c(ps1)
145ae426a05SPeter Klausler  call s2c(ps2)
146*e86591b3SPeter Klausler  ps6 => s6
147*e86591b3SPeter Klausler  ps6 => s6b
148*e86591b3SPeter Klausler  !ERROR: Procedure pointer 'ps6' associated with incompatible procedure designator 's7': incompatible dummy argument #1: incompatible dummy data object shapes
149*e86591b3SPeter Klausler  ps6 => s7
150*e86591b3SPeter Klausler  !ERROR: Procedure pointer 'ps6' associated with incompatible procedure designator 's8': incompatible dummy argument #1: incompatible dummy data object shapes
151*e86591b3SPeter Klausler  ps6 => s8
152*e86591b3SPeter Klausler  !ERROR: Procedure pointer 'ps7' associated with incompatible procedure designator 's6': incompatible dummy argument #1: incompatible dummy data object shapes
153*e86591b3SPeter Klausler  ps7 => s6
154*e86591b3SPeter Klausler  !ERROR: Procedure pointer 'ps7' associated with incompatible procedure designator 's8': incompatible dummy argument #1: incompatible dummy data object shapes
155*e86591b3SPeter Klausler  ps7 => s8
156*e86591b3SPeter Klausler  ps8 => s8
157*e86591b3SPeter Klausler  !WARNING: pointer 'ps8' and s8b may not be completely compatible procedures: possibly incompatible dummy argument #1: distinct dummy data object shapes
158*e86591b3SPeter Klausler  ps8 => s8b
159*e86591b3SPeter Klausler  !ERROR: Procedure pointer 'ps8' associated with incompatible procedure designator 's6': incompatible dummy argument #1: incompatible dummy data object shapes
160*e86591b3SPeter Klausler  ps8 => s6
161*e86591b3SPeter Klausler  !WARNING: Procedure pointer 'ps8' associated with incompatible procedure designator 's7': incompatible dummy argument #1: incompatible dummy data object shapes
162*e86591b3SPeter Klausler  ps8 => s7
163ae426a05SPeter Klauslerend
164