Commit cd7c5840 by Alexandre Petit-Bianco Committed by Alexandre Petit-Bianco

re GNATS gcj/102 (crashes when compiling try block from java source)

2000-03-07  Alexandre Petit-Bianco  <apbianco@cygnus.com>

	* parse.y (qualify_ambiguous_name): Properly handle expressions
	using `null'.

(This fixes the Java PR #102:
 http://sourceware.cygnus.com/ml/java-prs/1999-q4/msg00152.html)

From-SVN: r32397
parent 6632dcdd
2000-03-07 Alexandre Petit-Bianco <apbianco@cygnus.com> 2000-03-07 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (qualify_ambiguous_name): Properly handle expressions
using `null'.
2000-03-07 Alexandre Petit-Bianco <apbianco@cygnus.com>
* parse.y (check_final_assignment): Extended to process * parse.y (check_final_assignment): Extended to process
COMPOUND_EXPR. COMPOUND_EXPR.
(patch_assignment): Have check_final_assignment called only once. (patch_assignment): Have check_final_assignment called only once.
......
...@@ -10632,6 +10632,9 @@ qualify_ambiguous_name (id) ...@@ -10632,6 +10632,9 @@ qualify_ambiguous_name (id)
&& TREE_CODE (TREE_TYPE (qual_wfl)) == EXPR_WITH_FILE_LOCATION) && TREE_CODE (TREE_TYPE (qual_wfl)) == EXPR_WITH_FILE_LOCATION)
name = EXPR_WFL_NODE (TREE_TYPE (qual_wfl)); name = EXPR_WFL_NODE (TREE_TYPE (qual_wfl));
else if (code == INTEGER_CST)
name = qual_wfl;
else if ((code == ARRAY_REF || code == CALL_EXPR || code == MODIFY_EXPR) && else if ((code == ARRAY_REF || code == CALL_EXPR || code == MODIFY_EXPR) &&
TREE_CODE (TREE_OPERAND (qual_wfl, 0)) == EXPR_WITH_FILE_LOCATION) TREE_CODE (TREE_OPERAND (qual_wfl, 0)) == EXPR_WITH_FILE_LOCATION)
name = EXPR_WFL_NODE (TREE_OPERAND (qual_wfl, 0)); name = EXPR_WFL_NODE (TREE_OPERAND (qual_wfl, 0));
...@@ -10686,8 +10689,9 @@ qualify_ambiguous_name (id) ...@@ -10686,8 +10689,9 @@ qualify_ambiguous_name (id)
declaration or parameter declaration, then it is an expression declaration or parameter declaration, then it is an expression
name. We don't carry this test out if we're in the context of the name. We don't carry this test out if we're in the context of the
use of SUPER or THIS */ use of SUPER or THIS */
if (!this_found && !super_found && if (!this_found && !super_found
TREE_CODE (name) != STRING_CST && (decl = IDENTIFIER_LOCAL_VALUE (name))) && TREE_CODE (name) != STRING_CST && TREE_CODE (name) != INTEGER_CST
&& (decl = IDENTIFIER_LOCAL_VALUE (name)))
{ {
RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1; RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1;
QUAL_RESOLUTION (qual) = decl; QUAL_RESOLUTION (qual) = decl;
...@@ -10713,8 +10717,8 @@ qualify_ambiguous_name (id) ...@@ -10713,8 +10717,8 @@ qualify_ambiguous_name (id)
- NAME is declared by exactly on type-import-on-demand declaration - NAME is declared by exactly on type-import-on-demand declaration
of the compilation unit containing NAME. of the compilation unit containing NAME.
- NAME is actually a STRING_CST. */ - NAME is actually a STRING_CST. */
else if (TREE_CODE (name) == STRING_CST || else if (TREE_CODE (name) == STRING_CST || TREE_CODE (name) == INTEGER_CST
(decl = resolve_and_layout (name, NULL_TREE))) || (decl = resolve_and_layout (name, NULL_TREE)))
{ {
RESOLVE_TYPE_NAME_P (qual_wfl) = 1; RESOLVE_TYPE_NAME_P (qual_wfl) = 1;
QUAL_RESOLUTION (qual) = decl; QUAL_RESOLUTION (qual) = decl;
......
...@@ -7942,6 +7942,9 @@ qualify_ambiguous_name (id) ...@@ -7942,6 +7942,9 @@ qualify_ambiguous_name (id)
&& TREE_CODE (TREE_TYPE (qual_wfl)) == EXPR_WITH_FILE_LOCATION) && TREE_CODE (TREE_TYPE (qual_wfl)) == EXPR_WITH_FILE_LOCATION)
name = EXPR_WFL_NODE (TREE_TYPE (qual_wfl)); name = EXPR_WFL_NODE (TREE_TYPE (qual_wfl));
else if (code == INTEGER_CST)
name = qual_wfl;
else if ((code == ARRAY_REF || code == CALL_EXPR || code == MODIFY_EXPR) && else if ((code == ARRAY_REF || code == CALL_EXPR || code == MODIFY_EXPR) &&
TREE_CODE (TREE_OPERAND (qual_wfl, 0)) == EXPR_WITH_FILE_LOCATION) TREE_CODE (TREE_OPERAND (qual_wfl, 0)) == EXPR_WITH_FILE_LOCATION)
name = EXPR_WFL_NODE (TREE_OPERAND (qual_wfl, 0)); name = EXPR_WFL_NODE (TREE_OPERAND (qual_wfl, 0));
...@@ -7996,8 +7999,9 @@ qualify_ambiguous_name (id) ...@@ -7996,8 +7999,9 @@ qualify_ambiguous_name (id)
declaration or parameter declaration, then it is an expression declaration or parameter declaration, then it is an expression
name. We don't carry this test out if we're in the context of the name. We don't carry this test out if we're in the context of the
use of SUPER or THIS */ use of SUPER or THIS */
if (!this_found && !super_found && if (!this_found && !super_found
TREE_CODE (name) != STRING_CST && (decl = IDENTIFIER_LOCAL_VALUE (name))) && TREE_CODE (name) != STRING_CST && TREE_CODE (name) != INTEGER_CST
&& (decl = IDENTIFIER_LOCAL_VALUE (name)))
{ {
RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1; RESOLVE_EXPRESSION_NAME_P (qual_wfl) = 1;
QUAL_RESOLUTION (qual) = decl; QUAL_RESOLUTION (qual) = decl;
...@@ -8023,8 +8027,8 @@ qualify_ambiguous_name (id) ...@@ -8023,8 +8027,8 @@ qualify_ambiguous_name (id)
- NAME is declared by exactly on type-import-on-demand declaration - NAME is declared by exactly on type-import-on-demand declaration
of the compilation unit containing NAME. of the compilation unit containing NAME.
- NAME is actually a STRING_CST. */ - NAME is actually a STRING_CST. */
else if (TREE_CODE (name) == STRING_CST || else if (TREE_CODE (name) == STRING_CST || TREE_CODE (name) == INTEGER_CST
(decl = resolve_and_layout (name, NULL_TREE))) || (decl = resolve_and_layout (name, NULL_TREE)))
{ {
RESOLVE_TYPE_NAME_P (qual_wfl) = 1; RESOLVE_TYPE_NAME_P (qual_wfl) = 1;
QUAL_RESOLUTION (qual) = decl; QUAL_RESOLUTION (qual) = decl;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment