Re: [Patch, fortran] PR90218 - [PDT] ICE: tree check: expected array_type, have record_type in gfc_conv_array_initializer, at fortran/trans-array.c:6071

Paul Richard Thomas <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <CAGkQGiKxo00Ru3ud8KGUYZG8SET=xdT4u_4OsXtLm7uoM2E9cg@mail.gmail.com>
Hi Harald,

Thanks for your comment. I am looking into the reason why I alighted on
that condition. My notes don't recall the reason. I'll clean up/fix, as
necessary before pushing and will post the final version of the patch.

BTW Happy New Year to you!

Paul


On Mon, 5 Jan 2026 at 20:57, Harald Anlauf <[email protected]> wrote:

> Am 05.01.26 um 9:51 PM schrieb Jerry D:
> > On 1/5/26 8:30 AM, Paul Richard Thomas wrote:
> >> Hi All,
> >>
> >> This PR was largely fixed by preceding patches, insofar as it ran and
> >> produced the expected output, apart from the explicit initialization
> >> expressions for the PDT entities. However, the testcase leaked memory
> >> like a sieve and it has taken a while to sort out a satisfactory fix.
> >>
> >> The chunks in trans-decl.cc implement the fix for the explicit
> >> initialization of PDT entities. This part is straightforward.
> >>
> >> The rest of the patch is devoted to fixing the memory leaks triggered
> >> by the new testcase. The problem was associated with pdt_arrays
> >> embedded in PDT structure constructors, which themselves were embedded
> >> in array constructors that were part of a PDT constructor.... if you
> >> see what I mean :-) The original pdt_arrays are copied into a
> >> destination array, which is implicitly allocated
> >> by gfc_duplicate_allocatable. The allocated memory was being lost in
> >> the subsequent copy of the enclosing array constructor. Rescuing and
> >> freeing the memory is accomplished using the finalization block, which
> >> is then executed after the copy of the array constructor. Note that
> >> these frees are not guarded. I don't believe that there is any
> >> circumstance where this will be an issue but, if required, it would be
> >> easily implemented.
> >>
> >> The chunks in trans-stmt.cc pick up memory leaks in allocation and
> >> deallocation. As a side effect, the leak in pdt_3.f03 is fixed.
> >> PR121972 will be updated accordingly, since pdt_39/70/77.f03 still
> >> leak memory.
> >>
> >> Regtests on FC43/x86_64. OK for mainline
> >>
> >> Paul
> >>
> >
> > Looks Good To Me Paul, also regression tested OK here.
> >
> > Jerry
> >
>
> I wanted to says that I am also fine with the patch,
> but have a minor question:
>
> +static tree
> +gfc_init_default_pdt (gfc_symbol *sym, bool dealloc)
>   {
> -  /* Allowed in the case where all the components have initializers and
> -     there are no LEN components.  */
> -  if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.pdt_type)
> +  stmtblock_t block;
> +  tree tmp;
> +  gfc_component *c;
> +
> +  if (sym->value && sym->value->symtree
> +      && sym->value->symtree->n.sym
> +      && !sym->value->symtree->n.sym->attr.artificial)
>
> Don't you want to check that sym->value is really a variable
> before testing symtree?  I.e.,
>
> if (sym->value && sym->value->expr_type == EXPR_VARIABLE
>      && sym->value->symtree
> ...
>
> Thanks,
> Harald
>
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.