This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/33307] New: I/O read/positioning problem
- From: "anlauf at gmx dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Sep 2007 19:58:40 -0000
- Subject: [Bug fortran/33307] New: I/O read/positioning problem
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The attached program exhibits a strange problem with gfortran
when repeatedly trying to position within an input file,
and which I have been hunting for a long time.
The program is supposed to work as follows:
- open input file
- do
- rewind
- repeatedly search for lines containing a special text
- end do
The program always succeeds in finding the occurence of the
first text, but fails to find the second text if the first
text does *not* occur on the first text line.
Example 1:
% cat gfcbug69.nml
! ***Remove this line***
&FOO file='foo' /
&BAR file='bar' /
% gfc -g -Wall -std=f2003 gfcbug69.f90
% ./a.out
inquire: after OPEN: position = ASIS nextrec = 0
------------------------------------------------------------------
inquire: after REWIND: position = REWIND nextrec = 0
position_nml: Scanning for: FOO
position_nml: SUCCESS! line= &FOO file='foo' /
inquire: after position_nml: position = ASIS nextrec = 0
*** Found: &FOO file='foo' /
position_nml: Scanning for: FOO
position_nml: FAIL: ios= -1
inquire: after position_nml: position = APPEND nextrec = 0
------------------------------------------------------------------
inquire: after REWIND: position = REWIND nextrec = 0
position_nml: Scanning for: BAR
position_nml: FAIL: ios= -1
inquire: after position_nml: position = REWIND nextrec = 0
------------------------------------------------------------------
Removing the indicated line from the text file leads to:
% ./a.out
inquire: after OPEN: position = ASIS nextrec = 0
------------------------------------------------------------------
inquire: after REWIND: position = REWIND nextrec = 0
position_nml: Scanning for: FOO
position_nml: SUCCESS! line= &FOO file='foo' /
inquire: after position_nml: position = REWIND nextrec = 0
*** Found: &FOO file='foo' /
position_nml: Scanning for: FOO
position_nml: FAIL: ios= -1
inquire: after position_nml: position = APPEND nextrec = 0
------------------------------------------------------------------
inquire: after REWIND: position = REWIND nextrec = 0
position_nml: Scanning for: BAR
position_nml: SUCCESS! line= &BAR file='bar' /
inquire: after position_nml: position = ASIS nextrec = 0
*** Found: &BAR file='bar' /
position_nml: Scanning for: BAR
position_nml: FAIL: ios= -1
inquire: after position_nml: position = ASIS nextrec = 0
------------------------------------------------------------------
Comparing the two results shows:
% diff -u out.fail out.success
--- out.fail 2007-09-04 21:31:22.000000000 +0200
+++ out.success 2007-09-04 21:31:14.000000000 +0200
@@ -4,7 +4,7 @@
position_nml: Scanning for: FOO
position_nml: SUCCESS! line= &FOO file='foo' /
-inquire: after position_nml: position = ASIS nextrec = 0
+inquire: after position_nml: position = REWIND nextrec = 0
*** Found: &FOO file='foo' /
@@ -15,6 +15,12 @@
inquire: after REWIND: position = REWIND nextrec = 0
position_nml: Scanning for: BAR
+position_nml: SUCCESS! line= &BAR file='bar' /
+inquire: after position_nml: position = ASIS nextrec = 0
+
+ *** Found: &BAR file='bar' /
+
+position_nml: Scanning for: BAR
position_nml: FAIL: ios= -1
-inquire: after position_nml: position = REWIND nextrec = 0
+inquire: after position_nml: position = ASIS nextrec = 0
------------------------------------------------------------------
For some reason the file position after attempting to find the second
text is still "REWIND". This may only be a cosmetic problem, but
it could be a hint towards the source of the problem.
--
Summary: I/O read/positioning problem
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: anlauf at gmx dot de
GCC host triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33307