[PATCH, Fortran] -fno-automatic with -finit-local prevents initialization of automatics in recursive functions
Steve Kargl
sgk@troutmask.apl.washington.edu
Sun Aug 31 22:43:00 GMT 2014
On Mon, Sep 01, 2014 at 12:28:39AM +0200, Tobias Burnus wrote:
> Fritz Reese wrote:
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62309
> >
> > It seems with gcc-4.8.3 -fno-automatic prevents initializers from
> > being applied to automatic variables.
> [...]
> > According to gfortran's manual page, -fno-automatic should "Treat each
> > program unit (except those marked as RECURSIVE) as if the "SAVE"
> > statement were specified for every local variable [...]". As far as I
> > can tell, -finit-local-zero should still initialize automatic
> > variables in RECURSIVE functions.
> >
> > I believe this is a simple fix; to actually follow the specification
> > set forth in the man page, don't treat symbols in a RECURSIVE
> > namespace as if they are saved in resolve.c
> > (apply_default_init_local):
>
(large snip)
> +implicit none
> + integer f, x
> + integer a ! should be SAVEd
> + a = a + x ! should increment by y every time
a is undefined on the RHS. Relying a compiler option to
make the code conforming is rather dubious. I'd rather
see an error here; even if the user uses a option because
the user is too lazy to write conforming code.
> + f = a
> + return
> +endfunction
> +
> +function f2 (x)
> +implicit none
> + integer f2, x
> + block
> + named: block
> + block
> + integer a ! should be SAVEd
> + a = a + x ! should increment by y every time
> + f2 = a
a is undefined on the RHS and this should elicit an error.
PS: the comment is wrong as there is no y.
> + end block
> + end block named
> + end block
> + return
> +endfunction
> +
> +recursive function g (x)
> +implicit none
> + integer g, x
> + integer b ! should be automatic
> + b = b + x ! should be set to y every time
b is undefined on the RHS and this should elicit an error.
PS: the comment is wrong as there is no y.
The -finit-* option were implemented for compatibility with
g77 and to allow the compilation of dusty deck code. New
code should be written to conform to the standard.
--
Steve
More information about the Fortran
mailing list