http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25829
--- Comment #22 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-07-13 09:24:40 UTC --- Note: TR 29113 introduces a wider coverage of ASYNCHRONOUS, cf. almost-PDTR 29113 at ftp://ftp.nag.co.uk/sc22wg5/N1851-N1900/N1866.pdf. I think the easiest is to not set the "restrict" of dummy arguments involved in ASYNCHRONOUS I/O. That way, one has: call user_write(id, var) ... call user_wait(id) var = ... The address of the "var" escapes at "user_write" and is thus available to "user_wait" - hence, "var =" will not be moved across "user_wait". Ditto for gfortran's asynchronous I/O.