1f35f863aSjeanPerier! RUN: bbc %s -emit-fir -hlfir=false -o - | FileCheck %s 28c22cb84SValentin Clement! UNSUPPORTED: system-windows 38c22cb84SValentin Clement 48c22cb84SValentin Clement logical :: existsvar 58c22cb84SValentin Clement integer :: length 68c22cb84SValentin Clement real :: a(100) 78c22cb84SValentin Clement 88c22cb84SValentin Clement ! CHECK-LABEL: _QQmain 9db48f7b2SValentin Clement ! CHECK: call {{.*}}BeginOpenUnit 10db48f7b2SValentin Clement ! CHECK-DAG: call {{.*}}SetFile 11db48f7b2SValentin Clement ! CHECK-DAG: call {{.*}}SetAccess 12db48f7b2SValentin Clement ! CHECK: call {{.*}}EndIoStatement 13db48f7b2SValentin Clement open(8, file="foo", access="sequential") 14db48f7b2SValentin Clement 1546f46a37SValentin Clement ! CHECK: call {{.*}}BeginBackspace 1646f46a37SValentin Clement ! CHECK: call {{.*}}EndIoStatement 1746f46a37SValentin Clement backspace(8) 1846f46a37SValentin Clement 1946f46a37SValentin Clement ! CHECK: call {{.*}}BeginFlush 2046f46a37SValentin Clement ! CHECK: call {{.*}}EndIoStatement 2146f46a37SValentin Clement flush(8) 2246f46a37SValentin Clement 2346f46a37SValentin Clement ! CHECK: call {{.*}}BeginRewind 2446f46a37SValentin Clement ! CHECK: call {{.*}}EndIoStatement 2546f46a37SValentin Clement rewind(8) 2646f46a37SValentin Clement 2746f46a37SValentin Clement ! CHECK: call {{.*}}BeginEndfile 2846f46a37SValentin Clement ! CHECK: call {{.*}}EndIoStatement 2946f46a37SValentin Clement endfile(8) 3046f46a37SValentin Clement 31df417c37SValentin Clement ! CHECK: call {{.*}}BeginWaitAll(%{{.*}}, %{{.*}}, %{{.*}}) 3246f46a37SValentin Clement ! CHECK: call {{.*}}EndIoStatement 3346f46a37SValentin Clement wait(unit=8) 3446f46a37SValentin Clement 358c22cb84SValentin Clement ! CHECK: call {{.*}}BeginExternalListInput 368c22cb84SValentin Clement ! CHECK: call {{.*}}InputInteger 378c22cb84SValentin Clement ! CHECK: call {{.*}}InputReal32 388c22cb84SValentin Clement ! CHECK: call {{.*}}EndIoStatement 398c22cb84SValentin Clement read (8,*) i, f 408c22cb84SValentin Clement 418c22cb84SValentin Clement ! CHECK: call {{.*}}BeginExternalListOutput 428c22cb84SValentin Clement ! CHECK: call {{.*}}OutputInteger32 438c22cb84SValentin Clement ! CHECK: call {{.*}}OutputReal32 448c22cb84SValentin Clement ! CHECK: call {{.*}}EndIoStatement 458c22cb84SValentin Clement write (8,*) i, f 468c22cb84SValentin Clement 47db48f7b2SValentin Clement ! CHECK: call {{.*}}BeginClose 48db48f7b2SValentin Clement ! CHECK: call {{.*}}EndIoStatement 49db48f7b2SValentin Clement close(8) 50db48f7b2SValentin Clement 518c22cb84SValentin Clement ! CHECK: call {{.*}}BeginExternalListOutput 528c22cb84SValentin Clement ! CHECK: call {{.*}}OutputAscii 538c22cb84SValentin Clement ! CHECK: call {{.*}}EndIoStatement 548c22cb84SValentin Clement print *, "A literal string" 557e32cadaSValentin Clement 567e32cadaSValentin Clement ! CHECK: call {{.*}}BeginInquireUnit 577e32cadaSValentin Clement ! CHECK: call {{.*}}EndIoStatement 587e32cadaSValentin Clement inquire(4, EXIST=existsvar) 597e32cadaSValentin Clement 607e32cadaSValentin Clement ! CHECK: call {{.*}}BeginInquireFile 617e32cadaSValentin Clement ! CHECK: call {{.*}}EndIoStatement 627e32cadaSValentin Clement inquire(FILE="fail.f90", EXIST=existsvar) 637e32cadaSValentin Clement 647e32cadaSValentin Clement ! CHECK: call {{.*}}BeginInquireIoLength 657e32cadaSValentin Clement ! CHECK-COUNT-3: call {{.*}}OutputDescriptor 667e32cadaSValentin Clement ! CHECK: call {{.*}}EndIoStatement 677e32cadaSValentin Clement inquire (iolength=length) existsvar, length, a 688c22cb84SValentin Clementend 698c22cb84SValentin Clement 70bd90155dSValentin Clement! CHECK-LABEL: internalnamelistio 71bd90155dSValentin Clementsubroutine internalNamelistIO() 72bd90155dSValentin Clement ! CHECK: %[[internal:[0-9]+]] = fir.alloca !fir.char<1,12> {bindc_name = "internal" 73bd90155dSValentin Clement character(12) :: internal 74bd90155dSValentin Clement integer :: x = 123 75bd90155dSValentin Clement namelist /nml/x 76bd90155dSValentin Clement ! CHECK: %[[internal_:[0-9]+]] = fir.convert %[[internal]] : (!fir.ref<!fir.char<1,12>>) -> !fir.ref<i8> 77bd90155dSValentin Clement ! CHECK: %[[cookie:[0-9]+]] = fir.call @_FortranAioBeginInternalListOutput(%[[internal_]] 78bd90155dSValentin Clement ! CHECK: fir.call @_FortranAioOutputNamelist(%[[cookie]] 79bd90155dSValentin Clement ! CHECK: fir.call @_FortranAioEndIoStatement(%[[cookie]] 80bd90155dSValentin Clement write(internal,nml=nml) 81bd90155dSValentin Clementend 82bd90155dSValentin Clement 83bd90155dSValentin Clement! Tests the 4 basic inquire formats 847e32cadaSValentin Clement! CHECK-LABEL: func @_QPinquire_test 857e32cadaSValentin Clementsubroutine inquire_test(ch, i, b) 867e32cadaSValentin Clement character(80) :: ch 877e32cadaSValentin Clement integer :: i 887e32cadaSValentin Clement logical :: b 89bd90155dSValentin Clement integer :: id_func 907e32cadaSValentin Clement 917e32cadaSValentin Clement ! CHARACTER 927e32cadaSValentin Clement ! CHECK: %[[sugar:.*]] = fir.call {{.*}}BeginInquireUnit 934cc9437aSTom Eccles ! CHECK: call {{.*}}InquireCharacter(%[[sugar]], %c{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i8>, i64) -> i1 947e32cadaSValentin Clement ! CHECK: call {{.*}}EndIoStatement 957e32cadaSValentin Clement inquire(88, name=ch) 967e32cadaSValentin Clement 977e32cadaSValentin Clement ! INTEGER 987e32cadaSValentin Clement ! CHECK: %[[oatmeal:.*]] = fir.call {{.*}}BeginInquireUnit 994cc9437aSTom Eccles ! CHECK: call @_FortranAioInquireInteger64(%[[oatmeal]], %c{{.*}}, %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i64>, i32) -> i1 1007e32cadaSValentin Clement ! CHECK: call {{.*}}EndIoStatement 1017e32cadaSValentin Clement inquire(89, pos=i) 1027e32cadaSValentin Clement 1037e32cadaSValentin Clement ! LOGICAL 1047e32cadaSValentin Clement ! CHECK: %[[snicker:.*]] = fir.call {{.*}}BeginInquireUnit 1054cc9437aSTom Eccles ! CHECK: call @_FortranAioInquireLogical(%[[snicker]], %c{{.*}}, %[[b:.*]]) {{.*}}: (!fir.ref<i8>, i64, !fir.ref<i1>) -> i1 1067e32cadaSValentin Clement ! CHECK: call {{.*}}EndIoStatement 1077e32cadaSValentin Clement inquire(90, opened=b) 108bd90155dSValentin Clement 109bd90155dSValentin Clement ! PENDING with ID 110bd90155dSValentin Clement ! CHECK-DAG: %[[chip:.*]] = fir.call {{.*}}BeginInquireUnit 111bd90155dSValentin Clement ! CHECK-DAG: fir.call @_QPid_func 112*4679132aSjeanPerier ! CHECK: call @_FortranAioInquirePendingId(%[[chip]], %{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32, !fir.ref<i1>) -> i1 113bd90155dSValentin Clement ! CHECK: call {{.*}}EndIoStatement 114bd90155dSValentin Clement inquire(91, id=id_func(), pending=b) 1157e32cadaSValentin Clementend subroutine inquire_test 1167e32cadaSValentin Clement 1178c22cb84SValentin Clement! CHECK-LABEL: @_QPboz 1188c22cb84SValentin Clementsubroutine boz 1194cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger8(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i8) -> i1 1204cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger16(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i16) -> i1 1214cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 1224cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1234cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger128(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i128) -> i1 1248c22cb84SValentin Clement print '(*(Z3))', 96_1, 96_2, 96_4, 96_8, 96_16 1258c22cb84SValentin Clement 1264cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 1274cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1284cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1298c22cb84SValentin Clement print '(I3,2Z44)', 40, 2**40_8, 2**40_8+1 1308c22cb84SValentin Clement 1314cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 1324cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1334cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1348c22cb84SValentin Clement print '(I3,2I44)', 40, 1099511627776, 1099511627777 1358c22cb84SValentin Clement 1364cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 1374cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1384cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1398c22cb84SValentin Clement print '(I3,2O44)', 40, 2**40_8, 2**40_8+1 1408c22cb84SValentin Clement 1414cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i32) -> i1 1424cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1434cc9437aSTom Eccles ! CHECK: fir.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) {{.*}}: (!fir.ref<i8>, i64) -> i1 1448c22cb84SValentin Clement print '(I3,2B44)', 40, 2**40_8, 2**40_8+1 1458c22cb84SValentin Clementend 146