diff options
author | Mark Eggleston <markeggleston@gcc.gnu.org> | 2020-01-17 08:49:25 +0000 |
---|---|---|
committer | Mark Eggleston <markeggleston@gcc.gnu.org> | 2020-01-17 08:49:33 +0000 |
commit | e4a5f73449d7352ba8128fecbc9a9570d746abdb (patch) | |
tree | beea2fb70aa72f40643b7a8517aa70dc0f0f919a /gcc/fortran | |
parent | dc9ba9d045d0cfc06207806fd64b06ab3304b196 (diff) | |
download | gcc-e4a5f73449d7352ba8128fecbc9a9570d746abdb.zip gcc-e4a5f73449d7352ba8128fecbc9a9570d746abdb.tar.gz gcc-e4a5f73449d7352ba8128fecbc9a9570d746abdb.tar.bz2 |
PATCH] Fortran: PR93263 -fno-automatic and RECURSIVE
The use of -fno-automatic should not affect the save attribute of a
recursive procedure. The first test case checks unsaved variables
and the second checks saved variables.
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 889f01b..524ebff 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2020-01-17 Mark Eggleston <mark.eggleston@codethink.com> + + PR fortran/93236 + * resolve.c (resolve_types): Declare boolean recursive and set with the + value of the recursive attribute of namespace proc_name symbol + structure if it exists. Call gfc_save_all if both flag_automatic and + recursive are false or ns->save_all is true. + 2020-01-16 Tobias Burnus <tobias@codesourcery.com> PR fortran/93253 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 6f2a4c4..bddab39 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -17079,6 +17079,7 @@ resolve_types (gfc_namespace *ns) gfc_data *d; gfc_equiv *eq; gfc_namespace* old_ns = gfc_current_ns; + bool recursive = ns->proc_name && ns->proc_name->attr.recursive; if (ns->types_resolved) return; @@ -17132,7 +17133,7 @@ resolve_types (gfc_namespace *ns) gfc_traverse_ns (ns, resolve_values); - if (ns->save_all || !flag_automatic) + if (ns->save_all || (!flag_automatic && !recursive)) gfc_save_all (ns); iter_stack = NULL; |