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.c | |
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.c')
-rw-r--r-- | gcc/java/parse.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/gcc/java/parse.c b/gcc/java/parse.c index 6f900b4..2c7cf88 100644 --- a/gcc/java/parse.c +++ b/gcc/java/parse.c @@ -2231,7 +2231,7 @@ static const short yycheck[] = { 3, #define YYPURE 1 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ -#line 3 "/usr/cygnus/gnupro-98r1/share/bison.simple" +#line 3 "/usr/share/misc/bison.simple" /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -2248,7 +2248,7 @@ static const short yycheck[] = { 3, You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. @@ -2382,8 +2382,10 @@ int yydebug; /* nonzero means print parse trace */ /* Prevent warning if -Wstrict-prototypes. */ #ifdef __GNUC__ +#ifndef YYPARSE_PARAM int yyparse (void); #endif +#endif #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) @@ -2424,7 +2426,7 @@ __yy_memcpy (char *to, char *from, int count) #endif #endif -#line 196 "/usr/cygnus/gnupro-98r1/share/bison.simple" +#line 196 "/usr/share/misc/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -4713,7 +4715,7 @@ case 495: break;} } /* the action file gets copied in in place of this dollarsign */ -#line 498 "/usr/cygnus/gnupro-98r1/share/bison.simple" +#line 498 "/usr/share/misc/bison.simple" yyvsp -= yylen; yyssp -= yylen; @@ -5922,13 +5924,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. */ @@ -6124,7 +6131,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) @@ -8101,6 +8113,9 @@ source_start_java_method (fndecl) tree parm_decl; int i; + if (!fndecl) + return; + current_function_decl = fndecl; /* New scope for the function */ @@ -8219,6 +8234,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; @@ -8274,6 +8292,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); } |