Re: [PATCH] Fortran: Fix FMT_X/TR output into already-written content, [PR114618]
Jerry D <[email protected]> Mon, 15 Jun 2026 10:44:00 -0700
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
Disregard this effort, I am back to doing things the old fashioned way On 6/14/26 10:05 PM, Jerry D wrote: > See attached patch which cleans up I hope the last of the tabbing issues in > formatted output. I renamed the existing test case and created a new one to > test several variations. > > Comments appreciated. > > Regression tested on X86_64. > > Ok for mainline? No plans to backport unless someone thinks its needed. > > Best regards, > > Jerry > > --- > > When an X or TR edit descriptor advances the file position into > content that has already been written (e.g. after a backward T or > TL tab), formatted_transfer_scalar_write either corrupted the > pending_spaces accounting or overwrote the existing characters with > blanks. > > Fix this by detecting the case where pending_spaces is negative and > skips is positive (the advance falls within already-written content) > and using write_x (skips, 0) to move the file position forward > without overwriting. Also, for stream I/O, compute bytes_used from > fbuf->pos (the current write position) rather than fbuf->act (the > high-water mark), since the two diverge after a backward tab followed > by a partial overwrite, which previously prevented this case from > being detected for stream units. > > Assisted by: Claude Sonnet 4.6 > > PR libfortran/114618 > > libgfortran/ChangeLog: > > * io/transfer.c (formatted_transfer_scalar_write): Use > fbuf->pos rather than fbuf->act for bytes_used with stream > I/O. When pending_spaces is negative and skips is positive, > advance the position with write_x (skips, 0) instead of > overwriting existing content. > > gcc/testsuite/ChangeLog: > > * gfortran.dg/pr114618.f90: Move to... > * gfortran.dg/fmt_t_10.f90: ...here. > * gfortran.dg/fmt_t_11.f90: New test. > ---