[Bug fortran/91316] Derived type finalization failing

pault at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sat Dec 3 08:56:15 GMT 2022


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

--- Comment #2 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to Paul Thomas from comment #1)
> I notice that this is missing from the list of dependencies of PR37336, for
> which a wider fix will be submitted this afternoon.
> 
> Best regards
> 
> Paul

I have returned to this problem. final_s4 generates illegal recursive I/O and
hangs due to a mutex lock. It works fine if the I/O is removed from the final
procedure.

__attribute__((fn spec (". ")))
void final_s4 ()
{
  struct array00_final_t D.4386;

  {
    struct __st_parameter_dt dt_parm.6;

    dt_parm.6.common.filename = &"/home/pault/prs/pr37336/pr91316.f90"[1]{lb: 1
sz: 1};
    dt_parm.6.common.line = 127;
    dt_parm.6.common.flags = 128;
    dt_parm.6.common.unit = 6;
    _gfortran_st_write (&dt_parm.6);
    _gfortran_transfer_character_write (&dt_parm.6, &"f4: "[1]{lb: 1 sz: 1},
4);
    {
      static integer(kind=4) C.4378 = 4;
      struct final_t D.4379;
      struct final_t D.4380;
      struct array00_final_t desc.7;
      struct final_t D.4387;
      integer(kind=4) D.4388;

      D.4379 = final_set (&C.4378);
      D.4380 = D.4379;
      desc.7.dtype = {.elem_len=4, .rank=0, .type=5};
      desc.7.data = (void * restrict) &D.4379;
      desc.7.span = (integer(kind=8)) desc.7.dtype.elem_len;
      D.4386 = desc.7;
      D.4387 = D.4380;
      D.4388 = final_get (&D.4387);
      _gfortran_transfer_integer_write (&dt_parm.6, &D.4388, 4);
      if (__vtab_final_m_Final_t._final != 0B && (struct final_t * restrict)
D.4386.data != 0B)
        {
          __vtab_final_m_Final_t._final (&D.4386, __vtab_final_m_Final_t._size,
0);
        }
    }
    _gfortran_st_write_done (&dt_parm.6);
  }
  return;
}

Cheers

Paul


More information about the Gcc-bugs mailing list