1f35f863aSjeanPerier! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s 276fd4bf6SPeter Steinfeld 376fd4bf6SPeter Steinfeld! Test that IO item calls stackrestore in the right place 476fd4bf6SPeter Steinfeld 576fd4bf6SPeter Steinfeld! CHECK-LABEL: func.func @_QQmain() { 676fd4bf6SPeter Steinfeld character(3) string 776fd4bf6SPeter Steinfeld write(string,getstring(6)) 876fd4bf6SPeter Steinfeld! CHECK: %[[Val_0:.*]] = fir.alloca i32 {adapt.valuebyref} 976fd4bf6SPeter Steinfeld! CHECK: %[[Const_3:.*]] = arith.constant 3 : index 109fc79ae6SJean Perier! CHECK: %[[Val_1:.*]] = fir.alloca !fir.char<1,3> {bindc_name = "string", uniq_name = "_QFEstring"} 1176fd4bf6SPeter Steinfeld! CHECK: %[[Val_2:.*]] = fir.convert %[[Val_1]] : (!fir.ref<!fir.char<1,3>>) -> !fir.ref<i8> 1276fd4bf6SPeter Steinfeld! CHECK: %[[Val_3:.*]] = fir.convert %[[Const_3]] : (index) -> i64 1376fd4bf6SPeter Steinfeld! CHECK: %[[Const_6:.*]] = arith.constant 6 : i32 1476fd4bf6SPeter Steinfeld! CHECK: fir.store %[[Const_6]] to %[[Val_0]] : !fir.ref<i32> 1576fd4bf6SPeter Steinfeld! CHECK: %[[Val_4:.*]] = fir.load %[[Val_0]] : !fir.ref<i32> 1676fd4bf6SPeter Steinfeld! CHECK: %[[Val_5:.*]] = fir.convert %[[Val_4]] : (i32) -> i64 1776fd4bf6SPeter Steinfeld! CHECK: %[[Val_6:.*]] = fir.convert %[[Val_5]] : (i64) -> index 1876fd4bf6SPeter Steinfeld! CHECK: %[[Const_0:.*]] = arith.constant 0 : index 1976fd4bf6SPeter Steinfeld! CHECK: %[[Val_7:.*]] = arith.cmpi sgt, %[[Val_6]], %[[Const_0]] : index 2076fd4bf6SPeter Steinfeld! CHECK: %[[Val_8:.*]] = arith.select %[[Val_7]], %[[Val_6]], %[[Const_0]] : index 21*5aaf384bSTom Eccles! CHECK: %[[Val_9:.*]] = llvm.intr.stacksave : !llvm.ptr 2276fd4bf6SPeter Steinfeld! CHECK: %[[Val_10:.*]] = fir.alloca !fir.char<1,?>(%[[Val_8]] : index) {bindc_name = ".result"} 234cc9437aSTom Eccles! CHECK: %[[Val_11:.*]] = fir.call @_QFPgetstring(%[[Val_10]], %[[Val_8]], %[[Val_0]]) {{.*}}: (!fir.ref<!fir.char<1,?>>, index, !fir.ref<i32>) -> !fir.boxchar<1> 2476fd4bf6SPeter Steinfeld! CHECK: %[[Val_12:.*]] = fir.convert %[[Val_10]] : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8> 2576fd4bf6SPeter Steinfeld! CHECK: %[[Val_13:.*]] = fir.convert %[[Val_8]] : (index) -> i64 2676fd4bf6SPeter Steinfeld! CHECK: %[[Val_14:.*]] = fir.zero_bits !fir.box<none> 2776fd4bf6SPeter Steinfeld! CHECK: %[[Const_0_i64:.*]] = arith.constant 0 : i64 2876fd4bf6SPeter Steinfeld! CHECK: %[[Val_15:.*]] = fir.convert %[[Const_0_i64]] : (i64) -> !fir.ref<!fir.llvm_ptr<i8>> 2976fd4bf6SPeter Steinfeld! CHECK: %[[Const_0_i64_0:.*]] = arith.constant 0 : i64 30fd389f46SFabian Mora! CHECK: %[[Val_16:.*]] = fir.address_of(@_QQclX{{.*}}) : !fir.ref<!fir.char<1,{{.*}}>> 3176fd4bf6SPeter Steinfeld! CHECK: %[[Val_17:.*]] = fir.convert %[[Val_16]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8> 3276fd4bf6SPeter Steinfeld! CHECK: %[[Val_18:.*]] = fir.call @_FortranAioBeginInternalFormattedOutput(%[[Val_2]], %[[Val_3]], %[[Val_12]], %[[Val_13]], 3376fd4bf6SPeter Steinfeld! %[[Val_14]], %[[Val_15]], %[[Const_0_i64_0]], %17, %{{.*}}) : (!fir.ref<i8>, i64, !fir.ref<i8>, i64, !fir.box<none>, !fir.ref<!fir.llvm_ptr<i8>>, i64, !fir.ref<i8>, i32) -> !fir.ref<i8> 344cc9437aSTom Eccles! CHECK: %[[Val_19:.*]] = fir.call @_FortranAioEndIoStatement(%18) {{.*}}: (!fir.ref<i8>) -> i32 35*5aaf384bSTom Eccles! CHECK: llvm.intr.stackrestore %[[Val_9]] : !llvm.ptr 3676fd4bf6SPeter Steinfeld if (string/="hi") stop 'FAIL' 3776fd4bf6SPeter Steinfeldcontains 3876fd4bf6SPeter Steinfeld function getstring(n) result(r) 3976fd4bf6SPeter Steinfeld character(n) r 4076fd4bf6SPeter Steinfeld r = '("hi")' 4176fd4bf6SPeter Steinfeld end function 4276fd4bf6SPeter Steinfeldend 43