On 7/8/26 19:55, Jerry D wrote:
See attached patch.
Regression tested on x86_64.
OK for mainline.
Yes, this is OK. Thanks for the patch!
Harald
Regards,
Jerry
---
fortran: [PR126116] Internal file I/O corrupts NEWUNIT state
Before this fix, Performing an internal file I/O
(such as WRITE to a character variable) incorrectly corrupts
the internal unit management table in libgfortran.
This patch adds a bool to the gfc_unit structure to allow
tracking whether a gfc_unit was created for purposes of
internal I/O to avoid the breakage.
PR libfortran/126116
libgfortran/ChangeLog:
* io/io.h (struct gfc_unit): Add bool for tracking.
Fix some white space problems.
* io/unit.c (close_unit_1): Add a declaration for this
function so it can be called before it has been defined.
Use the new bool.
(is_internal_reserved): New helper function. Returns true
only if the unit is not null and the internal unit kind is
zero
meaning its not a character string.
(find_unit): Use the new helper function
(find_or_create_unit): Use the new helper.
(get_unit): Set the new bool.
(close_unit): Update the close_unit_1 argument list.
(close_units): Likewise.
gcc/testsuite/ChangeLog:
* gfortran.dg/pr126116.f90: New test.