Ping [PATCH, Fortran, v1] Fix deallocation of nested derived typed components
Jerry DeLisle
jvdelisle@charter.net
Thu Dec 8 20:11:00 GMT 2016
On 12/08/2016 05:42 AM, Andre Vehreschild wrote:
> Ping!
>
> On Fri, 2 Dec 2016 13:28:40 +0100
> Andre Vehreschild <vehre@gmx.de> wrote:
>
>> Hi all,
>>
>> attached patch fixes on ICE, when freeing a scalar allocatable component in a
>> derived typed coarray.
>>
>> Furthermore does it fix freeing of nested derived typed allocatable
>> components. A simple code explains the bug that is solved by the patch:
>>
>> type inner
>> integer, allocatable :: i
>> end type
>> type outer
>> type(inner), allocatable :: link
>> end type
>>
>> type(outer), allocatable :: obj
>>
>> allocate(obj)
>> allocate(obj%link)
>> allocate(obj%link%i)
>>
>> deallocate(obj%link)
>> deallocate(obj) ! <- this will generate pseudo-pseudo-code of the kind:
>>
>> if (obj.link.i != 0) // But link is already NULL, i.e. a crash occurs.
>> free(obj.link.i)
>>
>> The patch fixes this by moving the code for freeing link.i into the check if
>> link is allocated, i.e.:
>>
>> if (obj.link != 0) {
>> if (obj.link.i != 0) {
>> free (obj.link.i);
>> obj.link.i = 0;
>> }
>> free (obj.link);
>> obj.link = 0;
>> }
>>
>> Furthermore does the patch ensure that the handle of an allocatable component
>> is set to 0.
>>
>> Bootstraped and regtested ok on x86_64-linux/F23. Ok for trunk?
>>
>> Regards,
>> Andre
>
>
I think OK.
Jerry
More information about the Fortran
mailing list