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

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu.org,
                   |                            |pault at gcc dot gnu.org
           Keywords|                            |wrong-code

--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> ---
The problem seems to be due to finalization.

integer(kind=4) __final_mod_T (...)
{
  static struct t * ptr2;
...
}

Calling this function concurrently fails as ptr2 is "static".


The reason for 'static' is:

#0  gfc_finish_var_decl (decl=0x7ffff71ac090, sym=0x2914580) at
../../repos/gcc/gcc/fortran/trans-decl.c:727

722       if (!sym->attr.use_assoc
723           && ((sym->ts.type == BT_DERIVED
724                && sym->ts.u.derived->attr.has_dtio_procs)
725               || (sym->ts.type == BT_CLASS
726                   && CLASS_DATA (sym)->ts.u.derived->attr.has_dtio_procs)))
727         TREE_STATIC (decl) = 1;


"ptr2" itself seems to come from class.c's finalizer_insert_packed_call.

 * * *

That change was part of the huge commit
https://gcc.gnu.org/g:e73d3ca6d1caf9c1187eeb1236dffd42f15ec043 for PR
fortran/48298 (DTIO).

The changelog states for this change:

            * trans-decl.c (gfc_finish_var_decl): If a derived-type/class
            object is associated with DTIO procedures, make it TREE_STATIC.

Reply via email to