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.
>> ---
>>
>>
>>
>>
>>
>>
>>
>>
>