| ! RUN: bbc %s -emit-fir -hlfir=false -o - | FileCheck %s |
| ! UNSUPPORTED: system-windows |
| |
| logical :: existsvar |
| integer :: length |
| real :: a(100) |
| |
| ! CHECK-LABEL: _QQmain |
| ! CHECK: call {{.*}}BeginOpenUnit |
| ! CHECK-DAG: call {{.*}}SetFile |
| ! CHECK-DAG: call {{.*}}SetAccess |
| ! CHECK: call {{.*}}EndIoStatement |
| open(8, file="foo", access="sequential") |
| |
| ! CHECK: call {{.*}}BeginBackspace |
| ! CHECK: call {{.*}}EndIoStatement |
| backspace(8) |
| |
| ! CHECK: call {{.*}}BeginFlush |
| ! CHECK: call {{.*}}EndIoStatement |
| flush(8) |
| |
| ! CHECK: call {{.*}}BeginRewind |
| ! CHECK: call {{.*}}EndIoStatement |
| rewind(8) |
| |
| ! CHECK: call {{.*}}BeginEndfile |
| ! CHECK: call {{.*}}EndIoStatement |
| endfile(8) |
| |
| ! CHECK: call {{.*}}BeginWaitAll(%{{.*}}, %{{.*}}, %{{.*}}) |
| ! CHECK: call {{.*}}EndIoStatement |
| wait(unit=8) |
| |
| ! CHECK: call {{.*}}BeginExternalListInput |
| ! CHECK: call {{.*}}InputInteger |
| ! CHECK: call {{.*}}InputReal32 |
| ! CHECK: call {{.*}}EndIoStatement |
| read (8,*) i, f |
| |
| ! CHECK: call {{.*}}BeginExternalListOutput |
| ! CHECK: call {{.*}}OutputInteger32 |
| ! CHECK: call {{.*}}OutputReal32 |
| ! CHECK: call {{.*}}EndIoStatement |
| write (8,*) i, f |
| |
| ! CHECK: call {{.*}}BeginClose |
| ! CHECK: call {{.*}}EndIoStatement |
| close(8) |
| |
| ! CHECK: call {{.*}}BeginExternalListOutput |
| ! CHECK: call {{.*}}OutputAscii |
| ! CHECK: call {{.*}}EndIoStatement |
| print *, "A literal string" |
| |
| ! CHECK: call {{.*}}BeginInquireUnit |
| ! CHECK: call {{.*}}EndIoStatement |
| inquire(4, EXIST=existsvar) |
| |
| ! CHECK: call {{.*}}BeginInquireFile |
| ! CHECK: call {{.*}}EndIoStatement |
| inquire(FILE="fail.f90", EXIST=existsvar) |
| |
| ! CHECK: call {{.*}}BeginInquireIoLength |
| ! CHECK-COUNT-3: call {{.*}}OutputDescriptor |
| ! CHECK: call {{.*}}EndIoStatement |
| inquire (iolength=length) existsvar, length, a |
| end |
| |
| ! CHECK-LABEL: internalnamelistio |
| subroutine internalNamelistIO() |
| ! CHECK: %[[internal:[0-9]+]] = fir.alloca !fir.char<1,12> {bindc_name = "internal" |
| character(12) :: internal |
| integer :: x = 123 |
| namelist /nml/x |
| ! CHECK: %[[internal_:[0-9]+]] = fir.convert %[[internal]] : (!fir.ref<!fir.char<1,12>>) -> !fir.ref<i8> |
| ! CHECK: %[[cookie:[0-9]+]] = fir.call @_FortranAioBeginInternalListOutput(%[[internal_]] |
| ! CHECK: fir.call @_FortranAioOutputNamelist(%[[cookie]] |
| ! CHECK: fir.call @_FortranAioEndIoStatement(%[[cookie]] |
| write(internal,nml=nml) |
| end |
| |
| ! Tests the 4 basic inquire formats |
| ! CHECK-LABEL: func @_QPinquire_test |
| subroutine inquire_test(ch, i, b) |
| character(80) :: ch |
| integer :: i |
| logical :: b |
| integer :: id_func |
| |
| ! CHARACTER |
| ! CHECK: %[[sugar:.*]] = fir.call {{.*}}BeginInquireUnit |
| ! CHECK: call {{.*}}InquireCharacter(%[[sugar]], %c{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i8>, i64) -> i1 |
| ! CHECK: call {{.*}}EndIoStatement |
| inquire(88, name=ch) |
| |
| ! INTEGER |
| ! CHECK: %[[oatmeal:.*]] = fir.call {{.*}}BeginInquireUnit |
| ! CHECK: call @_FortranAioInquireInteger64(%[[oatmeal]], %c{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i64>, i32) -> i1 |
| ! CHECK: call {{.*}}EndIoStatement |
| inquire(89, pos=i) |
| |
| ! LOGICAL |
| ! CHECK: %[[snicker:.*]] = fir.call {{.*}}BeginInquireUnit |
| ! CHECK: call @_FortranAioInquireLogical(%[[snicker]], %c{{.*}}, %[[b:.*]]) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i1>) -> i1 |
| ! CHECK: call {{.*}}EndIoStatement |
| inquire(90, opened=b) |
| |
| ! PENDING with ID |
| ! CHECK-DAG: %[[chip:.*]] = fir.call {{.*}}BeginInquireUnit |
| ! CHECK-DAG: fir.call @_QPid_func |
| ! CHECK: call @_FortranAioInquirePendingId(%[[chip]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32, !fir.ref<i1>) -> i1 |
| ! CHECK: call {{.*}}EndIoStatement |
| inquire(91, id=id_func(), pending=b) |
| end subroutine inquire_test |
| |
| ! CHECK-LABEL: @_QPboz |
| subroutine boz |
| ! CHECK: fir.call @_FortranAioOutputInteger8(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i8) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger16(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i16) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger128(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i128) -> i1 |
| print '(*(Z3))', 96_1, 96_2, 96_4, 96_8, 96_16 |
| |
| ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| print '(I3,2Z44)', 40, 2**40_8, 2**40_8+1 |
| |
| ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| print '(I3,2I44)', 40, 1099511627776, 1099511627777 |
| |
| ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| print '(I3,2O44)', 40, 2**40_8, 2**40_8+1 |
| |
| ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 |
| print '(I3,2B44)', 40, 2**40_8, 2**40_8+1 |
| end |