1! RUN: bbc %s -o "-" -emit-fir | 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
65function fct_iarr3()
66  integer, dimension(:, :), allocatable :: fct_iarr3
67end
68
69! CHECK-LABEL: func @_QPfct_iarr3() -> !fir.box<!fir.heap<!fir.array<?x?xi32>>>
70! CHECK:        return %{{.*}} : !fir.box<!fir.heap<!fir.array<?x?xi32>>>
71
72function fct_iarr4()
73  integer, dimension(:), pointer :: fct_iarr4
74end
75
76! CHECK-LABEL: func @_QPfct_iarr4() -> !fir.box<!fir.ptr<!fir.array<?xi32>>>
77! CHECK:         return %{{.*}} : !fir.box<!fir.ptr<!fir.array<?xi32>>>
78
79logical(1) function lfct1()
80end
81! CHECK-LABEL: func @_QPlfct1() -> !fir.logical<1>
82! CHECK:         return %{{.*}} : !fir.logical<1>
83
84logical(2) function lfct2()
85end
86! CHECK-LABEL: func @_QPlfct2() -> !fir.logical<2>
87! CHECK:         return %{{.*}} : !fir.logical<2>
88
89logical(4) function lfct3()
90end
91! CHECK-LABEL: func @_QPlfct3() -> !fir.logical<4>
92! CHECK:         return %{{.*}} : !fir.logical<4>
93
94logical(8) function lfct4()
95end
96! CHECK-LABEL: func @_QPlfct4() -> !fir.logical<8>
97! CHECK:         return %{{.*}} : !fir.logical<8>
98
99real(2) function rfct1()
100end
101! CHECK-LABEL: func @_QPrfct1() -> f16
102! CHECK:         return %{{.*}} : f16
103
104real(3) function rfct2()
105end
106! CHECK-LABEL: func @_QPrfct2() -> bf16
107! CHECK:         return %{{.*}} : bf16
108
109real function rfct3()
110end
111! CHECK-LABEL: func @_QPrfct3() -> f32
112! CHECK:         return %{{.*}} : f32
113
114real(8) function rfct4()
115end
116! CHECK-LABEL: func @_QPrfct4() -> f64
117! CHECK:         return %{{.*}} : f64
118
119real(10) function rfct5()
120end
121! CHECK-LABEL: func @_QPrfct5() -> f80
122! CHECK:         return %{{.*}} : f80
123
124real(16) function rfct6()
125end
126! CHECK-LABEL: func @_QPrfct6() -> f128
127! CHECK:         return %{{.*}} : f128
128
129complex(2) function cplxfct1()
130end
131! CHECK-LABEL: func @_QPcplxfct1() -> !fir.complex<2>
132! CHECK:         return %{{.*}} : !fir.complex<2>
133
134complex(3) function cplxfct2()
135end
136! CHECK-LABEL: func @_QPcplxfct2() -> !fir.complex<3>
137! CHECK:         return %{{.*}} : !fir.complex<3>
138
139complex(4) function cplxfct3()
140end
141! CHECK-LABEL: func @_QPcplxfct3() -> !fir.complex<4>
142! CHECK:         return %{{.*}} : !fir.complex<4>
143
144complex(8) function cplxfct4()
145end
146! CHECK-LABEL: func @_QPcplxfct4() -> !fir.complex<8>
147! CHECK:         return %{{.*}} : !fir.complex<8>
148
149complex(10) function cplxfct5()
150end
151! CHECK-LABEL: func @_QPcplxfct5() -> !fir.complex<10>
152! CHECK:         return %{{.*}} : !fir.complex<10>
153
154complex(16) function cplxfct6()
155end
156! CHECK-LABEL: func @_QPcplxfct6() -> !fir.complex<16>
157! CHECK:         return %{{.*}} : !fir.complex<16>
158