Hello Jerry,

I just reapplied what you posted as pdt_86_leakfix.diff on a clean
tree. I swear to you that it fixes the unreachable leak in pdt_86 and
pdt_82.

Cheers

Paul


On Tue, 23 Jun 2026 at 20:25, Jerry D <[email protected]> wrote:
>
> On 6/23/26 3:00 AM, Paul Richard Thomas wrote:
> > Hello Jerry and Harald,
> >
> > The patch does what it says on the box and regression tests correctly.
>
> Except for one very important detail. Its fixing the leak in pdt_82 not 
> pdt_86.
>
> One of the last things I do before getting ready to push a fix is check to see
> if the original problem is fixed. So, I dutifully was checking to make sure 
> the
> pdt_86 leak was fixed. It wasn't. That sent me into a time warp. Went back to 
> my
> notes, oops, I did it again. (A famous song by Brittany Spears)
>
> See below.
>
> >
> > Concerning, Haralds suggestion: I don't see any problem in principle,
> > as long as it is recognised that both calls to has_class_alloc_comp
> > are negated and so types with class pointer components get through the
> > gate. gfc_deallocate_alloc_comp_no_caf should ignore them but I
> > haven't checked.
> >
> > In chunks 2 and 3, please move expr->ts.type == BT_DERIVED to the
> > start of the condition to guard the use of the typespec derived field
> > in the call to has_class_alloc_comp. It should be OK as it is but it
> > is worthwhile taking that extra little bit of care :-)
>
> Done
>
> >
> > Finally, the leaking part of pdt_86.f03 has been isolated as an
> > additional test. If you think that it is useful, please add it to the
> > patch. (Renamed to pdt_86_leak_test.f90?)
>
> This comment not applicable. I do have a new test case for the actual leaker 
> in
> the patch.
>
> I will commit shortly.
>
> Thanks for reviews and patience.
>
> Jerry
>
> >
> > OK for mainline and backporting.
> >
> > Cheers
> >
> > Paul
> >
> > On Tue, 23 Jun 2026 at 00:05, Jerry D <[email protected]> wrote:
> >>
> >> On 6/22/26 1:35 PM, Harald Anlauf wrote:
> >>> Hi Jerry!
> >>>
> >>> Am 22.06.26 um 8:37 PM schrieb Jerry D:
> >>>> See attached patch.
> >>>>
> >>>> Regression tested on x86_64.
> >>>>
> >>>> A new test case is added to asan to catch this in the future.
> >>>
> >>> I'd rather leave the review to Paul, but I have one question:
> >>> As is, the new helper has_class_alloc_comp might return true for
> >>> pointer components, but I think it should not.
> >>>
> >>> Can you please check?
> >>>
> >>
> >> Harald, I think you are right. I changed it to this:
> >>
> >> static bool
> >> has_class_alloc_comp (gfc_symbol *der)
> >> {
> >>     for (gfc_component *c = der->components; c; c = c->next)
> >>       if (c->ts.type == BT_CLASS && !c->attr.pointer)
> >>         return true;
> >>     return false;
> >> }
> >>
> >> I will wait for Paul to review.
> >>
> >> Thanks..
> >>
> >>
> >>
> >>
> >>> Cheers,
> >>> Harald
> >>>
> >>>> OK for mainline.
> >>>>
> >>>> Regards,
> >>>>
> >>>> Jerry
> >>>> ---
> >>>> fortran: Fix memory leak for array structure-constructor element 
> >>>> [PR121972]
> >>>>
> >>>> Fix the remaining leak in pdt_86.f03. Added a new test in asan to avoid 
> >>>> it.
> >>>>
> >>>>     PR fortran/121972
> >>>>
> >>>> gcc/fortran/ChangeLog:
> >>>>
> >>>>     * trans-array.cc (has_class_alloc_comp): New helper; returns true if
> >>>>     derived type DER has any CLASS component.
> >>>>     (gfc_trans_array_ctor_element): Also free allocatable components when
> >>>>     the element expression is EXPR_STRUCTURE, skipping types that contain
> >>>>     CLASS components to avoid freeing stack-allocated _data pointers.
> >>>>     (gfc_constructor_is_owned_alloc_comp): Likewise treat EXPR_STRUCTURE
> >>>>     elements as owned only when the derived type has no CLASS components.
> >>>>     * trans-expr.cc (gfc_trans_alloc_subarray_assign): Free allocatable
> >>>>     components of the component's temporary descriptor before nulling its
> >>>>     data pointer, for non-variable source expressions.
> >>>>
> >>>> gcc/testsuite/ChangeLog:
> >>>>
> >>>>     * gfortran.dg/class_array_15.f03: Adjust expected free count.
> >>>>     * gfortran.dg/derived_constructor_comps_6.f90: Adjust expected free 
> >>>> count.
> >>>>     * gfortran.dg/asan/structure_constructor_alloc_comp_leak_1.f90: New 
> >>>> test.
> >>>> ---
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>
>

Reply via email to