* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
@ 2022-09-25 19:21 ` anlauf at gcc dot gnu.org
2022-09-25 19:46 ` kargl at gcc dot gnu.org
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: anlauf at gcc dot gnu.org @ 2022-09-25 19:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
anlauf at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|fortran |libfortran
Ever confirmed|0 |1
Keywords| |wrong-code
Status|UNCONFIRMED |NEW
Last reconfirmed| |2022-09-25
--- Comment #1 from anlauf at gcc dot gnu.org ---
Confirmed.
It appears that this issue exists since 2005.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
2022-09-25 19:21 ` [Bug libfortran/107031] " anlauf at gcc dot gnu.org
@ 2022-09-25 19:46 ` kargl at gcc dot gnu.org
2022-09-25 20:07 ` anlauf at gcc dot gnu.org
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: kargl at gcc dot gnu.org @ 2022-09-25 19:46 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kargl at gcc dot gnu.org
Status|NEW |WAITING
--- Comment #2 from kargl at gcc dot gnu.org ---
gfortran's current behavior is correct.
12.3.4.4 File position after data transfer
In all other cases, the file is positioned after the record just
read or written and that record becomes the preceding record.
12.8.3 ENDFILE statement
Execution of an ENDFILE statement for a file connected for sequential
access writes an endfile record as the next record of the file.
After reading '5', the file is position at the record that contains '6'.
So, ENDIFLE writes the endfile record after the record with '6'.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
2022-09-25 19:21 ` [Bug libfortran/107031] " anlauf at gcc dot gnu.org
2022-09-25 19:46 ` kargl at gcc dot gnu.org
@ 2022-09-25 20:07 ` anlauf at gcc dot gnu.org
2022-09-25 20:56 ` kargl at gcc dot gnu.org
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: anlauf at gcc dot gnu.org @ 2022-09-25 20:07 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
--- Comment #3 from anlauf at gcc dot gnu.org ---
(In reply to kargl from comment #2)
> gfortran's current behavior is correct.
>
>
> 12.3.4.4 File position after data transfer
>
> In all other cases, the file is positioned after the record just
> read or written and that record becomes the preceding record.
>
> 12.8.3 ENDFILE statement
>
> Execution of an ENDFILE statement for a file connected for sequential
> access writes an endfile record as the next record of the file.
>
> After reading '5', the file is position at the record that contains '6'.
> So, ENDIFLE writes the endfile record after the record with '6'.
Hmm, interpretation of text?
I read "as the next record", not "after the next record".
gfortran differs here from Intel, NAG, Nvidia, AMD Flang, Crayftn.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (2 preceding siblings ...)
2022-09-25 20:07 ` anlauf at gcc dot gnu.org
@ 2022-09-25 20:56 ` kargl at gcc dot gnu.org
2022-09-26 0:18 ` sgk at troutmask dot apl.washington.edu
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: kargl at gcc dot gnu.org @ 2022-09-25 20:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
--- Comment #4 from kargl at gcc dot gnu.org ---
(In reply to anlauf from comment #3)
> (In reply to kargl from comment #2)
> > gfortran's current behavior is correct.
> >
> >
> > 12.3.4.4 File position after data transfer
> >
> > In all other cases, the file is positioned after the record just
> > read or written and that record becomes the preceding record.
> >
> > 12.8.3 ENDFILE statement
> >
> > Execution of an ENDFILE statement for a file connected for sequential
> > access writes an endfile record as the next record of the file.
> >
> > After reading '5', the file is position at the record that contains '6'.
> > So, ENDIFLE writes the endfile record after the record with '6'.
>
> Hmm, interpretation of text?
>
> I read "as the next record", not "after the next record".
>
> gfortran differs here from Intel, NAG, Nvidia, AMD Flang, Crayftn.
If the current record contain '6', the next record contains '7'.
'next' does not mean 'current' in the English language. It means
something that 'follows'.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (3 preceding siblings ...)
2022-09-25 20:56 ` kargl at gcc dot gnu.org
@ 2022-09-26 0:18 ` sgk at troutmask dot apl.washington.edu
2022-09-26 14:33 ` kargl at gcc dot gnu.org
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: sgk at troutmask dot apl.washington.edu @ 2022-09-26 0:18 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
--- Comment #5 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Sun, Sep 25, 2022 at 08:56:22PM +0000, kargl at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
>
> --- Comment #4 from kargl at gcc dot gnu.org ---
> (In reply to anlauf from comment #3)
> > (In reply to kargl from comment #2)
> > > gfortran's current behavior is correct.
> > >
> > >
> > > 12.3.4.4 File position after data transfer
> > >
> > > In all other cases, the file is positioned after the record just
> > > read or written and that record becomes the preceding record.
> > >
> > > 12.8.3 ENDFILE statement
> > >
> > > Execution of an ENDFILE statement for a file connected for sequential
> > > access writes an endfile record as the next record of the file.
> > >
> > > After reading '5', the file is position at the record that contains '6'.
> > > So, ENDIFLE writes the endfile record after the record with '6'.
> >
> > Hmm, interpretation of text?
> >
> > I read "as the next record", not "after the next record".
> >
> > gfortran differs here from Intel, NAG, Nvidia, AMD Flang, Crayftn.
>
> If the current record contain '6', the next record contains '7'.
> 'next' does not mean 'current' in the English language. It means
> something that 'follows'.
>
Further confusion, maybe?
12.3.4 File position
12.3.4.1 General
...
Let n be the number of records in the file.
...
If 1 <= i < n and a file is positioned within the ith record or
between the ith and (i + 1)th record, the (i + 1)th record is the
next record.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (4 preceding siblings ...)
2022-09-26 0:18 ` sgk at troutmask dot apl.washington.edu
@ 2022-09-26 14:33 ` kargl at gcc dot gnu.org
2024-03-26 0:13 ` urbanjost at comcast dot net
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: kargl at gcc dot gnu.org @ 2022-09-26 14:33 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
--- Comment #6 from kargl at gcc dot gnu.org ---
(In reply to anlauf from comment #3)
> (In reply to kargl from comment #2)
> > gfortran's current behavior is correct.
> >
> >
> > 12.3.4.4 File position after data transfer
> >
> > In all other cases, the file is positioned after the record just
> > read or written and that record becomes the preceding record.
> >
> > 12.8.3 ENDFILE statement
> >
> > Execution of an ENDFILE statement for a file connected for sequential
> > access writes an endfile record as the next record of the file.
> >
> > After reading '5', the file is position at the record that contains '6'.
> > So, ENDIFLE writes the endfile record after the record with '6'.
>
> Hmm, interpretation of text?
>
Yes, it is interpretation.
Let <R> denote the start of record and </R> the end of the record.
One has
<R>5</R><R>6</R><R>7</R>
After reading '5', the file is positioned to after that record. If * denotes
the current file, then one can have
<R>5</R>*<R>6</R> or <R>5</R><R>*6</R>
Both meet the requirement of 12.3.4.4. Now by 12.8.3, the endfile will give
<R>5</R>EOF
while the latter would give
<R>5</R><R>*6</R>EOF.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (5 preceding siblings ...)
2022-09-26 14:33 ` kargl at gcc dot gnu.org
@ 2024-03-26 0:13 ` urbanjost at comcast dot net
2024-03-26 0:38 ` jvdelisle at gcc dot gnu.org
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: urbanjost at comcast dot net @ 2024-03-26 0:13 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
urbanjost at comcast dot net changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |urbanjost at comcast dot net
--- Comment #7 from urbanjost at comcast dot net ---
FYI: A parallel discussion of this issue came to the consensus that the file
should be truncating to five lines, not six. The conversation included members
of the Fortran Standards Committee.
https://fortran-lang.discourse.group/t/clarification-on-expected-behavior-of-endfile/
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (6 preceding siblings ...)
2024-03-26 0:13 ` urbanjost at comcast dot net
@ 2024-03-26 0:38 ` jvdelisle at gcc dot gnu.org
2024-03-26 1:51 ` jvdelisle at gcc dot gnu.org
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-03-26 0:38 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
Assignee|unassigned at gcc dot gnu.org |jvdelisle at gcc dot gnu.org
CC| |jvdelisle at gcc dot gnu.org
--- Comment #8 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Thankyou for information, I will take a look.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (7 preceding siblings ...)
2024-03-26 0:38 ` jvdelisle at gcc dot gnu.org
@ 2024-03-26 1:51 ` jvdelisle at gcc dot gnu.org
2024-03-27 0:17 ` cvs-commit at gcc dot gnu.org
2024-04-10 2:41 ` jvdelisle at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-03-26 1:51 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
--- Comment #9 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
The following trivial patch changes gfortran behavior and regression tests Ok
on x86_64.
I will see if I can come up with a test case to catch this.
diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c
index 2bc05b293f8..d169961f997 100644
--- a/libgfortran/io/file_pos.c
+++ b/libgfortran/io/file_pos.c
@@ -352,7 +352,6 @@ st_endfile (st_parameter_filepos *fpp)
dtp.common = fpp->common;
memset (&dtp.u.p, 0, sizeof (dtp.u.p));
dtp.u.p.current_unit = u;
- next_record (&dtp, 1);
}
unit_truncate (u, stell (u->s), &fpp->common);
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (8 preceding siblings ...)
2024-03-26 1:51 ` jvdelisle at gcc dot gnu.org
@ 2024-03-27 0:17 ` cvs-commit at gcc dot gnu.org
2024-04-10 2:41 ` jvdelisle at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-03-27 0:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jerry DeLisle <jvdelisle@gcc.gnu.org>:
https://gcc.gnu.org/g:41e767c482fc903ca5d54014b034c7526dbf8f1c
commit r14-9681-g41e767c482fc903ca5d54014b034c7526dbf8f1c
Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date: Tue Mar 26 16:44:17 2024 -0700
libgfortran: Fix file position after ENDFILE statement.
PR libfortran/107031
libgfortran/ChangeLog:
* io/file_pos.c (st_endfile): Remove call to next_record().
gcc/testsuite/ChangeLog:
* gfortran.dg/endfile_5.f90: New test.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug libfortran/107031] endfile truncates file at wrong position
2022-09-25 6:34 [Bug fortran/107031] New: endfile truncates file at wrong position kishore96 at gmail dot com
` (9 preceding siblings ...)
2024-03-27 0:17 ` cvs-commit at gcc dot gnu.org
@ 2024-04-10 2:41 ` jvdelisle at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: jvdelisle at gcc dot gnu.org @ 2024-04-10 2:41 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107031
Jerry DeLisle <jvdelisle at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|NEW |RESOLVED
--- Comment #11 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> ---
Fixed on trunk, closing.
^ permalink raw reply [flat|nested] 12+ messages in thread