! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s ! UNSUPPORTED: system-windows character*10 :: exx character*30 :: m integer*2 :: s exx = 'AA' m = 'CCCCCC' s = -13 ! CHECK: call {{.*}}BeginExternalFormattedInput ! CHECK: call {{.*}}EnableHandlers ! CHECK: call {{.*}}SetAdvance ! CHECK: call {{.*}}InputReal ! CHECK: call {{.*}}GetIoMsg ! CHECK: call {{.*}}EndIoStatement ! CHECK: fir.select %{{.*}} : index [-2, ^bb4, -1, ^bb3, 0, ^bb1, unit, ^bb2] read(*, '(A)', ADVANCE='NO', ERR=10, END=20, EOR=30, IOSTAT=s, IOMSG=m) f ! CHECK-LABEL: ^bb1: exx = 'Zip'; goto 90 10 exx = 'Err'; goto 90 20 exx = 'End'; goto 90 30 exx = 'Eor'; goto 90 90 print*, exx, c, m, s end ! CHECK-LABEL: func @_QPcontrol0 subroutine control0(n) ! no I/O condition specifier control flow dimension c(n), d(n,n), e(n,n), f(n) ! CHECK-NOT: fir.if ! CHECK: BeginExternalFormattedInput ! CHECK-NOT: fir.if ! CHECK: SetAdvance ! CHECK-NOT: fir.if ! CHECK: InputReal32 ! CHECK-NOT: fir.if ! CHECK: InputReal32 ! CHECK-NOT: fir.if ! CHECK: fir.do_loop ! CHECK-NOT: fir.if ! CHECK: InputReal32 ! CHECK-NOT: fir.if ! CHECK: fir.do_loop ! CHECK-NOT: fir.if ! CHECK: InputReal32 ! CHECK-NOT: fir.if ! CHECK: InputReal32 ! CHECK-NOT: fir.if ! CHECK: InputReal32 ! CHECK-NOT: fir.if ! CHECK: InputReal32 ! CHECK-NOT: fir.if ! CHECK: EndIoStatement ! CHECK-NOT: fir.if read(*,'(F7.2)', advance='no') a, b, (c(j), (d(k,j), e(k,j), k=1,n), f(j), j=1,n), g end ! CHECK-LABEL: func @_QPcontrol1 subroutine control1(n) ! I/O condition specifier control flow ! CHECK: BeginExternalFormattedInput ! CHECK: EnableHandlers ! CHECK: SetAdvance ! CHECK: fir.if ! CHECK: InputReal32 ! CHECK: fir.if ! CHECK: InputReal32 ! CHECK: fir.if ! CHECK: fir.iterate_while ! CHECK: fir.if ! CHECK: InputReal32 ! CHECK: fir.if ! CHECK: fir.iterate_while ! CHECK: fir.if ! CHECK: InputReal32 ! CHECK: fir.if ! CHECK: InputReal32 ! CHECK: fir.if ! CHECK: InputReal32 ! CHECK: fir.if ! CHECK: InputReal32 ! CHECK: EndIoStatement dimension c(n), d(n,n), e(n,n), f(n) read(*,'(F7.2)', iostat=mm, advance='no') a, b, (c(j), (d(k,j), e(k,j), k=1,n), f(j), j=1,n), g end ! CHECK-LABEL: func @_QPcontrol2 subroutine control2() ! I/O condition specifier control flow (use index result) c = 1; d = 9 ! CHECK: BeginExternalFormattedOutput ! CHECK: EnableHandlers ! CHECK: :2 = fir.iterate_while ! CHECK: = fir.if ! CHECK: OutputReal ! CHECK: = fir.if ! CHECK: OutputReal ! CHECK: fir.result ! CHECK: else ! CHECK: fir.result %false ! CHECK: fir.result ! CHECK: else ! CHECK: fir.result %false ! CHECK: = arith.addi %arg0, %c1 ! CHECK: = arith.select ! CHECK: fir.result ! CHECK: fir.if %{{[0-9]*}}#1 ! CHECK: OutputInteger ! CHECK: EndIoStatement write(*,'(8F4.1,I5)',iostat=m) (c,d,j=11,14), j end ! CHECK-LABEL: func @_QPcontrol3 subroutine control3 ! I/O condition specifier control flow character(10) :: internal(2) = ['aaa','bbb'] integer stat, k(3) ! CHECK: BeginInternalArrayListInput ! CHECK: EnableHandlers ! CHECK: InputDescriptor ! CHECK: %[[V_15:[0-9]+]] = fir.call @_FortranAioEndIoStatement ! CHECK: %[[V_16:[0-9]+]] = fir.convert %[[V_15]] : (i32) -> index ! CHECK: fir.select %[[V_16]] : index [-2, ^bb1, -1, ^bb1, 0, ^bb1, unit, ^bb2] read(internal,*,err=666,iostat=stat) k ! set stat to IOSTAT_END (-1) ! CHECK: ^bb1: // 3 preds: ^bb0, ^bb0, ^bb0 ! CHECK: StopStatementText ! CHECK: fir.unreachable stop 'fallthrough -> ok' ! CHECK: ^bb2: // pred: ^bb0 ! CHECK: BeginExternalListOutput ! CHECK: OutputAscii ! CHECK: EndIoStatement 666 print*, 'FAIL' end ! CHECK-LABEL: func @_QPloopnest subroutine loopnest integer :: aa(3,3) aa = 10 ! CHECK: BeginExternalListOutput ! CHECK: EnableHandlers ! CHECK: {{.*}}:2 = fir.iterate_while ({{.*}} = {{.*}} to {{.*}} step {{.*}}) and ({{.*}} = {{.*}}) -> (index, i1) { ! CHECK: fir.if {{.*}} -> (i1) { ! CHECK: {{.*}}:2 = fir.iterate_while ({{.*}} = {{.*}} to {{.*}} step {{.*}}) and ({{.*}} = {{.*}}) -> (index, i1) { ! CHECK: fir.if {{.*}} -> (i1) { ! CHECK: OutputInteger32 ! CHECK: fir.result {{.*}} : i1 ! CHECK: } else { ! CHECK: fir.result {{.*}} : i1 ! CHECK: } ! CHECK: fir.result {{.*}}, {{.*}} : index, i1 ! CHECK: } ! CHECK: fir.result {{.*}}#1 : i1 ! CHECK: } else { ! CHECK: fir.result {{.*}} : i1 ! CHECK: } ! CHECK: fir.result {{.*}}, {{.*}} : index, i1 ! CHECK: } ! CHECK: EndIoStatement write(*,*,err=66) ((aa(j,k)+j+k,j=1,3),k=1,3) 66 continue end ! CHECK-LABEL: func @_QPimpliedformat subroutine impliedformat ! CHECK: BeginExternalListInput ! CHECK: InputReal32 ! CHECK: EndIoStatement(%3) {{.*}}: (!fir.ref) -> i32 read*, x ! CHECK: BeginExternalListOutput ! CHECK: OutputReal32 ! CHECK: EndIoStatement print*, x end