xref: /llvm-project/flang/test/Lower/io-statement-1.f90 (revision 4679132a85c6c4cced2a71ef6422b793ae39598c)
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