gcc/libgfortran/io
Nicolas Koenig b1f45884f6 re PR fortran/25829 ([F03] Asynchronous IO support)
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-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-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-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.


Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org>

From-SVN: r262978
2018-07-25 18:48:39 +00:00
..
async.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
async.h re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
close.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
fbuf.c PR 78534, 83704 Handle large formatted I/O 2018-01-07 12:17:52 +02:00
fbuf.h PR 78534, 83704 Handle large formatted I/O 2018-01-07 12:17:52 +02:00
file_pos.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
format.c libgfortran.h (GFC_ARRAY_DESCRIPTOR): Remove dimension of descriptor to use vaiable members for dim. 2018-02-12 19:53:17 +00:00
format.h Update copyright years. 2018-01-03 11:03:58 +01:00
inquire.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
intrinsics.c Update copyright years. 2018-01-03 11:03:58 +01:00
io.h re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
list_read.c gfortran.h (gfc_dt): Rename default_exp field to dec_ext. 2018-03-28 13:59:06 +02:00
lock.c Update copyright years. 2018-01-03 11:03:58 +01:00
open.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
read.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
size_from_kind.c Update copyright years. 2018-01-03 11:03:58 +01:00
transfer128.c Update copyright years. 2018-01-03 11:03:58 +01:00
transfer.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
unit.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
unix.c re PR fortran/25829 ([F03] Asynchronous IO support) 2018-07-25 18:48:39 +00:00
unix.h PR 78534, 83704 Handle large formatted I/O 2018-01-07 12:17:52 +02:00
write_float.def re PR libfortran/86070 (gfortran.dg/fmt_zero_digits.f90 segmentation fault starting with r261077) 2018-06-10 01:49:02 +00:00
write.c re PR fortran/85840 (Memory leak in write.c) 2018-05-28 21:55:31 +00:00