libgfortran: Fix unwanted end-of-record by checking if seen_dollar.

libgfortran/ChangeLog:

	PR libfortran/98825
	* io/transfer.c (next_record_w): Insert check for seen_dollar and if
	so, skip issueing next record.

gcc/testsuite/ChangeLog:

	PR libfortran/98825
	* gfortran.dg/dollar_edit_descriptor_4.f: New test.
This commit is contained in:
Jerry DeLisle 2021-02-10 19:37:52 -08:00
parent 27a804bc62
commit 19c0232410
2 changed files with 18 additions and 0 deletions

View File

@ -0,0 +1,16 @@
! { dg-do run }
! { dg-options "-std=gnu" }
! PR98825 Test for fix of '$' edit descriptor.
character(30) :: line
10 format (i3,$)
open(10, status='scratch')
write (10,10) 1
write (10,10) 2,3,4,5
! Check the result.
line = 'abcdefg'
rewind(10)
read(10, '(a)') line
close(10)
if (line .ne. ' 1 2 3 4 5') call abort
end

View File

@ -4020,6 +4020,8 @@ next_record_w (st_parameter_dt *dtp, int done)
}
}
}
else if (dtp->u.p.seen_dollar == 1)
break;
/* Handle legacy CARRIAGECONTROL line endings. */
else if (dtp->u.p.current_unit->flags.cc == CC_FORTRAN)
next_record_cc (dtp);