xref: /llvm-project/flang/test/Semantics/call42.f90 (revision 70cbedcd6edf00fc11aa7685f41f8ec29ce84598)
1*70cbedcdSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
2*70cbedcdSPeter Klauslermodule m
3*70cbedcdSPeter Klausler  type boring
4*70cbedcdSPeter Klausler  end type
5*70cbedcdSPeter Klausler  type hasAlloc
6*70cbedcdSPeter Klausler    real, allocatable :: x
7*70cbedcdSPeter Klausler  end type
8*70cbedcdSPeter Klausler  type hasInit
9*70cbedcdSPeter Klausler    real :: x = 1.
10*70cbedcdSPeter Klausler  end type
11*70cbedcdSPeter Klausler  type hasFinal
12*70cbedcdSPeter Klausler   contains
13*70cbedcdSPeter Klausler    final final
14*70cbedcdSPeter Klausler  end type
15*70cbedcdSPeter Klausler contains
16*70cbedcdSPeter Klausler  elemental subroutine final(x)
17*70cbedcdSPeter Klausler    type(hasFinal), intent(in out) :: x
18*70cbedcdSPeter Klausler  end
19*70cbedcdSPeter Klausler
20*70cbedcdSPeter Klausler  recursive subroutine typeOutAssumedRank(a,b,c,d)
21*70cbedcdSPeter Klausler    type(boring), intent(out) :: a(..)
22*70cbedcdSPeter Klausler    type(hasAlloc), intent(out) :: b(..)
23*70cbedcdSPeter Klausler    type(hasInit), intent(out) :: c(..)
24*70cbedcdSPeter Klausler    type(hasFinal), intent(out) :: d(..)
25*70cbedcdSPeter Klausler    !PORTABILITY: Assumed-rank actual argument should not be associated with INTENT(OUT) assumed-rank dummy argument
26*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
27*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
28*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
29*70cbedcdSPeter Klausler    call typeOutAssumedRank(a, b, c, d)
30*70cbedcdSPeter Klausler    !PORTABILITY: Assumed-rank actual argument should not be associated with INTENT(OUT) assumed-rank dummy argument
31*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
32*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
33*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
34*70cbedcdSPeter Klausler    call classOutAssumedRank(a, b, c, d)
35*70cbedcdSPeter Klausler    !PORTABILITY: Assumed-rank actual argument should not be associated with INTENT(OUT) assumed-rank dummy argument
36*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
37*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
38*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
39*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a, b, c, d)
40*70cbedcdSPeter Klausler  end
41*70cbedcdSPeter Klausler  recursive subroutine typeOutAssumedRankAlloc(a,b,c,d)
42*70cbedcdSPeter Klausler    type(boring), intent(out), allocatable :: a(..)
43*70cbedcdSPeter Klausler    type(hasAlloc), intent(out), allocatable :: b(..)
44*70cbedcdSPeter Klausler    type(hasInit), intent(out), allocatable :: c(..)
45*70cbedcdSPeter Klausler    type(hasFinal), intent(out), allocatable :: d(..)
46*70cbedcdSPeter Klausler    call typeOutAssumedRank(a, b, c, d)
47*70cbedcdSPeter Klausler    call typeOutAssumedRankAlloc(a, b, c, d)
48*70cbedcdSPeter Klausler  end
49*70cbedcdSPeter Klausler  recursive subroutine classOutAssumedRank(a,b,c,d)
50*70cbedcdSPeter Klausler    class(boring), intent(out) :: a(..)
51*70cbedcdSPeter Klausler    class(hasAlloc), intent(out) :: b(..)
52*70cbedcdSPeter Klausler    class(hasInit), intent(out) :: c(..)
53*70cbedcdSPeter Klausler    class(hasFinal), intent(out) :: d(..)
54*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
55*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
56*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
57*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
58*70cbedcdSPeter Klausler    call typeOutAssumedRank(a, b, c, d)
59*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
60*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
61*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
62*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
63*70cbedcdSPeter Klausler    call classOutAssumedRank(a, b, c, d)
64*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
65*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
66*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
67*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
68*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a, b, c, d)
69*70cbedcdSPeter Klausler  end
70*70cbedcdSPeter Klausler  recursive subroutine classOutAssumedRankAlloc(a,b,c,d)
71*70cbedcdSPeter Klausler    class(boring), intent(out), allocatable :: a(..)
72*70cbedcdSPeter Klausler    class(hasAlloc), intent(out), allocatable :: b(..)
73*70cbedcdSPeter Klausler    class(hasInit), intent(out), allocatable :: c(..)
74*70cbedcdSPeter Klausler    class(hasFinal), intent(out), allocatable :: d(..)
75*70cbedcdSPeter Klausler    call classOutAssumedRank(a, b, c, d)
76*70cbedcdSPeter Klausler    call classOutAssumedRankAlloc(a, b, c, d)
77*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a, b, c, d)
78*70cbedcdSPeter Klausler  end
79*70cbedcdSPeter Klausler  recursive subroutine unlimitedOutAssumedRank(a,b,c,d)
80*70cbedcdSPeter Klausler    class(*), intent(out) :: a(..), b(..), c(..), d(..)
81*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
82*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
83*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
84*70cbedcdSPeter Klausler    !ERROR: Assumed-rank actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
85*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a, b, c, d)
86*70cbedcdSPeter Klausler  end
87*70cbedcdSPeter Klausler  recursive subroutine unlimitedOutAssumedRankAlloc(a,b,c,d)
88*70cbedcdSPeter Klausler    class(*), intent(out), allocatable :: a(..), b(..), c(..), d(..)
89*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a, b, c, d)
90*70cbedcdSPeter Klausler    call unlimitedOutAssumedRankAlloc(a, b, c, d)
91*70cbedcdSPeter Klausler  end
92*70cbedcdSPeter Klausler
93*70cbedcdSPeter Klausler  subroutine typeAssumedSize(a,b,c,d)
94*70cbedcdSPeter Klausler    type(boring) a(*)
95*70cbedcdSPeter Klausler    type(hasAlloc) b(*)
96*70cbedcdSPeter Klausler    type(hasInit) c(*)
97*70cbedcdSPeter Klausler    type(hasFinal) d(*)
98*70cbedcdSPeter Klausler    !PORTABILITY: Assumed-size actual argument should not be associated with INTENT(OUT) assumed-rank dummy argument
99*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
100*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
101*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
102*70cbedcdSPeter Klausler    call typeOutAssumedRank(a,b,c,d)
103*70cbedcdSPeter Klausler    !PORTABILITY: Assumed-size actual argument should not be associated with INTENT(OUT) assumed-rank dummy argument
104*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
105*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
106*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
107*70cbedcdSPeter Klausler    call classOutAssumedRank(a,b,c,d)
108*70cbedcdSPeter Klausler    !PORTABILITY: Assumed-size actual argument should not be associated with INTENT(OUT) assumed-rank dummy argument
109*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
110*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
111*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
112*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a,b,c,d)
113*70cbedcdSPeter Klausler  end
114*70cbedcdSPeter Klausler  subroutine classAssumedSize(a,b,c,d)
115*70cbedcdSPeter Klausler    class(boring) a(*)
116*70cbedcdSPeter Klausler    class(hasAlloc) b(*)
117*70cbedcdSPeter Klausler    class(hasInit) c(*)
118*70cbedcdSPeter Klausler    class(hasFinal) d(*)
119*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
120*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
121*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
122*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
123*70cbedcdSPeter Klausler    call classOutAssumedRank(a,b,c,d)
124*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
125*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
126*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
127*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
128*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a,b,c,d)
129*70cbedcdSPeter Klausler  end
130*70cbedcdSPeter Klausler  subroutine unlimitedAssumedSize(a,b,c,d)
131*70cbedcdSPeter Klausler    class(*) a(*), b(*), c(*), d(*)
132*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
133*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
134*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
135*70cbedcdSPeter Klausler    !ERROR: Assumed-size actual argument may not be associated with INTENT(OUT) assumed-rank dummy argument requiring finalization, destruction, or initialization
136*70cbedcdSPeter Klausler    call unlimitedOutAssumedRank(a, b, c, d)
137*70cbedcdSPeter Klausler  end
138*70cbedcdSPeter Klauslerend
139