xref: /llvm-project/flang/test/Lower/basic-function.f90 (revision 12ba74e181bd6641b532e271f3bfabf53066b1c0)
1! RUN: bbc %s -o "-" -emit-fir -hlfir=false | FileCheck %s
2
3integer(1) function fct1()
4end
5! CHECK-LABEL: func @_QPfct1() -> i8
6! CHECK:         return %{{.*}} : i8
7
8integer(2) function fct2()
9end
10! CHECK-LABEL: func @_QPfct2() -> i16
11! CHECK:         return %{{.*}} : i16
12
13integer(4) function fct3()
14end
15! CHECK-LABEL: func @_QPfct3() -> i32
16! CHECK:         return %{{.*}} : i32
17
18integer(8) function fct4()
19end
20! CHECK-LABEL: func @_QPfct4() -> i64
21! CHECK:         return %{{.*}} : i64
22
23integer(16) function fct5()
24end
25! CHECK-LABEL: func @_QPfct5() -> i128
26! CHECK:         return %{{.*}} : i128
27
28function fct()
29  integer :: fct
30end
31! CHECK-LABEL: func @_QPfct() -> i32
32! CHECK:         return %{{.*}} : i32
33
34function fct_res() result(res)
35  integer :: res
36end
37! CHECK-LABEL: func @_QPfct_res() -> i32
38! CHECK:         return %{{.*}} : i32
39
40integer function fct_body()
41  goto 1
42  1 stop
43end
44
45! CHECK-LABEL: func @_QPfct_body() -> i32
46! CHECK:         cf.br ^bb1
47! CHECK:       ^bb1
48! CHECK:         fir.call @_FortranAStopStatement
49! CHECK:         fir.unreachable
50
51function fct_iarr1()
52  integer, dimension(10) :: fct_iarr1
53end
54
55! CHECK-LABEL: func @_QPfct_iarr1() -> !fir.array<10xi32>
56! CHECK:         return %{{.*}} : !fir.array<10xi32>
57
58function fct_iarr2()
59  integer, dimension(10, 20) :: fct_iarr2
60end
61
62! CHECK-LABEL: func @_QPfct_iarr2() -> !fir.array<10x20xi32>
63! CHECK:         return %{{.*}} : !fir.array<10x20xi32>
64
65logical(1) function lfct1()
66end
67! CHECK-LABEL: func @_QPlfct1() -> !fir.logical<1>
68! CHECK:         return %{{.*}} : !fir.logical<1>
69
70logical(2) function lfct2()
71end
72! CHECK-LABEL: func @_QPlfct2() -> !fir.logical<2>
73! CHECK:         return %{{.*}} : !fir.logical<2>
74
75logical(4) function lfct3()
76end
77! CHECK-LABEL: func @_QPlfct3() -> !fir.logical<4>
78! CHECK:         return %{{.*}} : !fir.logical<4>
79
80logical(8) function lfct4()
81end
82! CHECK-LABEL: func @_QPlfct4() -> !fir.logical<8>
83! CHECK:         return %{{.*}} : !fir.logical<8>
84
85real(2) function rfct1()
86end
87! CHECK-LABEL: func @_QPrfct1() -> f16
88! CHECK:         return %{{.*}} : f16
89
90real(3) function rfct2()
91end
92! CHECK-LABEL: func @_QPrfct2() -> bf16
93! CHECK:         return %{{.*}} : bf16
94
95real function rfct3()
96end
97! CHECK-LABEL: func @_QPrfct3() -> f32
98! CHECK:         return %{{.*}} : f32
99
100real(8) function rfct4()
101end
102! CHECK-LABEL: func @_QPrfct4() -> f64
103! CHECK:         return %{{.*}} : f64
104
105real(10) function rfct5()
106end
107! CHECK-LABEL: func @_QPrfct5() -> f80
108! CHECK:         return %{{.*}} : f80
109
110real(16) function rfct6()
111end
112! CHECK-LABEL: func @_QPrfct6() -> f128
113! CHECK:         return %{{.*}} : f128
114
115complex(2) function cplxfct1()
116end
117! CHECK-LABEL: func @_QPcplxfct1() -> complex<f16>
118! CHECK:         return %{{.*}} : complex<f16>
119
120complex(3) function cplxfct2()
121end
122! CHECK-LABEL: func @_QPcplxfct2() -> complex<bf16>
123! CHECK:         return %{{.*}} : complex<bf16>
124
125complex(4) function cplxfct3()
126end
127! CHECK-LABEL: func @_QPcplxfct3() -> complex<f32>
128! CHECK:         return %{{.*}} : complex<f32>
129
130complex(8) function cplxfct4()
131end
132! CHECK-LABEL: func @_QPcplxfct4() -> complex<f64>
133! CHECK:         return %{{.*}} : complex<f64>
134
135complex(10) function cplxfct5()
136end
137! CHECK-LABEL: func @_QPcplxfct5() -> complex<f80>
138! CHECK:         return %{{.*}} : complex<f80>
139
140complex(16) function cplxfct6()
141end
142! CHECK-LABEL: func @_QPcplxfct6() -> complex<f128>
143! CHECK:         return %{{.*}} : complex<f128>
144
145function fct_with_character_return(i)
146  character(10) :: fct_with_character_return
147  integer :: i
148end
149! CHECK-LABEL: func @_QPfct_with_character_return(
150! CHECK-SAME: %{{.*}}: !fir.ref<!fir.char<1,10>>{{.*}}, %{{.*}}: index{{.*}}, %{{.*}}: !fir.ref<i32>{{.*}}) -> !fir.boxchar<1> {
151