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

            Bug ID: 100989
           Summary: Bogus internal VOLATILE attribute for ASYNCHRONOUS
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
                CC: tkoenig at gcc dot gnu.org
  Target Milestone: ---

For a long time, there was the believe that due to GCC's pointer-escape
semantic, which follows C, no special attribute is needed for asynchronous:


  ...
  integer, asynchronous :: A
  call init_action(A)  ! pointer escape due to by-ref and GCC's C semantic 
  ...                  ! and due to 'asynchronous' due to Fortran semantic
  A = 5   ! (probably a bad idea if really asynchronous)
  ...
  call wait()   ! arrives here, can access A due to escaped pointer
  ! <-- value of 'A' could have changed

There might be an issue with the handling of the 'fn attr', though as the
variables have to be regarded as escaping for certain function calls.

In any case, VOLATILE prevents too much optimizations.

The volatile was added by commit:
  commit 2b4c90656132abb8b8ad155d345c7d4fbf1687c9
via
  https://gcc.gnu.org/pipermail/gcc-patches/2018-June/499870.html
  https://gcc.gnu.org/pipermail/gcc-patches/2018-August/503896.html
without any discussion of this point.

Reply via email to