aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index f365e8ff..e332095 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2384,14 +2384,11 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
if (!gsym->ns->resolved)
{
gfc_dt_list *old_dt_list;
- struct gfc_omp_saved_state old_omp_state;
/* Stash away derived types so that the backend_decls do not
get mixed up. */
old_dt_list = gfc_derived_types;
gfc_derived_types = NULL;
- /* And stash away openmp state. */
- gfc_omp_save_and_clear_state (&old_omp_state);
gfc_resolve (gsym->ns);
@@ -2401,8 +2398,6 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
/* Restore the derived types of this namespace. */
gfc_derived_types = old_dt_list;
- /* And openmp state. */
- gfc_omp_restore_state (&old_omp_state);
}
/* Make sure that translation for the gsymbol occurs before
@@ -15091,6 +15086,7 @@ gfc_resolve (gfc_namespace *ns)
{
gfc_namespace *old_ns;
code_stack *old_cs_base;
+ struct gfc_omp_saved_state old_omp_state;
if (ns->resolved)
return;
@@ -15099,6 +15095,11 @@ gfc_resolve (gfc_namespace *ns)
old_ns = gfc_current_ns;
old_cs_base = cs_base;
+ /* As gfc_resolve can be called during resolution of an OpenMP construct
+ body, we should clear any state associated to it, so that say NS's
+ DO loops are not interpreted as OpenMP loops. */
+ gfc_omp_save_and_clear_state (&old_omp_state);
+
resolve_types (ns);
component_assignment_level = 0;
resolve_codes (ns);
@@ -15108,4 +15109,6 @@ gfc_resolve (gfc_namespace *ns)
ns->resolved = 1;
gfc_run_passes (ns);
+
+ gfc_omp_restore_state (&old_omp_state);
}