diff options
author | Tobias Burnus <burnus@net-b.de> | 2009-05-15 08:52:41 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2009-05-15 08:52:41 +0200 |
commit | 602b85231dd432fdad1cdb814eec39d449a33d7f (patch) | |
tree | bb58acd84e5324e34712e80a80cc5d4bccdea56f /gcc/fortran/f95-lang.c | |
parent | 675a72d643ceab289bc4adc0484cd90c2812caf5 (diff) | |
download | gcc-602b85231dd432fdad1cdb814eec39d449a33d7f.zip gcc-602b85231dd432fdad1cdb814eec39d449a33d7f.tar.gz gcc-602b85231dd432fdad1cdb814eec39d449a33d7f.tar.bz2 |
re PR fortran/39352 (gfortran.dg/vect/pr39318.f90 doesn't work on ia64)
2009-05-15 Tobias Burnus <burnus@net-b.de>
PR fortran/39352
* f95-lang.c: Add gfc_maybe_initialize_eh.
* gfortran.h: Add gfc_maybe_initialize_eh prototype.
* Make-lang.in: Add new .h dendencies for f95-lang.c
* openmp.c (resolve_omp_do): Call gfc_maybe_initialize_eh.
* misc.c (gfc_free): Avoid #define trickery for free.
From-SVN: r147559
Diffstat (limited to 'gcc/fortran/f95-lang.c')
-rw-r--r-- | gcc/fortran/f95-lang.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c index 1aab3bf..97a071d 100644 --- a/gcc/fortran/f95-lang.c +++ b/gcc/fortran/f95-lang.c @@ -43,6 +43,10 @@ along with GCC; see the file COPYING3. If not see #include "diagnostic.h" #include "tree-dump.h" #include "cgraph.h" +/* For gfc_maybe_initialize_eh. */ +#include "libfuncs.h" +#include "expr.h" +#include "except.h" #include "gfortran.h" #include "cpp.h" @@ -165,6 +169,10 @@ static GTY(()) struct binding_level *free_binding_level; It is indexed by a RID_... value. */ tree *ridpointers = NULL; +/* True means we've initialized exception handling. */ +bool gfc_eh_initialized_p; + + /* Prepare expr to be an argument of a TRUTH_NOT_EXPR, or validate its data type for an `if' or `while' statement or ?..: exp. @@ -1223,5 +1231,21 @@ gfc_init_ts (void) tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1; } +void +gfc_maybe_initialize_eh (void) +{ + if (!flag_exceptions || gfc_eh_initialized_p) + return; + + gfc_eh_initialized_p = true; + eh_personality_libfunc + = init_one_libfunc (USING_SJLJ_EXCEPTIONS + ? "__gcc_personality_sj0" + : "__gcc_personality_v0"); + default_init_unwind_resume_libfunc (); + using_eh_for_cleanups (); +} + + #include "gt-fortran-f95-lang.h" #include "gtype-fortran.h" |