diff options
Diffstat (limited to 'gcc/testsuite/gfortran.dg/direct_io_1.f90')
-rw-r--r-- | gcc/testsuite/gfortran.dg/direct_io_1.f90 | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/direct_io_1.f90 b/gcc/testsuite/gfortran.dg/direct_io_1.f90 new file mode 100644 index 000000000..96ae49035 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/direct_io_1.f90 @@ -0,0 +1,32 @@ +! { dg-do run } +! PR 16908 +! Segfaulted on second set of writes. We weren't handling partial records +! properly when calculating the file position. +program direct_io_1 + implicit none + + integer n, nt, mt, m + real dt, tm, w + real, allocatable :: p(:) + + nt = 2049 ! if nt < 2049, then everything works. + + allocate(p(nt)) + p = 0.e0 + + inquire(iolength=mt) (p(m), m=1, nt) + + open(unit=12, file='syn.sax', access='direct', recl=mt) + n = 1 + write(12, rec=n) mt, nt + write(12, rec=n+1) (p(m), m=1, nt) + close(12) + + inquire(iolength=mt) (p(m), m=1, nt) + + open(unit=12, file='syn.sax', access='direct', recl=mt) + n = 1 + write(12, rec=n) mt, nt + write(12, rec=n+1) (p(m), m=1, nt) + close(12, status='delete') +end program |