This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Patch: PR 8003
- From: Tom Tromey <tromey at redhat dot com>
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Cc: Gcc Patch List <gcc-patches at gcc dot gnu dot org>, Per Bothner <bothner at bothner dot com>, Andrew Haley <aph at redhat dot com>
- Date: 23 Sep 2002 00:08:16 -0600
- Subject: Patch: PR 8003
- Reply-to: tromey at redhat dot com
This patch fixes PR 8003.
In this PR, a syntax error causes gcj to SEGV. It happens because
when trying to give a nicer error message, we reference `java_lval' in
an invalid way -- we use the incorrect field. (java_lval is a union,
and the `node' field is not always valid. That is what happens in
this case.)
I tried fixing this a different way. I added a new
variable_declarator_id rule which matched (at the end)
`OSB_TK expression error'. This let us continue to print the "can't
specify array dimension" error. However, this has the side effect of
giving a different error if an invalid expression is used after the
`['. It seems weird to give such an error if, after fixing the
expression, the result is still invalid.
Based on this, I chose the simpler, but somewhat less friendly,
approach of simply emitting the "missing ]" error in all cases.
Ok to commit?
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* parse.y (variable_declarator_id): Simplify error path for
array declarator error. For PR java/8003.
Index: parse.y
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v
retrieving revision 1.395
diff -u -r1.395 parse.y
--- parse.y 11 Sep 2002 19:53:14 -0000 1.395
+++ parse.y 23 Sep 2002 06:02:01 -0000
@@ -1000,12 +1001,7 @@
{yyerror ("Invalid declaration"); DRECOVER(vdi);}
| variable_declarator_id OSB_TK error
{
- tree node = java_lval.node;
- if (node && (TREE_CODE (node) == INTEGER_CST
- || TREE_CODE (node) == EXPR_WITH_FILE_LOCATION))
- yyerror ("Can't specify array dimension in a declaration");
- else
- yyerror ("']' expected");
+ yyerror ("']' expected");
DRECOVER(vdi);
}
| variable_declarator_id CSB_TK error