diff options
author | Richard Henderson <rth@redhat.com> | 2002-07-21 17:42:54 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-07-21 17:42:54 -0700 |
commit | 8943a0b4d855341542bf9b5fe4d29b616078ca9a (patch) | |
tree | 9405da1d51ba2f549696823714d6adf0ba1ea1fd /gcc/java/lang.c | |
parent | b1aef35bb1ba3ee75c7e9831b3248ab8d1f7b353 (diff) | |
download | gcc-8943a0b4d855341542bf9b5fe4d29b616078ca9a.zip gcc-8943a0b4d855341542bf9b5fe4d29b616078ca9a.tar.gz gcc-8943a0b4d855341542bf9b5fe4d29b616078ca9a.tar.bz2 |
expr.c (expand_expr): Don't use GOTO_SUBROUTINE_EXPR when finally_block can be re-expanded.
* expr.c (expand_expr) [TRY_FINALLY_EXPR]: Don't use
GOTO_SUBROUTINE_EXPR when finally_block can be re-expanded.
* lang.c (java_unsafe_for_reeval): New.
(LANG_HOOKS_UNSAFE_FOR_REEVAL): New.
From-SVN: r55636
Diffstat (limited to 'gcc/java/lang.c')
-rw-r--r-- | gcc/java/lang.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/java/lang.c b/gcc/java/lang.c index 60f1a1c..6d7affa 100644 --- a/gcc/java/lang.c +++ b/gcc/java/lang.c @@ -61,6 +61,7 @@ static void java_print_error_function PARAMS ((diagnostic_context *, static int process_option_with_no PARAMS ((const char *, const struct string_option *, int)); +static int java_unsafe_for_reeval PARAMS ((tree)); #ifndef TARGET_OBJECT_SUFFIX # define TARGET_OBJECT_SUFFIX ".o" @@ -238,6 +239,8 @@ struct language_function GTY(()) #define LANG_HOOKS_POST_OPTIONS java_post_options #undef LANG_HOOKS_PARSE_FILE #define LANG_HOOKS_PARSE_FILE java_parse_file +#undef LANG_HOOKS_UNSAFE_FOR_REEVAL +#define LANG_HOOKS_UNSAFE_FOR_REEVAL java_unsafe_for_reeval #undef LANG_HOOKS_MARK_ADDRESSABLE #define LANG_HOOKS_MARK_ADDRESSABLE java_mark_addressable #undef LANG_HOOKS_EXPAND_EXPR @@ -794,4 +797,24 @@ java_post_options () return false; } +/* Called from unsafe_for_reeval. */ +static int +java_unsafe_for_reeval (t) + tree t; +{ + switch (TREE_CODE (t)) + { + case BLOCK: + /* Our expander tries to expand the variables twice. Boom. */ + if (BLOCK_EXPR_DECLS (t) != NULL) + return 2; + return unsafe_for_reeval (BLOCK_EXPR_BODY (t)); + + default: + break; + } + + return -1; +} + #include "gt-java-lang.h" |