1d670e102SValentin Clement! Test lowering of IO read SIZE control-spec (12.6.2.15) 2*f35f863aSjeanPerier! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s 3d670e102SValentin Clement 4d670e102SValentin Clement! CHECK-LABEL: func @_QPtest_read_size( 5d670e102SValentin Clement! CHECK-SAME: %[[sizeVar:[^:]+]]: !fir.ref<i32>{{[^,]*}}, 6d670e102SValentin Clementsubroutine test_read_size(size, c1, c2, unit, stat) 7d670e102SValentin Clement integer :: unit, size, stat 8d670e102SValentin Clement character(*) :: c1, c2 9d670e102SValentin Clement ! CHECK: %[[cookie:.*]] = fir.call @_FortranAioBeginExternalFormattedInput( 10d670e102SValentin Clement ! CHECK: fir.call @_FortranAioEnableHandlers( 11d670e102SValentin Clement ! CHECK: %[[ok1:.*]] = fir.call @_FortranAioSetAdvance( 12d670e102SValentin Clement ! CHECK: fir.if %[[ok1]] { 13d670e102SValentin Clement ! CHECK: fir.if %[[ok1]] { 14d670e102SValentin Clement ! CHECK: %[[ok2:.*]] = fir.call @_FortranAioInputAscii( 15d670e102SValentin Clement ! CHECK: fir.if %[[ok2]] { 16d670e102SValentin Clement ! CHECK: fir.call @_FortranAioInputAscii( 17d670e102SValentin Clement ! CHECK: } 18d670e102SValentin Clement ! CHECK: } 19d670e102SValentin Clement ! CHECK: } 204cc9437aSTom Eccles ! CHECK: %[[sizeValue:.*]] = fir.call @_FortranAioGetSize(%[[cookie]]) {{.*}}: (!fir.ref<i8>) -> i64 21d670e102SValentin Clement ! CHECK: %[[sizeCast:.*]] = fir.convert %[[sizeValue]] : (i64) -> i32 22d670e102SValentin Clement ! CHECK: fir.store %[[sizeCast]] to %[[sizeVar]] : !fir.ref<i32> 234cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioEndIoStatement(%[[cookie]]) {{.*}}: (!fir.ref<i8>) -> i32 24d670e102SValentin Clement READ(unit, '(A)', ADVANCE='NO', SIZE=size, IOSTAT=stat) c1, c2 25d670e102SValentin Clementend subroutine 26d670e102SValentin Clement 27d670e102SValentin Clement ! CHECK: %[[unit:.*]] = fir.alloca i32 {bindc_name = "unit", uniq_name = "_QFEunit"} 28d670e102SValentin Clement integer :: unit 29d670e102SValentin Clement character(7) :: c1 30d670e102SValentin Clement character(4) :: c2 31d670e102SValentin Clement integer :: size = 0 32d670e102SValentin Clement integer :: stat = 0 334cc9437aSTom Eccles ! CHECK: %[[cookie:.*]] = fir.call @_FortranAioBeginOpenNewUnit(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> !fir.ref<i8> 344cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioSetAccess(%[[cookie]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, !fir.ref<i8>, i64) -> i1 354cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioSetAction(%[[cookie]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, !fir.ref<i8>, i64) -> i1 364cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioSetForm(%[[cookie]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, !fir.ref<i8>, i64) -> i1 374cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioSetStatus(%[[cookie]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, !fir.ref<i8>, i64) -> i1 38d670e102SValentin Clement ! CHECK: %[[kind:.*]] = arith.constant 4 : i32 394cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioGetNewUnit(%[[cookie]], %[[unit]], %[[kind]]) {{.*}}: (!fir.ref<i8>, !fir.ref<i32>, i32) -> i1 404cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioEndIoStatement(%[[cookie]]) {{.*}}: (!fir.ref<i8>) -> i32 41d670e102SValentin Clement OPEN(NEWUNIT=unit,ACCESS='SEQUENTIAL',ACTION='READWRITE',& 42d670e102SValentin Clement FORM='FORMATTED',STATUS='SCRATCH') 43d670e102SValentin Clement WRITE(unit, '(A)') "ABCDEF" 44d670e102SValentin Clement WRITE(unit, '(A)') "GHIJKL" 45d670e102SValentin Clement REWIND(unit) 46d670e102SValentin Clement call test_read_size(size, c1, c2, unit, stat) 47d670e102SValentin Clement print *, stat, size, c1 48d670e102SValentin Clement CLOSE(unit) 49d670e102SValentin Clementend 50