peixin added a comment. $ cat fconvert_option_main_2.f90 ! ! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ! See https://llvm.org/LICENSE.txt for license information. ! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ! ! checking for I/O: testing read with -fconvert=big-endian. ! The convert argument of open function has prior claim over fconvert option. ! Only main program intentionally compiled with -fconvert=big-endian. program fconvert_option_main_2 use fconvert_option_openfile use fconvert_option_readfile integer, parameter :: n = 4 integer :: del_flag = 0 ! 1 for deleting data file after read real :: arr(n) = [1.0, 2.0, 3.0, 4.0] character(:), allocatable :: filename integer :: arglen call get_command_argument(1, length = arglen) allocate(character(arglen) :: filename) call get_command_argument(1, value = filename) call open_for_read_LE(10, filename) call readfile(10, del_flag, arr, n, 0) call open_for_read_native(11, filename) call readfile(11, del_flag, arr, n, 4) print *, 'PASS' end $ cat fconvert_option_readfile.f90 ! ! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ! See https://llvm.org/LICENSE.txt for license information. ! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ! ! checking for I/O: readfile subroutine module fconvert_option_readfile contains subroutine readfile(fid, del_flag, expect, n, t) integer :: n, t integer :: fid, del_flag real :: expect(n) real :: buf(n) read (fid) buf if (del_flag .eq. 0) then close (fid) else close (fid, status='delete') end if do i = 1, n if (buf(i) .ne. expect(i)) stop (i+t) enddo end end $ cat fconvert_option_openfile.f90 ! ! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ! See https://llvm.org/LICENSE.txt for license information. ! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ! ! checking for I/O: openfile subroutines module fconvert_option_openfile contains subroutine open_for_read(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='old') end subroutine open_for_read_BE(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='old', convert="BIG_ENDIAN") end subroutine open_for_read_LE(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='old', convert="LITTLE_ENDIAN") end subroutine open_for_read_native(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='old', convert="NATIVE") end subroutine open_for_write(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='new') end subroutine open_for_write_BE(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='new', convert="BIG_ENDIAN") end subroutine open_for_write_LE(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='new', convert="LITTLE_ENDIAN") end subroutine open_for_write_native(fid, file_name) integer :: fid character(:), allocatable :: file_name open (fid, file=file_name, form='UNFORMATTED', status='new', convert="NATIVE") end end $ cat fconvert_option_writefile.f90 ! ! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ! See https://llvm.org/LICENSE.txt for license information. ! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ! ! checking for I/O: writefile subroutine module fconvert_option_writefile contains subroutine writefile(fid, buf, n) integer :: n real :: buf(n) integer :: fid write (fid) buf close (fid) end end $ cat run.sh #!/bin/bash echo "---------- gfortran ----------" gfortran fconvert_option_readfile.f90 -c gfortran fconvert_option_openfile.f90 -c gfortran fconvert_option_writefile.f90 -c gfortran $1.f90 $2 -c gfortran $1.o fconvert_option_readfile.o fconvert_option_openfile.o fconvert_option_writefile.o ./a.out Inputs/fc_opt_data_$3 && rm *.o *.mod a.out echo && echo "---------- flang-new ----------" flang-new fconvert_option_readfile.f90 -c flang-new fconvert_option_openfile.f90 -c flang-new fconvert_option_writefile.f90 -c flang-new $1.f90 $2 -c flang-new -flang-experimental-exec $1.o fconvert_option_readfile.o fconvert_option_openfile.o fconvert_option_writefile.o ./a.out Inputs/fc_opt_data_$3 && rm *.o *.mod a.out $ bash run.sh fconvert_option_main_2 -fconvert=big-endian little ---------- gfortran ---------- PASS ---------- flang-new ---------- fatal Fortran runtime error(./fconvert_option_readfile.f90:17): Unformatted variable-length sequential file input failed at record #1 (file offset 0): hit EOF reading record with length 268435456 bytes run.sh: line 17: 126614 Aborted (core dumped) ./a.out Inputs/fc_opt_data_$3
Not sure if this fail is caused by this patch or runtime IO functions. I will add our other internal tests to https://github.com/llvm/llvm-project/issues/55961 and you can also test those cases. The data is an array of "1.0 2.0 3.0 4.0" through little-endian or big-endian. You can create it by yourself. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D130513/new/ https://reviews.llvm.org/D130513 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
