(j3.2006) implicit deallocation in main programs

Robert Corbett robert.corbett
Tue Sep 13 03:21:18 EDT 2011


On 09/13/11 00:13, Tobias Burnus wrote:
> On 09/13/2011 08:38 AM, Robert Corbett wrote:
>> Oracle Solaris Studio (OSS) Fortran does implicitly
>> deallocate unsaved allocatable variables in the main
>> program if execution reaches the END statement of
>> the main program.
>
> (For what it is worth: gfortran does the same as Oracle's OSS.)
>
> At least in Fortran 2008, the variable has implicitly the SAVE attribute:
>
> "A variable, common block, or procedure pointer declared in the 
> scoping unit of a main program, module, or submodule implicitly has 
> the SAVE attribute," (5.3.16 SAVE attribute)
>
>
> By contrast, Fortran 2003 had:
>
> "A SAVE statement may appear in the specification part of a main 
> program and has no effect."
>
>> I think our implementation is standard conforming, because it is 
>> impossible to tell
>> from within a program that the variable has been deallocated.
>
> Glancing at the standard, freeing in main seems as to be valid in 
> Fortran 2003 and invalid in Fortran 2008.
>
> Actually, I wonder how one can detect this - and how the your bug 
> reported has detected it. The only possibility I see are destructor 
> functions [GCC: __attribute__((destructor))] which are run after the 
> main program has returned to its caller (e.g. __libc_start_main or 
> _start). If the allocatable is a TARGET, the allocatable might be 
> still reached by the destructor function.
The people who reported the bug are developing a tool for
detecting memory leaks.  Their tool would have detected a
leak in their sample program if we had not done the
deallocation.

Bob Corbett



More information about the J3 mailing list