OSDN Git Service

2000-02-22 Alexandre Petit-Bianco <apbianco@cygnus.com>
authorapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Mar 2000 00:30:06 +0000 (00:30 +0000)
committerapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 8 Mar 2000 00:30:06 +0000 (00:30 +0000)
* 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)

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32396 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/parse.c
gcc/java/parse.y

index a125f42..205e847 100644 (file)
@@ -1,5 +1,11 @@
 2000-03-07  Alexandre Petit-Bianco  <apbianco@cygnus.com>
 
+       * 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  <apbianco@cygnus.com>
+
        * java-tree.h (IS_INIT_CHECKED): New flag.
        * check-init.c (check_init): Test and set IS_INIT_CHECKED.
        * parse.y (patch_string): Call force_evaluation_order on the
index c019101..59a1b5a 100644 (file)
@@ -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);
index 2196968..1d8d68b 100644 (file)
@@ -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. */