1ad40cc14SValentin Clement! RUN: bbc %s -o "-" -emit-fir | FileCheck %s
2ad40cc14SValentin Clement
3ad40cc14SValentin Clementinteger(1) function fct1()
4ad40cc14SValentin Clementend
5ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct1() -> i8
6ad40cc14SValentin Clement! CHECK:         return %{{.*}} : i8
7ad40cc14SValentin Clement
8ad40cc14SValentin Clementinteger(2) function fct2()
9ad40cc14SValentin Clementend
10ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct2() -> i16
11ad40cc14SValentin Clement! CHECK:         return %{{.*}} : i16
12ad40cc14SValentin Clement
13ad40cc14SValentin Clementinteger(4) function fct3()
14ad40cc14SValentin Clementend
15ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct3() -> i32
16ad40cc14SValentin Clement! CHECK:         return %{{.*}} : i32
17ad40cc14SValentin Clement
18ad40cc14SValentin Clementinteger(8) function fct4()
19ad40cc14SValentin Clementend
20ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct4() -> i64
21ad40cc14SValentin Clement! CHECK:         return %{{.*}} : i64
22ad40cc14SValentin Clement
23ad40cc14SValentin Clementinteger(16) function fct5()
24ad40cc14SValentin Clementend
25ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct5() -> i128
26ad40cc14SValentin Clement! CHECK:         return %{{.*}} : i128
27ad40cc14SValentin Clement
28ad40cc14SValentin Clementfunction fct()
29ad40cc14SValentin Clement  integer :: fct
30ad40cc14SValentin Clementend
31ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct() -> i32
32ad40cc14SValentin Clement! CHECK:         return %{{.*}} : i32
33ad40cc14SValentin Clement
34ad40cc14SValentin Clementfunction fct_res() result(res)
35ad40cc14SValentin Clement  integer :: res
36ad40cc14SValentin Clementend
37ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct_res() -> i32
38ad40cc14SValentin Clement! CHECK:         return %{{.*}} : i32
39ad40cc14SValentin Clement
40ad40cc14SValentin Clementinteger function fct_body()
41ad40cc14SValentin Clement  goto 1
42ad40cc14SValentin Clement  1 stop
43ad40cc14SValentin Clementend
44ad40cc14SValentin Clement
45ad40cc14SValentin Clement! CHECK-LABEL: func @_QPfct_body() -> i32
46ad40cc14SValentin Clement! CHECK:         cf.br ^bb1
47ad40cc14SValentin Clement! CHECK:       ^bb1
48ad40cc14SValentin Clement! CHECK:         %{{.*}} = fir.call @_FortranAStopStatement
49ad40cc14SValentin Clement! CHECK:         fir.unreachable
50ad40cc14SValentin Clement
51c807aa53SValentin Clementfunction fct_iarr1()
52c807aa53SValentin Clement  integer, dimension(10) :: fct_iarr1
53c807aa53SValentin Clementend
54c807aa53SValentin Clement
55c807aa53SValentin Clement! CHECK-LABEL: func @_QPfct_iarr1() -> !fir.array<10xi32>
56c807aa53SValentin Clement! CHECK:         return %{{.*}} : !fir.array<10xi32>
57c807aa53SValentin Clement
58c807aa53SValentin Clementfunction fct_iarr2()
59c807aa53SValentin Clement  integer, dimension(10, 20) :: fct_iarr2
60c807aa53SValentin Clementend
61c807aa53SValentin Clement
62c807aa53SValentin Clement! CHECK-LABEL: func @_QPfct_iarr2() -> !fir.array<10x20xi32>
63c807aa53SValentin Clement! CHECK:         return %{{.*}} : !fir.array<10x20xi32>
64c807aa53SValentin Clement
65ad40cc14SValentin Clementlogical(1) function lfct1()
66ad40cc14SValentin Clementend
67ad40cc14SValentin Clement! CHECK-LABEL: func @_QPlfct1() -> !fir.logical<1>
68ad40cc14SValentin Clement! CHECK:         return %{{.*}} : !fir.logical<1>
69ad40cc14SValentin Clement
70ad40cc14SValentin Clementlogical(2) function lfct2()
71ad40cc14SValentin Clementend
72ad40cc14SValentin Clement! CHECK-LABEL: func @_QPlfct2() -> !fir.logical<2>
73ad40cc14SValentin Clement! CHECK:         return %{{.*}} : !fir.logical<2>
74ad40cc14SValentin Clement
75ad40cc14SValentin Clementlogical(4) function lfct3()
76ad40cc14SValentin Clementend
77ad40cc14SValentin Clement! CHECK-LABEL: func @_QPlfct3() -> !fir.logical<4>
78ad40cc14SValentin Clement! CHECK:         return %{{.*}} : !fir.logical<4>
79ad40cc14SValentin Clement
80ad40cc14SValentin Clementlogical(8) function lfct4()
81ad40cc14SValentin Clementend
82ad40cc14SValentin Clement! CHECK-LABEL: func @_QPlfct4() -> !fir.logical<8>
83ad40cc14SValentin Clement! CHECK:         return %{{.*}} : !fir.logical<8>
840a0b3029SValentin Clement
850a0b3029SValentin Clementreal(2) function rfct1()
860a0b3029SValentin Clementend
870a0b3029SValentin Clement! CHECK-LABEL: func @_QPrfct1() -> f16
880a0b3029SValentin Clement! CHECK:         return %{{.*}} : f16
890a0b3029SValentin Clement
900a0b3029SValentin Clementreal(3) function rfct2()
910a0b3029SValentin Clementend
920a0b3029SValentin Clement! CHECK-LABEL: func @_QPrfct2() -> bf16
930a0b3029SValentin Clement! CHECK:         return %{{.*}} : bf16
940a0b3029SValentin Clement
950a0b3029SValentin Clementreal function rfct3()
960a0b3029SValentin Clementend
970a0b3029SValentin Clement! CHECK-LABEL: func @_QPrfct3() -> f32
980a0b3029SValentin Clement! CHECK:         return %{{.*}} : f32
990a0b3029SValentin Clement
1000a0b3029SValentin Clementreal(8) function rfct4()
1010a0b3029SValentin Clementend
1020a0b3029SValentin Clement! CHECK-LABEL: func @_QPrfct4() -> f64
1030a0b3029SValentin Clement! CHECK:         return %{{.*}} : f64
1040a0b3029SValentin Clement
1050a0b3029SValentin Clementreal(10) function rfct5()
1060a0b3029SValentin Clementend
1070a0b3029SValentin Clement! CHECK-LABEL: func @_QPrfct5() -> f80
1080a0b3029SValentin Clement! CHECK:         return %{{.*}} : f80
1090a0b3029SValentin Clement
1100a0b3029SValentin Clementreal(16) function rfct6()
1110a0b3029SValentin Clementend
1120a0b3029SValentin Clement! CHECK-LABEL: func @_QPrfct6() -> f128
1130a0b3029SValentin Clement! CHECK:         return %{{.*}} : f128
1140a0b3029SValentin Clement
1151ceb1d9bSValentin Clementcomplex(2) function cplxfct1()
1161ceb1d9bSValentin Clementend
1171ceb1d9bSValentin Clement! CHECK-LABEL: func @_QPcplxfct1() -> !fir.complex<2>
1181ceb1d9bSValentin Clement! CHECK:         return %{{.*}} : !fir.complex<2>
1191ceb1d9bSValentin Clement
1201ceb1d9bSValentin Clementcomplex(3) function cplxfct2()
1211ceb1d9bSValentin Clementend
1221ceb1d9bSValentin Clement! CHECK-LABEL: func @_QPcplxfct2() -> !fir.complex<3>
1231ceb1d9bSValentin Clement! CHECK:         return %{{.*}} : !fir.complex<3>
1241ceb1d9bSValentin Clement
1251ceb1d9bSValentin Clementcomplex(4) function cplxfct3()
1261ceb1d9bSValentin Clementend
1271ceb1d9bSValentin Clement! CHECK-LABEL: func @_QPcplxfct3() -> !fir.complex<4>
1281ceb1d9bSValentin Clement! CHECK:         return %{{.*}} : !fir.complex<4>
1291ceb1d9bSValentin Clement
1301ceb1d9bSValentin Clementcomplex(8) function cplxfct4()
1311ceb1d9bSValentin Clementend
1321ceb1d9bSValentin Clement! CHECK-LABEL: func @_QPcplxfct4() -> !fir.complex<8>
1331ceb1d9bSValentin Clement! CHECK:         return %{{.*}} : !fir.complex<8>
1341ceb1d9bSValentin Clement
1351ceb1d9bSValentin Clementcomplex(10) function cplxfct5()
1361ceb1d9bSValentin Clementend
1371ceb1d9bSValentin Clement! CHECK-LABEL: func @_QPcplxfct5() -> !fir.complex<10>
1381ceb1d9bSValentin Clement! CHECK:         return %{{.*}} : !fir.complex<10>
1391ceb1d9bSValentin Clement
1401ceb1d9bSValentin Clementcomplex(16) function cplxfct6()
1411ceb1d9bSValentin Clementend
1421ceb1d9bSValentin Clement! CHECK-LABEL: func @_QPcplxfct6() -> !fir.complex<16>
1431ceb1d9bSValentin Clement! CHECK:         return %{{.*}} : !fir.complex<16>
144*37e84d9bSValentin Clement
145*37e84d9bSValentin Clementfunction fct_with_character_return(i)
146*37e84d9bSValentin Clement  character(10) :: fct_with_character_return
147*37e84d9bSValentin Clement  integer :: i
148*37e84d9bSValentin Clementend
149*37e84d9bSValentin Clement! CHECK-LABEL: func @_QPfct_with_character_return(
150*37e84d9bSValentin Clement! CHECK-SAME: %{{.*}}: !fir.ref<!fir.char<1,10>>{{.*}}, %{{.*}}: index{{.*}}, %{{.*}}: !fir.ref<i32>{{.*}}) -> !fir.boxchar<1> {
151