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