+2017-12-03 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/831916
+ * gfortran.dg/namelist_95.f90: New test.
+
2017-12-01 Jan Hubicka <hubicka@ucw.cz>
PR target/81616
--- /dev/null
+! { dg-do run }
+! PR83191 Writing a namelist with repeated complex
+
+program test
+
+implicit none
+
+integer, parameter :: UNIT = 1
+character(len=8), parameter :: FILE = "namelist"
+
+complex, dimension(3) :: a = (/ (0.0, 0.0), (0.0, 0.0), (3.0, 4.0) /)
+
+namelist /complex_namelist/ a
+
+open(UNIT, file=FILE)
+write(UNIT, nml=complex_namelist)
+close(UNIT)
+
+open(UNIT, file=FILE)
+read(UNIT, nml=complex_namelist)
+close(UNIT, status="delete")
+if (any(a.ne.(/ (0.0, 0.0), (0.0, 0.0), (3.0, 4.0) /))) call abort
+end program test
+2017-12-03 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ PR libgfortran/83191
+ * io/transfer.c (list_formatted_read_scalar): Do not set
+ namelist_mode bit here. (namelist_read): Likewise.
+ (data_transfer_init): Clear the mode bit here.
+ (finalize_transfer): Do set the mode bit just before any calls
+ to namelist_read or namelist_write. It can now be referred to
+ in complex_write.
+ ^ io/write.c (write_complex): Suppress the leading blanks when
+ namelist_mode bit is not set to 1.
+
2017-12-02 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/83225
int c, i, m;
int err = 0;
- dtp->u.p.namelist_mode = 0;
-
/* Set the next_char and push_char worker functions. */
set_workers (dtp);
name. */
namelist_info *prev_nl = NULL;
- dtp->u.p.namelist_mode = 1;
dtp->u.p.input_complete = 0;
dtp->u.p.expanded_read = 0;
dtp->u.p.ionml = ionml;
dtp->u.p.mode = read_flag ? READING : WRITING;
-
+ dtp->u.p.namelist_mode = 0;
dtp->u.p.cc.len = 0;
if ((dtp->common.flags & IOPARM_LIBRETURN_MASK) != IOPARM_LIBRETURN_OK)
if ((dtp->u.p.ionml != NULL)
&& (cf & IOPARM_DT_HAS_NAMELIST_NAME) != 0)
{
+ dtp->u.p.namelist_mode = 1;
if ((cf & IOPARM_DT_NAMELIST_READ_MODE) != 0)
namelist_read (dtp);
else
precision, buf_size, result1, &res_len1);
get_float_string (dtp, &f, source + size / 2 , kind, 0, buffer,
precision, buf_size, result2, &res_len2);
- lblanks = width - res_len1 - res_len2 - 3;
-
- write_x (dtp, lblanks, lblanks);
+ if (!dtp->u.p.namelist_mode)
+ {
+ lblanks = width - res_len1 - res_len2 - 3;
+ write_x (dtp, lblanks, lblanks);
+ }
write_char (dtp, '(');
write_float_string (dtp, result1, res_len1);
write_char (dtp, semi_comma);