146 lines · plain
1! RUN: bbc %s -emit-fir -hlfir=false -o - | FileCheck %s2! UNSUPPORTED: system-windows3 4 logical :: existsvar5 integer :: length6 real :: a(100)7 8 ! CHECK-LABEL: _QQmain9 ! CHECK: call {{.*}}BeginOpenUnit10 ! CHECK-DAG: call {{.*}}SetFile11 ! CHECK-DAG: call {{.*}}SetAccess12 ! CHECK: call {{.*}}EndIoStatement13 open(8, file="foo", access="sequential")14 15 ! CHECK: call {{.*}}BeginBackspace16 ! CHECK: call {{.*}}EndIoStatement17 backspace(8)18 19 ! CHECK: call {{.*}}BeginFlush20 ! CHECK: call {{.*}}EndIoStatement21 flush(8)22 23 ! CHECK: call {{.*}}BeginRewind24 ! CHECK: call {{.*}}EndIoStatement25 rewind(8)26 27 ! CHECK: call {{.*}}BeginEndfile28 ! CHECK: call {{.*}}EndIoStatement29 endfile(8)30 31 ! CHECK: call {{.*}}BeginWaitAll(%{{.*}}, %{{.*}}, %{{.*}})32 ! CHECK: call {{.*}}EndIoStatement33 wait(unit=8)34 35 ! CHECK: call {{.*}}BeginExternalListInput36 ! CHECK: call {{.*}}InputInteger37 ! CHECK: call {{.*}}InputReal3238 ! CHECK: call {{.*}}EndIoStatement39 read (8,*) i, f40 41 ! CHECK: call {{.*}}BeginExternalListOutput42 ! CHECK: call {{.*}}OutputInteger3243 ! CHECK: call {{.*}}OutputReal3244 ! CHECK: call {{.*}}EndIoStatement45 write (8,*) i, f46 47 ! CHECK: call {{.*}}BeginClose48 ! CHECK: call {{.*}}EndIoStatement49 close(8)50 51 ! CHECK: call {{.*}}BeginExternalListOutput52 ! CHECK: call {{.*}}OutputAscii53 ! CHECK: call {{.*}}EndIoStatement54 print *, "A literal string"55 56 ! CHECK: call {{.*}}BeginInquireUnit57 ! CHECK: call {{.*}}EndIoStatement58 inquire(4, EXIST=existsvar)59 60 ! CHECK: call {{.*}}BeginInquireFile61 ! CHECK: call {{.*}}EndIoStatement62 inquire(FILE="fail.f90", EXIST=existsvar)63 64 ! CHECK: call {{.*}}BeginInquireIoLength65 ! CHECK-COUNT-3: call {{.*}}OutputDescriptor66 ! CHECK: call {{.*}}EndIoStatement67 inquire (iolength=length) existsvar, length, a68end69 70! CHECK-LABEL: internalnamelistio71subroutine internalNamelistIO()72 ! CHECK: %[[internal:[0-9]+]] = fir.alloca !fir.char<1,12> {bindc_name = "internal"73 character(12) :: internal74 integer :: x = 12375 namelist /nml/x76 ! CHECK: %[[internal_:[0-9]+]] = fir.convert %[[internal]] : (!fir.ref<!fir.char<1,12>>) -> !fir.ref<i8>77 ! CHECK: %[[cookie:[0-9]+]] = fir.call @_FortranAioBeginInternalListOutput(%[[internal_]]78 ! CHECK: fir.call @_FortranAioOutputNamelist(%[[cookie]]79 ! CHECK: fir.call @_FortranAioEndIoStatement(%[[cookie]]80 write(internal,nml=nml)81end82 83! Tests the 4 basic inquire formats84! CHECK-LABEL: func @_QPinquire_test85subroutine inquire_test(ch, i, b)86 character(80) :: ch87 integer :: i88 logical :: b89 integer :: id_func90 91 ! CHARACTER92 ! CHECK: %[[sugar:.*]] = fir.call {{.*}}BeginInquireUnit93 ! CHECK: call {{.*}}InquireCharacter(%[[sugar]], %c{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i8>, i64) -> i194 ! CHECK: call {{.*}}EndIoStatement95 inquire(88, name=ch)96 97 ! INTEGER98 ! CHECK: %[[oatmeal:.*]] = fir.call {{.*}}BeginInquireUnit99 ! CHECK: call @_FortranAioInquireInteger64(%[[oatmeal]], %c{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i64>, i32) -> i1100 ! CHECK: call {{.*}}EndIoStatement101 inquire(89, pos=i)102 103 ! LOGICAL104 ! CHECK: %[[snicker:.*]] = fir.call {{.*}}BeginInquireUnit105 ! CHECK: call @_FortranAioInquireLogical(%[[snicker]], %c{{.*}}, %[[b:.*]]) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i1>) -> i1106 ! CHECK: call {{.*}}EndIoStatement107 inquire(90, opened=b)108 109 ! PENDING with ID110 ! CHECK-DAG: %[[chip:.*]] = fir.call {{.*}}BeginInquireUnit111 ! CHECK-DAG: fir.call @_QPid_func112 ! CHECK: call @_FortranAioInquirePendingId(%[[chip]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32, !fir.ref<i1>) -> i1113 ! CHECK: call {{.*}}EndIoStatement114 inquire(91, id=id_func(), pending=b)115end subroutine inquire_test116 117! CHECK-LABEL: @_QPboz118subroutine boz119 ! CHECK: fir.call @_FortranAioOutputInteger8(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i8) -> i1120 ! CHECK: fir.call @_FortranAioOutputInteger16(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i16) -> i1121 ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1122 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1123 ! CHECK: fir.call @_FortranAioOutputInteger128(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i128) -> i1124 print '(*(Z3))', 96_1, 96_2, 96_4, 96_8, 96_16125 126 ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1127 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1128 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1129 print '(I3,2Z44)', 40, 2**40_8, 2**40_8+1130 131 ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1132 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1133 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1134 print '(I3,2I44)', 40, 1099511627776, 1099511627777135 136 ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1137 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1138 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1139 print '(I3,2O44)', 40, 2**40_8, 2**40_8+1140 141 ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1142 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1143 ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1144 print '(I3,2B44)', 40, 2**40_8, 2**40_8+1145end146