aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/complex_write.f9015
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/transfer.c16
4 files changed, 34 insertions, 8 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6e3c262..f504598 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-12-23 Bud Davis <bdavis9659@comcast.net>
+
+ PR fortran/19071
+ * gfortran.dg/complex_write.f90: New test.
+
2004-12-23 Mark Mitchell <mark@codesourcery.com>
PR c++/17595
diff --git a/gcc/testsuite/gfortran.dg/complex_write.f90 b/gcc/testsuite/gfortran.dg/complex_write.f90
new file mode 100644
index 0000000..3b73ba3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/complex_write.f90
@@ -0,0 +1,15 @@
+! { dg-do run }
+! pr 19071
+! test case provided by
+! Thomas.Koenig@online.de
+ program cio
+ complex a
+ real r1,r2
+ a = cmplx(1.0, 2.0)
+ open(unit=74,status='scratch')
+ write(74,'(1P,E13.5)'),a
+ rewind(74)
+! can read the complex in as two reals, one on each line
+ read(74,'(E13.5)')r1,r2
+ if (r1.ne.1.0 .and. r2.ne.2.0) call abort
+ end
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 452bb4a..749f5a3 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-23 Bud Davis <bdavis9659@comcast.net>
+
+ PR fortran/19071
+ * io/tranfer.c (formatted_transfer): moved check for
+ format reversion inside the processing loop.
+
2004-12-19 Aaron W. LaFramboise <aaronavay62@aaronwl.com>
PR libfortran/19074
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index c3daa21..fb67304 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -425,16 +425,16 @@ formatted_transfer (bt type, void *p, int len)
if (type == BT_COMPLEX)
type = BT_REAL;
- /* If reversion has occurred and there is another real data item,
- then we have to move to the next record. */
-
- if (g.reversion_flag && n > 0)
- {
- g.reversion_flag = 0;
- next_record (0);
- }
for (;;)
{
+ /* If reversion has occurred and there is another real data item,
+ then we have to move to the next record. */
+ if (g.reversion_flag && n > 0)
+ {
+ g.reversion_flag = 0;
+ next_record (0);
+ }
+
consume_data_flag = 1 ;
if (ioparm.library_return != LIBRARY_OK)
break;