https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25829

--- Comment #43 from Nicolas Koenig <koenigni at gcc dot gnu.org> ---
Author: koenigni
Date: Wed Jul 25 18:48:39 2018
New Revision: 262978

URL: https://gcc.gnu.org/viewcvs?rev=262978&root=gcc&view=rev
Log:
2018-07-25  Nicolas Koenig  <koeni...@gcc.gnu.org>
        Thomas Koenig <tkoe...@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  <koeni...@gcc.gnu.org>
        Thomas Koenig <tkoe...@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  <koeni...@gcc.gnu.org>
        Thomas Koenig <tkoe...@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  <koeni...@gcc.gnu.org>
        Thomas Koenig <tkoe...@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.


Added:
    trunk/libgfortran/io/async.c
    trunk/libgfortran/io/async.h
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/gfortran.texi
    trunk/gcc/fortran/trans-decl.c
    trunk/gcc/fortran/trans-io.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/f2003_inquire_1.f03
    trunk/gcc/testsuite/gfortran.dg/f2003_io_1.f03
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/Makefile.am
    trunk/libgfortran/Makefile.in
    trunk/libgfortran/gfortran.map
    trunk/libgfortran/io/close.c
    trunk/libgfortran/io/file_pos.c
    trunk/libgfortran/io/inquire.c
    trunk/libgfortran/io/io.h
    trunk/libgfortran/io/open.c
    trunk/libgfortran/io/read.c
    trunk/libgfortran/io/transfer.c
    trunk/libgfortran/io/unit.c
    trunk/libgfortran/io/unix.c
    trunk/libgfortran/libgfortran.h
    trunk/libgfortran/runtime/error.c
    trunk/libgomp/ChangeLog

Reply via email to