95 lines · plain
1! RUN: bbc -emit-hlfir %s -o - | FileCheck %s2 3subroutine test_chdir()4 implicit none5! CHECK-LABEL: func.func @_QPtest_chdir() {6 7 call chdir("..")8! CHECK: %[[VAL_0:.*]] = fir.address_of(@_QQclX2E2E) : !fir.ref<!fir.char<1,2>>9! CHECK: %[[C_2:.*]] = arith.constant 2 : index10! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] typeparams %[[C_2]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQclX2E2E"} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)11! CHECK: %[[VAL_2:.*]] = fir.convert %[[VAL_1]]#0 : (!fir.ref<!fir.char<1,2>>) -> !fir.ref<i8>12! CHECK: %[[VAL_3:.*]] = fir.call @_FortranAChdir(%[[VAL_2]]) fastmath<contract> : (!fir.ref<i8>) -> i3213end subroutine14 15subroutine test_chdir_subroutine_status_i4()16 implicit none17 integer(4) :: stat18! CHECK-LABEL: func.func @_QPtest_chdir_subroutine_status_i4() {19 20 call chdir("..", STATUS=stat)21! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "stat", uniq_name = "_QFtest_chdir_subroutine_status_i4Estat"}22! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFtest_chdir_subroutine_status_i4Estat"} : (!fir.ref<i32>) ->23! (!fir.ref<i32>, !fir.ref<i32>)24! CHECK: %[[VAL_2:.*]] = fir.address_of(@_QQclX2E2E) : !fir.ref<!fir.char<1,2>>25! CHECK: %[[C_2:.*]] = arith.constant 2 : index26! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_2]] typeparams %[[C_2]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = {{.*}} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)27! CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_3]]#0 : (!fir.ref<!fir.char<1,2>>) -> !fir.ref<i8>28! CHECK: %[[VAL_5:.*]] = fir.call @_FortranAChdir(%[[VAL_4]]) fastmath<contract> : (!fir.ref<i8>) -> i3229! CHECK: %[[VAL_6:.*]] = fir.convert %{{.*}} : (!fir.ref<i32>) -> i6430! CHECK: %[[C_0_I64:.*]] = arith.constant 0 : i6431! CHECK: %[[VAL_7:.*]] = arith.cmpi ne, %[[VAL_6]], %[[C_0_I64]] : i6432! CHECK: fir.if %[[VAL_7]] {33! CHECK: fir.store %[[VAL_5]] to %[[VAL_1]]#0 : !fir.ref<i32>34! CHECK: }35end subroutine36 37subroutine test_chdir_function_status_i4()38 implicit none39 integer(4) :: stat40! CHECK-LABEL: func.func @_QPtest_chdir_function_status_i4() {41 42 stat = chdir("..")43! CHECK: %[[VAL_0:.*]] = fir.alloca i32 {bindc_name = "stat", uniq_name = "_QFtest_chdir_function_status_i4Estat"}44! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFtest_chdir_function_status_i4Estat"} : (!fir.ref<i32>) ->45! (!fir.ref<i32>, !fir.ref<i32>)46! CHECK: %[[VAL_2:.*]] = fir.address_of(@_QQclX2E2E) : !fir.ref<!fir.char<1,2>>47! CHECK: %[[C_2:.*]] = arith.constant 2 : index48! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_2]] typeparams %[[C_2]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = {{.*}} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)49! CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_3]]#0 : (!fir.ref<!fir.char<1,2>>) -> !fir.ref<i8>50! CHECK: %[[VAL_5:.*]] = fir.call @_FortranAChdir(%[[VAL_4]]) fastmath<contract> : (!fir.ref<i8>) -> i3251! CHECK: hlfir.assign %[[VAL_5]] to %[[VAL_1]]#0 : i32, !fir.ref<i32>52end subroutine53 54subroutine test_chdir_subroutine_status_i8()55 implicit none56 integer(8) :: stat57! CHECK-LABEL: func.func @_QPtest_chdir_subroutine_status_i8() {58 59 call chdir("..", STATUS=stat)60! CHECK: %[[VAL_0:.*]] = fir.alloca i64 {bindc_name = "stat", uniq_name = "_QFtest_chdir_subroutine_status_i8Estat"}61! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFtest_chdir_subroutine_status_i8Estat"} : (!fir.ref<i64>) ->62! (!fir.ref<i64>, !fir.ref<i64>)63! CHECK: %[[VAL_2:.*]] = fir.address_of(@_QQclX2E2E) : !fir.ref<!fir.char<1,2>>64! CHECK: %[[C_2:.*]] = arith.constant 2 : index65! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_2]] typeparams %[[C_2]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = {{.*}} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)66! CHECK: %[[VAL_4:.*]] = fir.convert %{{.*}} : (!fir.ref<!fir.char<1,2>>) -> !fir.ref<i8>67! CHECK: %[[VAL_5:.*]] = fir.call @_FortranAChdir(%[[VAL_4]]) fastmath<contract> : (!fir.ref<i8>) -> i3268! CHECK: %[[VAL_6:.*]] = fir.convert %[[VAL_1]]#0 : (!fir.ref<i64>) -> i6469! CHECK: %[[C_0_I64:.*]] = arith.constant 0 : i6470! CHECK: %[[VAL_7:.*]] = arith.cmpi ne, %[[VAL_6]], %[[C_0_I64]] : i6471! CHECK: fir.if %[[VAL_7]] {72! CHECK: %[[VAL_8:.*]] = fir.convert %[[VAL_5]] : (i32) -> i6473! CHECK: fir.store %[[VAL_8]] to %[[VAL_1]]#0 : !fir.ref<i64>74! CHECK: }75end subroutine76 77subroutine test_chdir_function_status_i8()78 implicit none79 integer(8) :: stat80! CHECK-LABEL: func.func @_QPtest_chdir_function_status_i8() {81 82 stat = chdir("..")83! CHECK: %[[VAL_0:.*]] = fir.alloca i64 {bindc_name = "stat", uniq_name = "_QFtest_chdir_function_status_i8Estat"}84! CHECK: %[[VAL_1:.*]]:2 = hlfir.declare %[[VAL_0]] {uniq_name = "_QFtest_chdir_function_status_i8Estat"} : (!fir.ref<i64>) ->85! (!fir.ref<i64>, !fir.ref<i64>)86! CHECK: %[[VAL_2:.*]] = fir.address_of(@_QQclX2E2E) : !fir.ref<!fir.char<1,2>>87! CHECK: %[[C_2:.*]] = arith.constant 2 : index88! CHECK: %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_2]] typeparams %[[C_2]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = {{.*}} : (!fir.ref<!fir.char<1,2>>, index) -> (!fir.ref<!fir.char<1,2>>, !fir.ref<!fir.char<1,2>>)89! CHECK: %[[VAL_4:.*]] = fir.convert %[[VAL_3]]#0 : (!fir.ref<!fir.char<1,2>>) -> !fir.ref<i8>90! CHECK: %[[VAL_5:.*]] = fir.call @_FortranAChdir(%[[VAL_4]]) fastmath<contract> : (!fir.ref<i8>) -> i3291! CHECK: %[[VAL_6:.*]] = fir.convert %[[VAL_5]] : (i32) -> i6492! CHECK: hlfir.assign %[[VAL_6]] to %[[VAL_1]]#0 : i64, !fir.ref<i64>93end subroutine94 95