re PR libfortran/34974 (null bytes when reverse-tabbing long records (regression vs. g77))

2008-02-20  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libfortran/34974
	* gfortran.dg/fmt_t_7.f: New test.

	PR libfortran/35132
	* gfortran.dg/streamio_15.f90: New test.

From-SVN: r132513
This commit is contained in:
Jerry DeLisle 2008-02-21 02:33:17 +00:00
parent e32883d1a2
commit 163b0163e6
3 changed files with 61 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2008-02-20 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/34974
* gfortran.dg/fmt_t_7.f: New test.
PR libfortran/35132
* gfortran.dg/streamio_15.f90: New test.
2008-02-20 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/35036

View File

@ -0,0 +1,16 @@
! { dg-do run }
! PR34974 null bytes when reverse-tabbing long records
! Test case prpared by Jerry DeLisle <jvdelisle@gcc.gnu.org>
program test
character(1) :: a, b, c
write (10,'(t50000,a,t1,a)') 'b', 'a'
close (10)
open (10, access="stream")
read (10, pos=1) a
read (10, pos=50000) b
read (10, pos=25474) c
close (10, status="delete")
if (a /= "a") call abort
if (b /= "b") call abort
if (c /= " ") call abort
end

View File

@ -0,0 +1,37 @@
! { dg-do run }
! PR35132 Formatted stream I/O write should truncate.
! Test case adapted from PR by Jerry DeLisle <jvdelisle@gcc.gnu.org>
program main
implicit none
character(len=6) :: c
integer :: i
open(20,file="foo.txt",form="formatted",access="stream")
write(20,'(A)') '123456'
write(20,'(A)') 'abcdef'
write(20,'(A)') 'qwerty'
rewind 20
! Skip over the first line
read(20,'(A)') c
if (c.ne.'123456') call abort
! Save the position
inquire(20,pos=i)
if (i.ne.8) call abort
! Read in the complete line...
read(20,'(A)') c
if (c.ne.'abcdef') call abort
! Write out the first four characters
write(20,'(A)',pos=i,advance="no") 'ASDF'
! Fill up the rest of the line. Here, we know the length. If we
! don't, things will be a bit more complicated.
write(20,'(A)') c(5:6)
! Copy the file to standard output
rewind 20
c = ""
read(20,'(A)') c
if (c.ne.'123456') call abort
read(20,'(A)') c
if (c.ne.'ASDFef') call abort
read(20,'(A)', iostat=i) c
if (i /= -1) call abort
close (20, status="delete")
end program main