diff options
author | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2018-07-31 08:42:21 +0000 |
---|---|---|
committer | Andre Vieira <avieira@gcc.gnu.org> | 2018-07-31 08:42:21 +0000 |
commit | 1d4a51cf5079c11a44126bf7d5cf63fd9b202fbd (patch) | |
tree | b84d7bd3f44ac09a6d9dee531a4e6509440ef56a /libgomp | |
parent | 58691d4a04c2c8d81298441a7621e6e6df69b21a (diff) | |
download | gcc-1d4a51cf5079c11a44126bf7d5cf63fd9b202fbd.zip gcc-1d4a51cf5079c11a44126bf7d5cf63fd9b202fbd.tar.gz gcc-1d4a51cf5079c11a44126bf7d5cf63fd9b202fbd.tar.bz2 |
Reverting 'AsyncI/O patch committed' as it is breaking bare-metal builds.
2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com>
Revert 'AsyncI/O patch committed'
2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org>
Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/25829
* gfortran.texi: Add description of asynchronous I/O.
* trans-decl.c (gfc_finish_var_decl): Treat asynchronous variables
as volatile.
* trans-io.c (gfc_build_io_library_fndecls): Rename st_wait to
st_wait_async and change argument spec from ".X" to ".w".
(gfc_trans_wait): Pass ID argument via reference.
2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com>
Revert 'AsyncI/O patch committed'
2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org>
Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/25829
* gfortran.dg/f2003_inquire_1.f03: Add write statement.
* gfortran.dg/f2003_io_1.f03: Add wait statement.
2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com>
Revert 'AsyncI/O patch committed'
2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org>
Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/25829
* Makefile.am: Add async.c to gfor_io_src.
Add async.h to gfor_io_headers.
* Makefile.in: Regenerated.
* gfortran.map: Add _gfortran_st_wait_async.
* io/async.c: New file.
* io/async.h: New file.
* io/close.c: Include async.h.
(st_close): Call async_wait for an asynchronous unit.
* io/file_pos.c (st_backspace): Likewise.
(st_endfile): Likewise.
(st_rewind): Likewise.
(st_flush): Likewise.
* io/inquire.c: Add handling for asynchronous PENDING
and ID arguments.
* io/io.h (st_parameter_dt): Add async bit.
(st_parameter_wait): Correct.
(gfc_unit): Add au pointer.
(st_wait_async): Add prototype.
(transfer_array_inner): Likewise.
(st_write_done_worker): Likewise.
* io/open.c: Include async.h.
(new_unit): Initialize asynchronous unit.
* io/transfer.c (async_opt): New struct.
(wrap_scalar_transfer): New function.
(transfer_integer): Call wrap_scalar_transfer to do the work.
(transfer_real): Likewise.
(transfer_real_write): Likewise.
(transfer_character): Likewise.
(transfer_character_wide): Likewise.
(transfer_complex): Likewise.
(transfer_array_inner): New function.
(transfer_array): Call transfer_array_inner.
(transfer_derived): Call wrap_scalar_transfer.
(data_transfer_init): Check for asynchronous I/O.
Perform a wait operation on any pending asynchronous I/O
if the data transfer is synchronous. Copy PDT and enqueue
thread for data transfer.
(st_read_done_worker): New function.
(st_read_done): Enqueue transfer or call st_read_done_worker.
(st_write_done_worker): New function.
(st_write_done): Enqueue transfer or call st_read_done_worker.
(st_wait): Document as no-op for compatibility reasons.
(st_wait_async): New function.
* io/unit.c (insert_unit): Use macros LOCK, UNLOCK and TRYLOCK;
add NOTE where necessary.
(get_gfc_unit): Likewise.
(init_units): Likewise.
(close_unit_1): Likewise. Call async_close if asynchronous.
(close_unit): Use macros LOCK and UNLOCK.
(finish_last_advance_record): Likewise.
(newunit_alloc): Likewise.
* io/unix.c (find_file): Likewise.
(flush_all_units_1): Likewise.
(flush_all_units): Likewise.
* libgfortran.h (generate_error_common): Add prototype.
* runtime/error.c: Include io.h and async.h.
(generate_error_common): New function.
2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com>
Revert 'AsyncI/O patch committed'.
2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org>
Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/25829
* testsuite/libgomp.fortran/async_io_1.f90: New test.
* testsuite/libgomp.fortran/async_io_2.f90: New test.
* testsuite/libgomp.fortran/async_io_3.f90: New test.
* testsuite/libgomp.fortran/async_io_4.f90: New test.
* testsuite/libgomp.fortran/async_io_5.f90: New test.
* testsuite/libgomp.fortran/async_io_6.f90: New test.
* testsuite/libgomp.fortran/async_io_7.f90: New test.
From-SVN: r263082
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 15 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/async_io_1.f90 | 48 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/async_io_2.f90 | 18 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/async_io_3.f90 | 16 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/async_io_4.f90 | 90 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/async_io_5.f90 | 132 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/async_io_6.f90 | 30 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.fortran/async_io_7.f90 | 22 |
8 files changed, 15 insertions, 356 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 6cd30bb..0cce371 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,18 @@ +2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com> + + Revert 'AsyncI/O patch committed'. + 2018-07-25 Nicolas Koenig <koenigni@gcc.gnu.org> + Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/25829 + * testsuite/libgomp.fortran/async_io_1.f90: New test. + * testsuite/libgomp.fortran/async_io_2.f90: New test. + * testsuite/libgomp.fortran/async_io_3.f90: New test. + * testsuite/libgomp.fortran/async_io_4.f90: New test. + * testsuite/libgomp.fortran/async_io_5.f90: New test. + * testsuite/libgomp.fortran/async_io_6.f90: New test. + * testsuite/libgomp.fortran/async_io_7.f90: New test. + 2018-07-30 Tom de Vries <tdevries@suse.de> * plugin/plugin-nvptx.c (MIN, MAX): Redefine. diff --git a/libgomp/testsuite/libgomp.fortran/async_io_1.f90 b/libgomp/testsuite/libgomp.fortran/async_io_1.f90 deleted file mode 100644 index 07721bb..0000000 --- a/libgomp/testsuite/libgomp.fortran/async_io_1.f90 +++ /dev/null @@ -1,48 +0,0 @@ -! { dg-do run } -!TODO: Move these testcases to gfortran testsuite -! once compilation with pthreads is supported there -! Check basic functionality of async I/O -program main - implicit none - integer:: i=1, j=2, k, l - real :: a, b, c, d - character(3), parameter:: yes="yes" - character(4) :: str - complex :: cc, dd - integer, dimension(4):: is = [0, 1, 2, 3] - integer, dimension(4):: res - character(10) :: inq - - open (10, file='a.dat', asynchronous=yes) - cc = (1.5, 0.5) - inquire (10,asynchronous=inq) - if (inq /= "YES") stop 1 - write (10,*,asynchronous=yes) 4, 3 - write (10,*,asynchronous=yes) 2, 1 - write (10,*,asynchronous=yes) 1.0, 3.0 - write (10,'(A)', asynchronous=yes) 'asdf' - write (10,*, asynchronous=yes) cc - close (10) - open (20, file='a.dat', asynchronous=yes) - read (20, *, asynchronous=yes) i, j - read (20, *, asynchronous=yes) k, l - read (20, *, asynchronous=yes) a, b - read (20,'(A4)',asynchronous=yes) str - read (20,*, asynchronous=yes) dd - wait (20) - if (i /= 4 .or. j /= 3) stop 2 - if (k /= 2 .or. l /= 1) stop 3 - if (a /= 1.0 .or. b /= 3.0) stop 4 - if (str /= 'asdf') stop 5 - if (cc /= dd) stop 6 - close (20,status="delete") - - open(10, file='c.dat', asynchronous=yes) - write(10, *, asynchronous=yes) is - close(10) - open(20, file='c.dat', asynchronous=yes) - read(20, *, asynchronous=yes) res - wait (20) - if (any(res /= is)) stop 7 - close (20,status="delete") -end program diff --git a/libgomp/testsuite/libgomp.fortran/async_io_2.f90 b/libgomp/testsuite/libgomp.fortran/async_io_2.f90 deleted file mode 100644 index 440d46e..0000000 --- a/libgomp/testsuite/libgomp.fortran/async_io_2.f90 +++ /dev/null @@ -1,18 +0,0 @@ -! { dg-do run } -!TODO: Move these testcases to gfortran testsuite -! once compilation with pthreads is supported there -program main - implicit none - integer :: i, ios - character(len=100) :: iom - open (10,file="tst.dat") - write (10,'(A4)') 'asdf' - close(10) - i = 234 - open(10,file="tst.dat", asynchronous="yes") - read (10,'(I4)',asynchronous="yes") i - iom = ' ' - wait (10,iostat=ios,iomsg=iom) - if (iom == ' ') stop 1 - close(10,status="delete") -end program main diff --git a/libgomp/testsuite/libgomp.fortran/async_io_3.f90 b/libgomp/testsuite/libgomp.fortran/async_io_3.f90 deleted file mode 100644 index 7d51248..0000000 --- a/libgomp/testsuite/libgomp.fortran/async_io_3.f90 +++ /dev/null @@ -1,16 +0,0 @@ - -!TODO: Move these testcases to gfortran testsuite -! once compilation with pthreads is supported there -! { dg-do run } -program main - integer :: i - open (10,file="tst.dat") - write (10,'(A4)') 'asdf' - close(10) - i = 234 - open(10,file="tst.dat", asynchronous="yes") - read (10,'(I4)',asynchronous="yes") i - wait(10) -end program main -! { dg-output "Fortran runtime error: Bad value during integer read" } -! { dg-final { remote_file build delete "tst.dat" } } diff --git a/libgomp/testsuite/libgomp.fortran/async_io_4.f90 b/libgomp/testsuite/libgomp.fortran/async_io_4.f90 deleted file mode 100644 index a21ffae..0000000 --- a/libgomp/testsuite/libgomp.fortran/async_io_4.f90 +++ /dev/null @@ -1,90 +0,0 @@ -! { dg-do run { target fd_truncate } } -!TODO: Move these testcases to gfortran testsuite -! once compilation with pthreads is supported there - -! Test BACKSPACE for synchronous and asynchronous I/O -program main - - integer i, n, nr - real x(10), y(10) - - ! PR libfortran/20068 - open (20, status='scratch', asynchronous="yes") - write (20,*, asynchronous="yes" ) 1 - write (20,*, asynchronous="yes") 2 - write (20,*, asynchronous="yes") 3 - rewind (20) - i = 41 - read (20,*, asynchronous="yes") i - wait (20) - if (i .ne. 1) STOP 1 - write (*,*) ' ' - backspace (20) - i = 42 - read (20,*, asynchronous="yes") i - close (20) - if (i .ne. 1) STOP 2 - - ! PR libfortran/20125 - open (20, status='scratch', asynchronous="yes") - write (20,*, asynchronous="yes") 7 - backspace (20) - read (20,*, asynchronous="yes") i - wait (20) - if (i .ne. 7) STOP 3 - close (20) - - open (20, status='scratch', form='unformatted') - write (20) 8 - backspace (20) - read (20) i - if (i .ne. 8) STOP 4 - close (20) - - ! PR libfortran/20471 - do n = 1, 10 - x(n) = sqrt(real(n)) - end do - open (3, form='unformatted', status='scratch') - write (3) (x(n),n=1,10) - backspace (3) - rewind (3) - read (3) (y(n),n=1,10) - - do n = 1, 10 - if (abs(x(n)-y(n)) > 0.00001) STOP 5 - end do - close (3) - - ! PR libfortran/20156 - open (3, form='unformatted', status='scratch') - do i = 1, 5 - x(1) = i - write (3) n, (x(n),n=1,10) - end do - nr = 0 - rewind (3) -20 continue - read (3,end=30,err=90) n, (x(n),n=1,10) - nr = nr + 1 - goto 20 -30 continue - if (nr .ne. 5) STOP 6 - - do i = 1, nr+1 - backspace (3) - end do - - do i = 1, nr - read(3,end=70,err=90) n, (x(n),n=1,10) - if (abs(x(1) - i) .gt. 0.001) STOP 7 - end do - close (3) - stop - -70 continue - STOP 8 -90 continue - STOP 9 - -end program diff --git a/libgomp/testsuite/libgomp.fortran/async_io_5.f90 b/libgomp/testsuite/libgomp.fortran/async_io_5.f90 deleted file mode 100644 index 916e78a..0000000 --- a/libgomp/testsuite/libgomp.fortran/async_io_5.f90 +++ /dev/null @@ -1,132 +0,0 @@ -! { dg-do run } -!TODO: Move these testcases to gfortran testsuite -! once compilation with pthreads is supported there -! PR55818 Reading a REAL from a file which doesn't end in a new line fails -! Test case from PR reporter. -implicit none -integer :: stat -!integer :: var ! << works -real :: var ! << fails -character(len=10) :: cvar ! << fails -complex :: cval -logical :: lvar - -open(99, file="test.dat", access="stream", form="unformatted", status="new") -write(99) "1", new_line("") -write(99) "2", new_line("") -write(99) "3" -close(99) - -! Test character kind -open(99, file="test.dat") -read (99,*, iostat=stat) cvar -if (stat /= 0 .or. cvar /= "1") STOP 1 -read (99,*, iostat=stat) cvar -if (stat /= 0 .or. cvar /= "2") STOP 2 -read (99,*, iostat=stat) cvar ! << FAILS: stat /= 0 -if (stat /= 0 .or. cvar /= "3") STOP 3 ! << aborts here - -! Test real kind -rewind(99) -read (99,*, iostat=stat) var -if (stat /= 0 .or. var /= 1.0) STOP 4 -read (99,*, iostat=stat) var -if (stat /= 0 .or. var /= 2.0) STOP 5 -read (99,*, iostat=stat) var ! << FAILS: stat /= 0 -if (stat /= 0 .or. var /= 3.0) STOP 6 -close(99, status="delete") - -! Test real kind with exponents -open(99, file="test.dat", access="stream", form="unformatted", status="new") -write(99) "1.0e3", new_line("") -write(99) "2.0e-03", new_line("") -write(99) "3.0e2" -close(99) - -open(99, file="test.dat") -read (99,*, iostat=stat) var -if (stat /= 0) STOP 7 -read (99,*, iostat=stat) var -if (stat /= 0) STOP 8 -read (99,*) var ! << FAILS: stat /= 0 -if (stat /= 0) STOP 9 -close(99, status="delete") - -! Test logical kind -open(99, file="test.dat", access="stream", form="unformatted", status="new") -write(99) "Tru", new_line("") -write(99) "fal", new_line("") -write(99) "t" -close(99) - -open(99, file="test.dat") -read (99,*, iostat=stat) lvar -if (stat /= 0 .or. (.not.lvar)) STOP 10 -read (99,*, iostat=stat) lvar -if (stat /= 0 .or. lvar) STOP 11 -read (99,*) lvar ! << FAILS: stat /= 0 -if (stat /= 0 .or. (.not.lvar)) STOP 12 -close(99, status="delete") - -! Test combinations of Inf and Nan -open(99, file="test.dat", access="stream", form="unformatted", status="new") -write(99) "infinity", new_line("") -write(99) "nan", new_line("") -write(99) "infinity" -close(99) - -open(99, file="test.dat") -read (99,*, iostat=stat) var -if (stat /= 0) STOP 13 -read (99,*, iostat=stat) var -if (stat /= 0) STOP 14 -read (99,*) var ! << FAILS: stat /= 0 -if (stat /= 0) STOP 1! << aborts here -close(99, status="delete") - -open(99, file="test.dat", access="stream", form="unformatted", status="new") -write(99) "infinity", new_line("") -write(99) "inf", new_line("") -write(99) "nan" -close(99) - -open(99, file="test.dat") -read (99,*, iostat=stat) var -if (stat /= 0) STOP 15 -read (99,*, iostat=stat) var -if (stat /= 0) STOP 16 -read (99,*) var ! << FAILS: stat /= 0 -if (stat /= 0) STOP 2! << aborts here -close(99, status="delete") - -open(99, file="test.dat", access="stream", form="unformatted", status="new") -write(99) "infinity", new_line("") -write(99) "nan", new_line("") -write(99) "inf" -close(99) - -open(99, file="test.dat") -read (99,*, iostat=stat) var -if (stat /= 0) STOP 17 -read (99,*, iostat=stat) var -if (stat /= 0) STOP 18 -read (99,*) var ! << FAILS: stat /= 0 -if (stat /= 0) STOP 3! << aborts here -close(99, status="delete") - -! Test complex kind -open(99, file="test.dat", access="stream", form="unformatted", status="new") -write(99) "(1,2)", new_line("") -write(99) "(2,3)", new_line("") -write(99) "(4,5)" -close(99) - -open(99, file="test.dat") -read (99,*, iostat=stat) cval -if (stat /= 0 .or. cval /= cmplx(1,2)) STOP 19 -read (99,*, iostat=stat) cval -if (stat /= 0 .or. cval /= cmplx(2,3)) STOP 20 -read (99,*, iostat=stat) cval ! << FAILS: stat /= 0, value is okay -if (stat /= 0 .or. cval /= cmplx(4,5)) STOP 21 -close(99, status="delete") -end diff --git a/libgomp/testsuite/libgomp.fortran/async_io_6.f90 b/libgomp/testsuite/libgomp.fortran/async_io_6.f90 deleted file mode 100644 index f19c037..0000000 --- a/libgomp/testsuite/libgomp.fortran/async_io_6.f90 +++ /dev/null @@ -1,30 +0,0 @@ -! { dg-do run } -!TODO: Move these testcases to gfortran testsuite -! once compilation with pthreads is supported there -! PR 22390 Implement flush statement -program flush_1 - - character(len=256) msg - integer ios - - open (unit=10, access='SEQUENTIAL', status='SCRATCH') - - write (10, *) 42 - flush 10 - - write (10, *) 42 - flush(10) - - write (10, *) 42 - flush(unit=10, iostat=ios) - if (ios /= 0) STOP 1 - - write (10, *) 42 - flush (unit=10, err=20) - goto 30 -20 STOP 2 -30 continue - - call flush(10) - -end program flush_1 diff --git a/libgomp/testsuite/libgomp.fortran/async_io_7.f90 b/libgomp/testsuite/libgomp.fortran/async_io_7.f90 deleted file mode 100644 index a7ce9ba..0000000 --- a/libgomp/testsuite/libgomp.fortran/async_io_7.f90 +++ /dev/null @@ -1,22 +0,0 @@ -! { dg-do run } -!TODO: Move these testcases to gfortran testsuite -! once compilation with pthreads is supported there -! PR40008 F2008: Add NEWUNIT= for OPEN statement -! Contributed by Jerry DeLisle <jvdelisle@gcc.gnu.org> -program newunit_1 - character(len=25) :: str - integer(1) :: myunit, myunit2 - myunit = 25 - str = "bad" - open(newunit=myunit, status="scratch") - open(newunit = myunit2, file="newunit_1file") - write(myunit,'(e24.15e2)') 1.0d0 - write(myunit2,*) "abcdefghijklmnop" - flush(myunit) - rewind(myunit) - rewind(myunit2) - read(myunit2,'(a)') str - if (str.ne." abcdefghijklmnop") STOP 1 - close(myunit) - close(myunit2, status="delete") -end program newunit_1 |