171 lines · plain
1! RUN: bbc -emit-fir -hlfir=false -o - %s | FileCheck %s2! UNSUPPORTED: system-windows3 4 character*10 :: exx5 character*30 :: m6 integer*2 :: s7 exx = 'AA'8 m = 'CCCCCC'9 s = -1310 ! CHECK: call {{.*}}BeginExternalFormattedInput11 ! CHECK: call {{.*}}EnableHandlers12 ! CHECK: call {{.*}}SetAdvance13 ! CHECK: call {{.*}}InputReal14 ! CHECK: call {{.*}}GetIoMsg15 ! CHECK: call {{.*}}EndIoStatement16 ! CHECK: fir.select %{{.*}} : index [-2, ^bb4, -1, ^bb3, 0, ^bb1, unit, ^bb2]17 read(*, '(A)', ADVANCE='NO', ERR=10, END=20, EOR=30, IOSTAT=s, IOMSG=m) f18 ! CHECK-LABEL: ^bb1:19 exx = 'Zip'; goto 902010 exx = 'Err'; goto 902120 exx = 'End'; goto 902230 exx = 'Eor'; goto 902390 print*, exx, c, m, s24end25 26! CHECK-LABEL: func @_QPcontrol027subroutine control0(n) ! no I/O condition specifier control flow28dimension c(n), d(n,n), e(n,n), f(n)29! CHECK-NOT: fir.if30! CHECK: BeginExternalFormattedInput31! CHECK-NOT: fir.if32! CHECK: SetAdvance33! CHECK-NOT: fir.if34! CHECK: InputReal3235! CHECK-NOT: fir.if36! CHECK: InputReal3237! CHECK-NOT: fir.if38! CHECK: fir.do_loop39! CHECK-NOT: fir.if40! CHECK: InputReal3241! CHECK-NOT: fir.if42! CHECK: fir.do_loop43! CHECK-NOT: fir.if44! CHECK: InputReal3245! CHECK-NOT: fir.if46! CHECK: InputReal3247! CHECK-NOT: fir.if48! CHECK: InputReal3249! CHECK-NOT: fir.if50! CHECK: InputReal3251! CHECK-NOT: fir.if52! CHECK: EndIoStatement53! CHECK-NOT: fir.if54read(*,'(F7.2)', advance='no') a, b, (c(j), (d(k,j), e(k,j), k=1,n), f(j), j=1,n), g55end56 57! CHECK-LABEL: func @_QPcontrol158subroutine control1(n) ! I/O condition specifier control flow59! CHECK: BeginExternalFormattedInput60! CHECK: EnableHandlers61! CHECK: SetAdvance62! CHECK: fir.if63! CHECK: InputReal3264! CHECK: fir.if65! CHECK: InputReal3266! CHECK: fir.if67! CHECK: fir.iterate_while68! CHECK: fir.if69! CHECK: InputReal3270! CHECK: fir.if71! CHECK: fir.iterate_while72! CHECK: fir.if73! CHECK: InputReal3274! CHECK: fir.if75! CHECK: InputReal3276! CHECK: fir.if77! CHECK: InputReal3278! CHECK: fir.if79! CHECK: InputReal3280! CHECK: EndIoStatement81dimension c(n), d(n,n), e(n,n), f(n)82read(*,'(F7.2)', iostat=mm, advance='no') a, b, (c(j), (d(k,j), e(k,j), k=1,n), f(j), j=1,n), g83end84 85! CHECK-LABEL: func @_QPcontrol286subroutine control2() ! I/O condition specifier control flow (use index result)87c = 1; d = 988! CHECK: BeginExternalFormattedOutput89! CHECK: EnableHandlers90! CHECK: :2 = fir.iterate_while91! CHECK: = fir.if92! CHECK: OutputReal93! CHECK: = fir.if94! CHECK: OutputReal95! CHECK: fir.result96! CHECK: else97! CHECK: fir.result %false98! CHECK: fir.result99! CHECK: else100! CHECK: fir.result %false101! CHECK: = arith.addi %arg0, %c1102! CHECK: = arith.select103! CHECK: fir.result104! CHECK: fir.if %{{[0-9]*}}#1105! CHECK: OutputInteger106! CHECK: EndIoStatement107write(*,'(8F4.1,I5)',iostat=m) (c,d,j=11,14), j108end109 110! CHECK-LABEL: func @_QPcontrol3111subroutine control3 ! I/O condition specifier control flow112 character(10) :: internal(2) = ['aaa','bbb']113 integer stat, k(3)114 ! CHECK: BeginInternalArrayListInput115 ! CHECK: EnableHandlers116 ! CHECK: InputDescriptor117 ! CHECK: %[[V_15:[0-9]+]] = fir.call @_FortranAioEndIoStatement118 ! CHECK: %[[V_16:[0-9]+]] = fir.convert %[[V_15]] : (i32) -> index119 ! CHECK: fir.select %[[V_16]] : index [-2, ^bb1, -1, ^bb1, 0, ^bb1, unit, ^bb2]120 read(internal,*,err=666,iostat=stat) k ! set stat to IOSTAT_END (-1)121 ! CHECK: ^bb1: // 3 preds: ^bb0, ^bb0, ^bb0122 ! CHECK: StopStatementText123 ! CHECK: fir.unreachable124 stop 'fallthrough -> ok'125 ! CHECK: ^bb2: // pred: ^bb0126 ! CHECK: BeginExternalListOutput127 ! CHECK: OutputAscii128 ! CHECK: EndIoStatement129666 print*, 'FAIL'130 end131 132! CHECK-LABEL: func @_QPloopnest133subroutine loopnest134 integer :: aa(3,3)135 aa = 10136 ! CHECK: BeginExternalListOutput137 ! CHECK: EnableHandlers138 ! CHECK: {{.*}}:2 = fir.iterate_while ({{.*}} = {{.*}} to {{.*}} step {{.*}}) and ({{.*}} = {{.*}}) -> (index, i1) {139 ! CHECK: fir.if {{.*}} -> (i1) {140 ! CHECK: {{.*}}:2 = fir.iterate_while ({{.*}} = {{.*}} to {{.*}} step {{.*}}) and ({{.*}} = {{.*}}) -> (index, i1) {141 ! CHECK: fir.if {{.*}} -> (i1) {142 ! CHECK: OutputInteger32143 ! CHECK: fir.result {{.*}} : i1144 ! CHECK: } else {145 ! CHECK: fir.result {{.*}} : i1146 ! CHECK: }147 ! CHECK: fir.result {{.*}}, {{.*}} : index, i1148 ! CHECK: }149 ! CHECK: fir.result {{.*}}#1 : i1150 ! CHECK: } else {151 ! CHECK: fir.result {{.*}} : i1152 ! CHECK: }153 ! CHECK: fir.result {{.*}}, {{.*}} : index, i1154 ! CHECK: }155 ! CHECK: EndIoStatement156 write(*,*,err=66) ((aa(j,k)+j+k,j=1,3),k=1,3)15766 continue158end159 160! CHECK-LABEL: func @_QPimpliedformat161subroutine impliedformat162 ! CHECK: BeginExternalListInput163 ! CHECK: InputReal32164 ! CHECK: EndIoStatement(%3) {{.*}}: (!fir.ref<i8>) -> i32165 read*, x166 ! CHECK: BeginExternalListOutput167 ! CHECK: OutputReal32168 ! CHECK: EndIoStatement169 print*, x170end171