! 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<i8>) -> i32
read*, x
! CHECK: BeginExternalListOutput
! CHECK: OutputReal32
! CHECK: EndIoStatement
print*, x
end