Re: [Patch, fortran] PR121972 - [PDT] Fix for the pdt_86 leak.

Jerry D <[email protected]> Mon, 22 Jun 2026 16:05:34 -0700
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.fortran
Message-ID <[email protected]>
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.
>> ---
>>
>>
>>
>>
>>
>>
>>
>>
>