This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: Build fail on gthr-simple.h targets (Re: AsyncI/O patch committed)
Hi Andre,
sorry that it took so long for a fix. I am on holiday at the moment, so my hacking environment is somewhat restricted.
Expect a combined patch for async I/O which we expect to work for pthreads targets and which should not disturb others today or tomorrow.
I would appreciate testing on critical systems.
Regards
Thomas
> Am 31.07.2018 um 09:45 schrieb Andre Vieira (lists) <Andre.SimoesDiasVieira@arm.com>:
>
>> On 27/07/18 13:25, David Edelsohn wrote:
>> Thomas,
>>
>> Correct, the proposed patch does not fix the build failure on AIX.
>>
>> Please see the information on the GCC Compile Farm wiki page for
>> instructions to bootstrap on gcc119.
>> https://gcc.gnu.org/wiki/CompileFarm#Projects_Ideas - at the bottom of
>> Project ideas.
>>
>> Thanks, David
>>> On Fri, Jul 27, 2018 at 3:30 AM Thomas Koenig <tkoenig@netcologne.de> wrote:
>>>
>>>> Am 26.07.2018 um 22:54 schrieb Thomas Koenig:
>>>> Hi Ulrich,
>>>>
>>>>> The problem is that io/asynch.h unconditionally uses a couple of
>>>>> features that are not provided by gthr-simplex, in particular
>>>>> __gthread_cond_t
>>>>> and
>>>>> __gthread_equal / __gthread_self
>>>>>
>>>>> According to the documentation in gthr.h, the former is only available
>>>>> if __GTHREAD_HAS_COND is defined, and the latter are only available if
>>>>> __GTHREADS_CXX0X is defined. Neither is true for gthr-simple.h.
>>>>
>>>> Thanks for the analysis, and the pointer to the macros.
>>>>
>>>> Because the functionality depends on these features, it is best to
>>>> remove them if it is not present. So, here is a patch which does
>>>> just that.
>>>>
>>>> This was reg-tested on Linux, which showed that the functionality is
>>>> still there. I tried bootstrapping on AIX on gcc119, but this failed
>>>> due to an unrelated issue (problem with compiling the inline
>>>> libraries).
>>>>
>>>
>>> OK, this does not work.
>>>
>>> We have found a method of checking on Linux, and this does not work.
>>> We have also found a way of working in the next couple of days, so
>>> expect an update in one or two days.
>>>
>>> If that is too much time, feel free to revert the async patch
>>> in the meantime.
>>>
>>> Regards
>>>
>>> Thomas
>>
> Hi Thomas,
>
> Sorry but I had to revert your patch as it has been breaking our
> bare-metal builds for over 5 days now.
>
> Comitted as r263082.
>
>
> 2018-07-31 Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> Reverted '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.
>
> Reverted '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.
>
> Reverted '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.
>