diff options
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; |