diff options
author | Andrew Haley <aph@cygnus.com> | 1999-05-11 12:09:13 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 1999-05-11 12:09:13 +0000 |
commit | 138657ecb0d28fa0c8df47db35f156ea4aa3b590 (patch) | |
tree | 98e4984a170319b0749e4b4b7ab541d5bbd4a955 /gcc/java/decl.c | |
parent | 6a09296d7aa232eafa5ba864338138ea917a0093 (diff) | |
download | gcc-138657ecb0d28fa0c8df47db35f156ea4aa3b590.zip gcc-138657ecb0d28fa0c8df47db35f156ea4aa3b590.tar.gz gcc-138657ecb0d28fa0c8df47db35f156ea4aa3b590.tar.bz2 |
parse.y (source_end_java_method): If the current method contains any exception handlers...
1999-05-11 Andrew Haley <aph@cygnus.com>
* parse.y (source_end_java_method): If the current method contains
any exception handlers, force asynchronous_exceptions: this is
necessary because signal handlers in libjava may throw exceptions.
* decl.c (end_java_method): Ditto.
From-SVN: r26884
Diffstat (limited to 'gcc/java/decl.c')
-rw-r--r-- | gcc/java/decl.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/java/decl.c b/gcc/java/decl.c index 409df66..625ba8a 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -32,6 +32,7 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */ #include "java-tree.h" #include "jcf.h" #include "toplev.h" +#include "except.h" static tree push_jvm_slot PROTO ((int, tree)); static tree builtin_function PROTO ((const char *, tree, @@ -1642,6 +1643,7 @@ void end_java_method () { tree fndecl = current_function_decl; + int flag_asynchronous_exceptions = asynchronous_exceptions; expand_end_bindings (getdecls (), 1, 0); /* pop out of function */ @@ -1657,9 +1659,17 @@ end_java_method () /* Generate rtl for function exit. */ expand_function_end (input_filename, lineno, 0); + /* FIXME: If the current method contains any exception handlers, + force asynchronous_exceptions: this is necessary because signal + handlers in libjava may throw exceptions. This is far from being + a perfect solution, but it's better than doing nothing at all.*/ + if (catch_clauses) + asynchronous_exceptions = 1; + /* Run the optimizers and output assembler code for this function. */ rest_of_compilation (fndecl); current_function_decl = NULL_TREE; permanent_allocation (1); + asynchronous_exceptions = flag_asynchronous_exceptions; } |