From 06e3251dea01e501d32021a84302b1863de5656f Mon Sep 17 00:00:00 2001 From: Andre Kuhlenschmidt Date: Thu, 4 Sep 2025 14:51:16 -0700 Subject: [PATCH 1/6] initial commit --- Fortran/UnitTests/CMakeLists.txt | 1 + Fortran/UnitTests/defined_io/CMakeLists.txt | 3 + Fortran/UnitTests/defined_io/list-read.f90 | 65 +++++++++++++++++++ .../defined_io/list-read.reference_output | 3 + Fortran/UnitTests/defined_io/lit.local.cfg | 2 + 5 files changed, 74 insertions(+) create mode 100644 Fortran/UnitTests/defined_io/CMakeLists.txt create mode 100644 Fortran/UnitTests/defined_io/list-read.f90 create mode 100644 Fortran/UnitTests/defined_io/list-read.reference_output create mode 100644 Fortran/UnitTests/defined_io/lit.local.cfg diff --git a/Fortran/UnitTests/CMakeLists.txt b/Fortran/UnitTests/CMakeLists.txt index 5c63b0da1e..9c166a644b 100644 --- a/Fortran/UnitTests/CMakeLists.txt +++ b/Fortran/UnitTests/CMakeLists.txt @@ -2,6 +2,7 @@ add_subdirectory(hello) add_subdirectory(assign-goto) add_subdirectory(cray_pointers_2) +add_subdirectory(defined_io) add_subdirectory(execute_command_line) add_subdirectory(fcvs21_f95) # NIST Fortran Compiler Validation Suite add_subdirectory(finalization) diff --git a/Fortran/UnitTests/defined_io/CMakeLists.txt b/Fortran/UnitTests/defined_io/CMakeLists.txt new file mode 100644 index 0000000000..8b9f2da57c --- /dev/null +++ b/Fortran/UnitTests/defined_io/CMakeLists.txt @@ -0,0 +1,3 @@ +llvm_singlesource() + +file(COPY lit.local.cfg DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") diff --git a/Fortran/UnitTests/defined_io/list-read.f90 b/Fortran/UnitTests/defined_io/list-read.f90 new file mode 100644 index 0000000000..a97474d28f --- /dev/null +++ b/Fortran/UnitTests/defined_io/list-read.f90 @@ -0,0 +1,65 @@ +module m + type base + real, allocatable :: data(:) + complex, allocatable :: cx(:) + + contains + + procedure :: readBaseFmtd + generic :: read(formatted) => readBaseFmtd + end type + + contains + + !! read in the array size before allocating dtv's components + subroutine readBaseFmtd (dtv, unit, iotype, v_list, iostat, iomsg) + class(base), intent(inout) :: dtv + integer, intent(in) :: unit + character(*), intent(in) :: iotype + integer, intent(in) :: v_list(:) + integer, intent(out) :: iostat + character(*), intent(inout) :: iomsg + + integer isize + + read (unit, *, iostat = iostat, iomsg=iomsg) isize + + if (allocated(dtv%data)) deallocate (dtv%data) + + allocate (dtv%data(isize)) + + read (unit, *, iostat=iostat, iomsg=iomsg) dtv%data + read (unit, *, iostat = iostat, iomsg=iomsg) isize + if (allocated(dtv%cx)) deallocate (dtv%cx) + + allocate (dtv%cx(isize)) + + read (unit, *, iostat=iostat, iomsg=iomsg) dtv%cx + end subroutine +end module + +program list_read + use m + integer currentPos, ss + + type(base) :: b1(2) + + + open (1, file='dcmlChildRead003.data', access='stream', form='formatted', & + decimal='Comma') + + write (1, '(i4, 10(g15.7))', pos=1, decimal='Point') 10, (i*1.0, i=1, 10) + + inquire (1, pos=currentPos) + + write(1, *, pos=currentPos, decimal='point') 12, (cmplx(i*1.0, i*2.0), i=-12, -1) + + write (1, *) 20, (i*1.22, i=1,20) + write (1, *, sign='plus') 22, (cmplx(i*1.1, i*2.2), i=-10,11) + + allocate (b1(1)%cx(3), b1(2)%data(1000)) + read (1, '(dp, dt, dc, dt)', pos=1) b1 + + print*, size(b1(1)%data) + print*, size(b1(1)%cx) +end program list_read diff --git a/Fortran/UnitTests/defined_io/list-read.reference_output b/Fortran/UnitTests/defined_io/list-read.reference_output new file mode 100644 index 0000000000..cfcc2cda1f --- /dev/null +++ b/Fortran/UnitTests/defined_io/list-read.reference_output @@ -0,0 +1,3 @@ +10 +12 +exit 0 \ No newline at end of file diff --git a/Fortran/UnitTests/defined_io/lit.local.cfg b/Fortran/UnitTests/defined_io/lit.local.cfg new file mode 100644 index 0000000000..1166820260 --- /dev/null +++ b/Fortran/UnitTests/defined_io/lit.local.cfg @@ -0,0 +1,2 @@ +config.traditional_output = True +config.single_source = True From 769da4d640f80f8ca80890fa9d78bb1c84f4bc9c Mon Sep 17 00:00:00 2001 From: Andre Kuhlenschmidt Date: Thu, 4 Sep 2025 15:05:53 -0700 Subject: [PATCH 2/6] add newline to output --- Fortran/UnitTests/defined_io/list-read.reference_output | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Fortran/UnitTests/defined_io/list-read.reference_output b/Fortran/UnitTests/defined_io/list-read.reference_output index cfcc2cda1f..cd8af6e765 100644 --- a/Fortran/UnitTests/defined_io/list-read.reference_output +++ b/Fortran/UnitTests/defined_io/list-read.reference_output @@ -1,3 +1,3 @@ 10 12 -exit 0 \ No newline at end of file +exit 0 From 3156a7141975fc345a09c2cf4c0cdec2970d37e8 Mon Sep 17 00:00:00 2001 From: Andre Kuhlenschmidt Date: Fri, 5 Sep 2025 15:02:56 -0700 Subject: [PATCH 3/6] address feedback --- .../{list-read.f90 => llvm-project-issue-154979.f90} | 9 +++++---- ...output => llvm-project-issue-154979.reference_output} | 0 2 files changed, 5 insertions(+), 4 deletions(-) rename Fortran/UnitTests/defined_io/{list-read.f90 => llvm-project-issue-154979.f90} (89%) rename Fortran/UnitTests/defined_io/{list-read.reference_output => llvm-project-issue-154979.reference_output} (100%) diff --git a/Fortran/UnitTests/defined_io/list-read.f90 b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 similarity index 89% rename from Fortran/UnitTests/defined_io/list-read.f90 rename to Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 index a97474d28f..7da01c7cb2 100644 --- a/Fortran/UnitTests/defined_io/list-read.f90 +++ b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 @@ -1,4 +1,5 @@ -module m +! A verbatim copy of test case from https://github.com/llvm/llvm-project/issues/154979 +module llvm_project_issue_154979_m type base real, allocatable :: data(:) complex, allocatable :: cx(:) @@ -38,8 +39,8 @@ subroutine readBaseFmtd (dtv, unit, iotype, v_list, iostat, iomsg) end subroutine end module -program list_read - use m +program llvm_project_issue_154979 + use llvm_project_issue_154979_m integer currentPos, ss type(base) :: b1(2) @@ -62,4 +63,4 @@ program list_read print*, size(b1(1)%data) print*, size(b1(1)%cx) -end program list_read +end program diff --git a/Fortran/UnitTests/defined_io/list-read.reference_output b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output similarity index 100% rename from Fortran/UnitTests/defined_io/list-read.reference_output rename to Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output From 82a7862ec12eeed8c0c95f3a54124ba67a4a02f0 Mon Sep 17 00:00:00 2001 From: Andre Kuhlenschmidt Date: Fri, 5 Sep 2025 15:08:15 -0700 Subject: [PATCH 4/6] modifying open --- Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 index 7da01c7cb2..115b54338d 100644 --- a/Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 +++ b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.f90 @@ -46,8 +46,7 @@ program llvm_project_issue_154979 type(base) :: b1(2) - open (1, file='dcmlChildRead003.data', access='stream', form='formatted', & - decimal='Comma') + open (1, access='stream', form='formatted', decimal='Comma', status='scratch') write (1, '(i4, 10(g15.7))', pos=1, decimal='Point') 10, (i*1.0, i=1, 10) From 30e464f141fee99fc4129ba8e06fe48644d709a7 Mon Sep 17 00:00:00 2001 From: Andre Kuhlenschmidt Date: Fri, 5 Sep 2025 15:09:32 -0700 Subject: [PATCH 5/6] modifying output --- .../defined_io/llvm-project-issue-154979.reference_output | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output index cd8af6e765..ab19e4359b 100644 --- a/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output +++ b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output @@ -1,3 +1,3 @@ 10 12 -exit 0 + From ffefa30f210a8b9a9023f01acddac23ce5a7b632 Mon Sep 17 00:00:00 2001 From: Andre Kuhlenschmidt Date: Fri, 5 Sep 2025 16:42:07 -0700 Subject: [PATCH 6/6] update output --- .../defined_io/llvm-project-issue-154979.reference_output | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output index ab19e4359b..0e89553937 100644 --- a/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output +++ b/Fortran/UnitTests/defined_io/llvm-project-issue-154979.reference_output @@ -1,3 +1,3 @@ -10 -12 - + 10 + 12 +exit 0