aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/parse.y
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@cygnus.com>1999-08-19 20:37:04 +0000
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>1999-08-19 13:37:04 -0700
commit79d133336a745c897ed0b1deedfe0e6cda8f40cb (patch)
tree1ac66ba96f8381766f2d36c668fef7cd934a08a0 /gcc/java/parse.y
parent852be00c009c96d573dacad6007a63f8076a6c9c (diff)
downloadgcc-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.y24
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);
}