From: Alexandre Petit-Bianco Date: Wed, 8 Mar 2000 00:30:06 +0000 (+0000) Subject: re GNATS gcj/94 (compiler allows assignment to interface constants) X-Git-Tag: prereleases/libstdc++-2.92~7816 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6632dcdd410754a2c25a117cae5fab151b94c6b4;p=thirdparty%2Fgcc.git re GNATS gcj/94 (compiler allows assignment to interface constants) 2000-02-22 Alexandre Petit-Bianco * parse.y (check_final_assignment): Extended to process COMPOUND_EXPR. (patch_assignment): Have check_final_assignment called only once. (This fixes the Java PR #94: http://sourceware.cygnus.com/ml/java-prs/1999-q4/msg00125.html) From-SVN: r32396 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index a125f421baae..205e8475a84b 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,9 @@ +2000-03-07 Alexandre Petit-Bianco + + * parse.y (check_final_assignment): Extended to process + COMPOUND_EXPR. + (patch_assignment): Have check_final_assignment called only once. + 2000-03-07 Alexandre Petit-Bianco * java-tree.h (IS_INIT_CHECKED): New flag. diff --git a/gcc/java/parse.c b/gcc/java/parse.c index c01910138bd3..59a1b5a5405a 100644 --- a/gcc/java/parse.c +++ b/gcc/java/parse.c @@ -11771,6 +11771,10 @@ static int check_final_assignment (lvalue, wfl) tree lvalue, wfl; { + if (TREE_CODE (lvalue) == COMPOUND_EXPR + && JDECL_P (TREE_OPERAND (lvalue, 1))) + lvalue = TREE_OPERAND (lvalue, 1); + if (JDECL_P (lvalue) && FIELD_FINAL (lvalue) && !IS_CLINIT (current_function_decl)) { @@ -11850,7 +11854,7 @@ patch_assignment (node, wfl_op1, wfl_op2) else if (TREE_CODE (wfl_op1) == EXPR_WITH_FILE_LOCATION && resolve_expression_name (wfl_op1, &llvalue)) { - if (check_final_assignment (llvalue, wfl_op1)) + if (!error_found && check_final_assignment (llvalue, wfl_op1)) { /* What we should do instead is resetting the all the flags previously set, exchange lvalue for llvalue and continue. */ @@ -13516,9 +13520,11 @@ patch_newarray (node) for (cdim = dims; cdim; cdim = TREE_CHAIN (cdim)) { type = array_type; - array_type = build_java_array_type (type, - TREE_CODE (cdim) == INTEGER_CST ? - TREE_INT_CST_LOW (cdim) : -1); + array_type + = build_java_array_type (type, + TREE_CODE (cdim) == INTEGER_CST + ? (HOST_WIDE_INT) TREE_INT_CST_LOW (cdim) + : -1); array_type = promote_type (array_type); } dims = nreverse (dims); diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 2196968a5f39..1d8d68b930f4 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -9081,6 +9081,10 @@ static int check_final_assignment (lvalue, wfl) tree lvalue, wfl; { + if (TREE_CODE (lvalue) == COMPOUND_EXPR + && JDECL_P (TREE_OPERAND (lvalue, 1))) + lvalue = TREE_OPERAND (lvalue, 1); + if (JDECL_P (lvalue) && FIELD_FINAL (lvalue) && !IS_CLINIT (current_function_decl)) { @@ -9160,7 +9164,7 @@ patch_assignment (node, wfl_op1, wfl_op2) else if (TREE_CODE (wfl_op1) == EXPR_WITH_FILE_LOCATION && resolve_expression_name (wfl_op1, &llvalue)) { - if (check_final_assignment (llvalue, wfl_op1)) + if (!error_found && check_final_assignment (llvalue, wfl_op1)) { /* What we should do instead is resetting the all the flags previously set, exchange lvalue for llvalue and continue. */