[PATCH] Fix PR119136 Printing result of function that prints itself hangs

Jerry D jvdelisle2@gmail.com
Sat Jan 3 01:57:22 GMT 2026


On 1/2/26 4:59 PM, Jakub Jelinek wrote:
> On Thu, Jan 01, 2026 at 01:43:50PM -0800, Jerry D wrote:
>> On 1/1/26 1:33 PM, Thomas Koenig wrote:
>>>> This will avoid potential undefined behavior on various systems. I
>>>> will make this change and test. If passes, OK for mainline?
>>>
>>> Good thinking.
>>>
>>> Your revised version is OK if it passes.
>>>
>>> Thanks a lot for the patch!
>>>
>>> Best regards
>>>
>>>       Thomas
>>>
>>
>> Pushed:
>>
>> commit 489423763d3c8b84d3409f4b200fb6b19ad96db3 (HEAD -> master,
>> origin/master, origin/HEAD)
>> Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
>> Date:   Tue Dec 30 14:46:35 2025 -0800
>>
>>      Fortran: Generate a runtime error on recursive I/O
>>
>>              PR libfortran/119136
> 
> This broke a lot of libgomp tests on all major targets.
> Compare e.g.
> https://gcc.gnu.org/pipermail/gcc-testresults/2026-January/866363.html
> and
> https://gcc.gnu.org/pipermail/gcc-testresults/2026-January/866375.html
> FAIL: libgomp.fortran/appendix-a/a.2.1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL: libgomp.fortran/appendix-a/a.22.8.f90   -O0  execution test
> FAIL: libgomp.fortran/appendix-a/a.22.8.f90   -O1  execution test
> FAIL: libgomp.fortran/appendix-a/a.22.8.f90   -O2  execution test
> FAIL: libgomp.fortran/appendix-a/a.22.8.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.1.f90   -O0  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.1.f90   -O2  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.1.f90   -O3 -g  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.1.f90   -Os  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.2.f90   -O0  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.2.f90   -O1  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.2.f90   -O2  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.2.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.2.f90   -Os  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.3.f90   -O0  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.3.f90   -O1  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.3.f90   -O2  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.3.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.3.f90   -O3 -g  execution test
> FAIL: libgomp.fortran/appendix-a/a.28.3.f90   -Os  execution test
> FAIL: libgomp.fortran/depend-4.f90   -O  execution test
> FAIL: libgomp.fortran/omp_hello.f   -O  execution test
> FAIL: libgomp.fortran/omp_orphan.f   -O  execution test
> FAIL: libgomp.fortran/omp_workshare1.f   -O  execution test
> FAIL: libgomp.fortran/omp_workshare2.f   -O  execution test
> FAIL: libgomp.fortran/recursion1.f90   -O0  execution test
> FAIL: libgomp.fortran/recursion1.f90   -O1  execution test
> FAIL: libgomp.fortran/recursion1.f90   -O2  execution test
> FAIL: libgomp.fortran/recursion1.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL: libgomp.fortran/recursion1.f90   -O3 -g  execution test
> FAIL: libgomp.fortran/recursion1.f90   -Os  execution test
> FAIL: libgomp.fortran/rwlock_2.f90   -O0  execution test
> FAIL: libgomp.fortran/rwlock_2.f90   -O1  execution test
> FAIL: libgomp.fortran/rwlock_2.f90   -O2  execution test
> FAIL: libgomp.fortran/rwlock_2.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  execution test
> FAIL: libgomp.fortran/rwlock_2.f90   -O3 -g  execution test
> FAIL: libgomp.fortran/rwlock_2.f90   -Os  execution test
> all the errors in the logs look like
>   1: THREAD#            1 X =            5
>   2: THREAD#            0 X =            5
> At line 19 of file /home/jakub/src/gcc/libgomp/testsuite/libgomp.fortran/appendix-a/a.2.1.f90 (unit = 6, file = 'stdout')
> Fortran runtime error: Recursive I/O not allowed
> 
> Error termination. Backtrace:
> #0  0xf7e464b0 in data_transfer_init
>          at ../../../libgfortran/io/transfer.c:3132
> #1  0x8048457 in ???
> #2  0xf7a7da32 in gomp_thread_start
>          at ../../../libgomp/team.c:129
> #3  0xf78a51df in ???
> #4  0xf792b2d7 in ???
> #5  0xffffffff in ???
> 
> Recursive I/O shouldn't indeed be allowed, but multiple threads
> trying to transfer concurrently should be fine (of course, locking
> should be used for that).
> 
> 	Jakub
> 

commit e6c378fa5200cd8eb8b4356ef33e88fd13ee5436 (HEAD -> master, origin/master, 
origin/HEAD)
Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date:   Fri Jan 2 17:44:05 2026 -0800

     Revert "Fortran: Generate a runtime error on recursive I/O"

     This reverts commit 489423763d3c8b84d3409f4b200fb6b19ad96db3.

I decided it best to revert until a better way is figured out.

See also https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123106 which may be the 
right way.

Jerry


More information about the Fortran mailing list