diff options
| author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-22 00:42:54 +0000 | 
|---|---|---|
| committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-07-22 00:42:54 +0000 | 
| commit | 6fc8784048bd1a34f08bf37fde4e7d7e6811b96f (patch) | |
| tree | 9405da1d51ba2f549696823714d6adf0ba1ea1fd /gcc/java/lang.c | |
| parent | 098fb0512245a9c2eddbfa38529995b1ec9186aa (diff) | |
| download | ppe42-gcc-6fc8784048bd1a34f08bf37fde4e7d7e6811b96f.tar.gz ppe42-gcc-6fc8784048bd1a34f08bf37fde4e7d7e6811b96f.zip | |
        * 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55636 138bc75d-0d04-0410-961f-82ee72b054a4
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 60f1a1c5931..6d7affacbc9 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" | 

