https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98825
--- Comment #3 from max.pd at gmx dot de --- Here some details to outline the issue: The problem is affecting 1) "gcc/libgfortran/io/format.c" 2) "gcc/libgfortran/io/transfer.c" of the gcc source tree. The feature, implemented as FMT_DOLLAR can be found in "format.c" (lines 794 to 798) 794: case FMT_DOLLAR: 795: get_fnode (fmt, &head, &tail, FMT_DOLLAR); 796: tail->repeat = 1; 797: notify_std (&dtp->common, GFC_STD_GNU, "Extension: $ descriptor"); 798: goto between_desc; --> calling "get_fnode" with FMT_DOLLAR in "format.c" (lines 215-242) 215: get_fnode (format_data *fmt, fnode **head, fnode **tail, format_token t) 216: { 217: fnode *f; ... 238: f->format = t; ... 241: return f; 242: } f->format is disposed in "transfer.c" (lines 1470-1822) 1462: t = f->format; ... 1470: switch (t) 1471: { ... 1799: case FMT_DOLLAR: 1800: consume_data_flag = 0; 1801: dtp->u.p.seen_dollar = 1; 1802: break; ... 1822: } u.p.seen_dollar for its part determins u.p.eor_condition = 1 in "transfer.c" (lines 399-400) 399: if (dtp->u.p.advance_status == ADVANCE_NO || dtp->u.p.seen_dollar) 400: dtp->u.p.eor_condition = 1; This is the unexpected behavior put forth in this thread. The '$' feature of a format expression affects only the end of output, like the ADVANCE="NO" parameter to the WRITE statement. So on repeated output, as produced by multiple records given to a PRINT or WRITE statement, there is still an unexpected line break on each record except the last one. (record is here a set of input values in the format expression) Yet, in next_record_cc implemented in "transfer.c" (lines 3848 to 3870) we find no regard of the dtp->u.p.seen_dollar setting that would lead to the suppression of a Carriage Return, as it might be expected when using the '$' feature in a format expression 3851: static void 3852: next_record_cc (st_parameter_dt *dtp) 3853: { ... 3865: /* Output CR for the first character with default CC setting. */ 3866: *(p++) = dtp->u.p.cc.u.end; 3867: if (dtp->u.p.cc.len > 1) 3868: *p = dtp->u.p.cc.u.end; ... 3870: } Conclusion: It should be possible to patch the code here, leading to a more convenient behavior for the '$' format extension.