aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-01-17 23:26:42 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2011-01-17 23:26:42 +0100
commitc7d3bb7623a428af85bd04c7f225ed54241c29bd (patch)
treeaa50e1a8b8b10ba96d0ffb0526298e3164516071 /gcc/fortran/resolve.c
parentf0fc7be52568981d377ec6910013e75b39263276 (diff)
downloadgcc-c7d3bb7623a428af85bd04c7f225ed54241c29bd.zip
gcc-c7d3bb7623a428af85bd04c7f225ed54241c29bd.tar.gz
gcc-c7d3bb7623a428af85bd04c7f225ed54241c29bd.tar.bz2
re PR fortran/47331 (ICE in make_decl_rtl, at varasm.c:1133 (with -fopenmp))
PR fortran/47331 * gfortran.h (struct gfc_omp_saved_state): New type. (gfc_omp_save_and_clear_state, gfc_omp_restore_state): New prototypes. * resolve.c (resolve_global_procedure): Call it around gfc_resolve call. * openmp.c (gfc_omp_save_and_clear_state, gfc_omp_restore_state): New functions. * gfortran.dg/gomp/pr47331.f90: New test. From-SVN: r168935
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index a1c9917..ed39e78 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -2011,11 +2011,14 @@ 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);
@@ -2025,6 +2028,8 @@ 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