]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libgfortran/ChangeLog
2018-08-21 Nicolas Koenig <koenigni@gcc.gnu.org>
[thirdparty/gcc.git] / libgfortran / ChangeLog
index c1e236e48c3f582ea96a0e4d08bb128d01f0e9dc..63d01e705adb8ea99ca4bd0951466cd8eebf76b7 100644 (file)
@@ -1,3 +1,65 @@
+2018-08-21  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-08-15  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * configure.ac: Check for <sys/random.h>.