[Bug fortran/91668] Failure to deallocate ALLOCATABLE component of a type in a POINTER array of types on deallocation of POINTER array
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Sep 6 21:07:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91668
kargl at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kargl at gcc dot gnu.org
--- Comment #5 from kargl at gcc dot gnu.org ---
(In reply to anlauf from comment #3)
> (In reply to Thomas Koenig from comment #2)
> > Is this actually required? My feeling would be that is is not, but I may
> > well be mistaken.
> >
> > Does somebody have chapter & verse on this? And what do other compilers do?
>
> NAG, Intel & Cray do not leak according to valgrind. NAG also gives a nice
> runtime memory trace with -mtrace.
>
> I think the following applies:
>
> F2018 DIS:
>
> 9.7.3.2 Deallocation of allocatable variables
>
> 8 When a variable of derived type is deallocated, any allocated allocatable
> subobject is deallocated. [...]
>
> I do not see any mentioning to whether "variable" is ALLOCATABLE or POINTER
> here.
You don't need to see ALLOCATABLE or POINTER. In "..., any allocated
allocatable ...' the word 'allocatable' has an internal link to its
definition.
3.2
allocatable
having the ALLOCATABLE attribute (8.5.3)
8.5.3 ALLOCATABLE attribute
A variable with the ALLOCATABLE attribute is a variable for which space is
allocated during execution.
Here, we see that 'allocatable' does not include 'POINTER attribute'.
So, now, we go back to the beginning of the section
The DEALLOCATE statement causes allocatable variables to be deallocated;
it causes pointer targets to be deallocated and the pointers to be
disassociated.
For the lack of a better description, 'allocate(test(10))' allocates
an anonymous target. 'deallocate(test)' deallocates that anonymous
target and dissociates the pointer.
So, now we go to 9.7.3.3 "Deallocation of pointer targets"
This section does not say what happens to allocated allocatable
components when the pointer target is deallocated. QoI probably
means that gfortran should do a deep deallocation, but I don't
think it is required by the Fortran standard.
More information about the Gcc-bugs
mailing list