diff options
author | Alexandre Petit-Bianco <apbianco@cygnus.com> | 1999-08-19 20:37:04 +0000 |
---|---|---|
committer | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 1999-08-19 13:37:04 -0700 |
commit | 79d133336a745c897ed0b1deedfe0e6cda8f40cb (patch) | |
tree | 1ac66ba96f8381766f2d36c668fef7cd934a08a0 /gcc/java/parse.y | |
parent | 852be00c009c96d573dacad6007a63f8076a6c9c (diff) | |
download | gcc-79d133336a745c897ed0b1deedfe0e6cda8f40cb.zip gcc-79d133336a745c897ed0b1deedfe0e6cda8f40cb.tar.gz gcc-79d133336a745c897ed0b1deedfe0e6cda8f40cb.tar.bz2 |
re GNATS gcj/17 (Internal error: segfault on import-classname clash)
Thu Aug 19 10:26:18 1999 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (method_header): Return a null pointer if the current
class node is null.
(finish_method_declaration): Return if the current function decl
is null.
(source_start_java_method): Likewise.
(java_method_add_stmt): Likewise.
This fixes the net PR #17.
From-SVN: r28765
Diffstat (limited to 'gcc/java/parse.y')
-rw-r--r-- | gcc/java/parse.y | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 1c63bfd..d62b277 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -3337,13 +3337,18 @@ method_header (flags, type, mdecl, throws) { tree meth = TREE_VALUE (mdecl); tree id = TREE_PURPOSE (mdecl); - tree this_class = TREE_TYPE (ctxp->current_parsed_class); tree type_wfl = NULL_TREE; - tree meth_name = NULL_TREE, current, orig_arg; + tree meth_name = NULL_TREE; + tree current, orig_arg, this_class; int saved_lineno; int constructor_ok = 0, must_chain; check_modifiers_consistency (flags); + + if (ctxp->current_parsed_class) + this_class = TREE_TYPE (ctxp->current_parsed_class); + else + return NULL_TREE; /* There are some forbidden modifiers for an abstract method and its class must be abstract as well. */ @@ -3539,7 +3544,12 @@ static void finish_method_declaration (method_body) tree method_body; { - int flags = get_access_flags_from_decl (current_function_decl); + int flags; + + if (!current_function_decl) + return; + + flags = get_access_flags_from_decl (current_function_decl); /* 8.4.5 Method Body */ if ((flags & ACC_ABSTRACT || flags & ACC_NATIVE) && method_body) @@ -5516,6 +5526,9 @@ source_start_java_method (fndecl) tree parm_decl; int i; + if (!fndecl) + return; + current_function_decl = fndecl; /* New scope for the function */ @@ -5634,6 +5647,9 @@ source_end_java_method () tree fndecl = current_function_decl; int flag_asynchronous_exceptions = asynchronous_exceptions; + if (!fndecl) + return; + java_parser_context_save_global (); lineno = ctxp->last_ccb_indent1; @@ -5689,6 +5705,8 @@ tree java_method_add_stmt (fndecl, expr) tree fndecl, expr; { + if (!fndecl) + return NULL; return add_stmt_to_block (GET_CURRENT_BLOCK (fndecl), NULL_TREE, expr); } |