This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: 4.0: Fix PR 21540


This patch backports the fix for bugs 21540 and 13788 to the 4.0 branch. It also adds the apropriate test cases to the libjava test suite and updates jacks.xfail.

I'm checking this in.

Bryce

2005-10-12  Tom Tromey  <tromey@redhat.com>

	PR java/21540, PR java/13788:
	* parse.y (java_complete_lhs) <CASE_EXPR>: Use
	fold_constant_for_init.
	(patch_binop): Added 'folding' argument.  Updated all callers.
	(patch_unaryop) <NOP_EXPR>: New case.
	(fold_constant_for_init) <NOP_EXPR>: Likewise.
	(fold_constant_for_init) <COND_EXPR>: Fix sense of test.

2005-10-12  Andreas Tobler  <a.tobler@schweiz.ch>

	* testsuite/libjava.jacks/jacks.xfail: Remove 15.21-assoc-7,
	15.21-assoc-8, 15.21-equal-3, 15.28-string-11.

2005-10-12  Tom Tromey  <tromey@redhat.com>

	PR java/21540, PR java/13788:
	* testsuite/libjava.compile/pr21540.java: New file.
	* testsuite/libjava.compile/pr13788.java: New file.
	* testsuite/libjava.jacks/jacks.xfail: Updated.

Index: gcc/java/parse.y
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v
retrieving revision 1.528.6.5
diff -u -r1.528.6.5 parse.y
--- gcc/java/parse.y	5 Oct 2005 19:35:45 -0000	1.528.6.5
+++ gcc/java/parse.y	13 Oct 2005 01:06:44 -0000
@@ -162,7 +162,7 @@
 static tree build_assignment (int, int, tree, tree);
 static tree build_binop (enum tree_code, int, tree, tree);
 static tree patch_assignment (tree, tree);
-static tree patch_binop (tree, tree, tree);
+static tree patch_binop (tree, tree, tree, int);
 static tree build_unaryop (int, int, tree);
 static tree build_incdec (int, int, tree, int);
 static tree patch_unaryop (tree, tree);
@@ -11852,8 +11852,13 @@
 
       /* First, the case expression must be constant. Values of final
          fields are accepted. */
+      nn = fold_constant_for_init (cn, NULL_TREE);
+      if (nn != NULL_TREE)
+	cn = nn;
+
       cn = fold (cn);
-      if ((TREE_CODE (cn) == COMPOUND_EXPR || TREE_CODE (cn) == COMPONENT_REF)
+      if ((TREE_CODE (cn) == COMPOUND_EXPR
+	   || TREE_CODE (cn) == COMPONENT_REF)
 	  && JDECL_P (TREE_OPERAND (cn, 1))
 	  && FIELD_FINAL (TREE_OPERAND (cn, 1))
 	  && DECL_INITIAL (TREE_OPERAND (cn, 1)))
@@ -12372,7 +12377,7 @@
 
           TREE_OPERAND (node, 1) = nn;
         }
-      return patch_binop (node, wfl_op1, wfl_op2);
+      return patch_binop (node, wfl_op1, wfl_op2, 0);
 
     case INSTANCEOF_EXPR:
       wfl_op1 = TREE_OPERAND (node, 0);
@@ -12382,7 +12387,7 @@
 	  TREE_TYPE (node) = boolean_type_node;
 	  return node;
 	}
-      return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1));
+      return patch_binop (node, wfl_op1, TREE_OPERAND (node, 1), 0);
 
     case UNARY_PLUS_EXPR:
     case NEGATE_EXPR:
@@ -13517,7 +13522,7 @@
    of remaining nodes and detects more errors in certain cases.  */
 
 static tree
-patch_binop (tree node, tree wfl_op1, tree wfl_op2)
+patch_binop (tree node, tree wfl_op1, tree wfl_op2, int folding)
 {
   tree op1 = TREE_OPERAND (node, 0);
   tree op2 = TREE_OPERAND (node, 1);
@@ -13699,16 +13704,14 @@
 			    build_int_cst (NULL_TREE, 0x3f)));
 
       /* The >>> operator is a >> operating on unsigned quantities */
-      if (code == URSHIFT_EXPR && ! flag_emit_class_files)
+      if (code == URSHIFT_EXPR && (folding || ! flag_emit_class_files))
 	{
 	  tree to_return;
           tree utype = java_unsigned_type (prom_type);
           op1 = convert (utype, op1);
-	  TREE_SET_CODE (node, RSHIFT_EXPR);
-          TREE_OPERAND (node, 0) = op1;
-          TREE_OPERAND (node, 1) = op2;
-          TREE_TYPE (node) = utype;
-	  to_return = convert (prom_type, node);
+
+	  to_return = fold (build2 (RSHIFT_EXPR, utype, op1, op2));
+	  to_return = convert (prom_type, to_return);
 	  /* Copy the original value of the COMPOUND_ASSIGN_P flag */
 	  COMPOUND_ASSIGN_P (to_return) = COMPOUND_ASSIGN_P (node);
 	  TREE_SIDE_EFFECTS (to_return)
@@ -14494,6 +14497,12 @@
 	  return value;
 	}
       break;
+
+    case NOP_EXPR:
+      /* This can only happen when the type is already known.  */
+      gcc_assert (TREE_TYPE (node) != NULL_TREE);
+      prom_type = TREE_TYPE (node);
+      break;
     }
 
   if (error_found)
@@ -16306,13 +16315,14 @@
       if (val == NULL_TREE || ! TREE_CONSTANT (val))
 	return NULL_TREE;
       TREE_OPERAND (node, 1) = val;
-      return patch_binop (node, op0, op1);
+      return patch_binop (node, op0, op1, 1);
 
     case UNARY_PLUS_EXPR:
     case NEGATE_EXPR:
     case TRUTH_NOT_EXPR:
     case BIT_NOT_EXPR:
     case CONVERT_EXPR:
+    case NOP_EXPR:
       op0 = TREE_OPERAND (node, 0);
       val = fold_constant_for_init (op0, context);
       if (val == NULL_TREE || ! TREE_CONSTANT (val))
@@ -16338,8 +16348,8 @@
       if (val == NULL_TREE || ! TREE_CONSTANT (val))
 	return NULL_TREE;
       TREE_OPERAND (node, 2) = val;
-      return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 1)
-	: TREE_OPERAND (node, 2);
+      return integer_zerop (TREE_OPERAND (node, 0)) ? TREE_OPERAND (node, 2)
+	: TREE_OPERAND (node, 1);
 
     case VAR_DECL:
     case FIELD_DECL:
Index: libjava/testsuite/libjava.jacks/jacks.xfail
===================================================================
RCS file: /cvs/gcc/gcc/libjava/testsuite/libjava.jacks/jacks.xfail,v
retrieving revision 1.19.8.3
diff -u -r1.19.8.3 jacks.xfail
--- libjava/testsuite/libjava.jacks/jacks.xfail	5 Oct 2005 19:35:45 -0000	1.19.8.3
+++ libjava/testsuite/libjava.jacks/jacks.xfail	13 Oct 2005 01:06:44 -0000
@@ -249,9 +249,6 @@
 15.18.1-float-9
 15.18.1-valid-1
 15.20-2-runtime-1
-15.21-assoc-7
-15.21-assoc-8
-15.21-equal-3
 15.25-runtime-1
 15.26.2-add-12
 15.26.2-and-10
@@ -275,9 +272,7 @@
 15.28-null-1
 15.28-null-3
 15.28-primitive-15
-15.28-primitive-16
 15.28-primitive-17
-15.28-primitive-9
 15.28-qualified-name-10
 15.28-qualified-name-5
 15.28-qualified-name-6
@@ -293,9 +288,7 @@
 15.28-simple-namestr-2
 15.28-simple-namestr-3
 15.28-simple-namestr-4
-15.28-string-11
 15.28-string-15
-15.28-string-16
 15.28-string-17
 15.28-string-18
 15.28-string-2
@@ -454,27 +447,11 @@
 5.1.2-btf-1
 5.1.2-btf-3
 5.1.2-btf-5
-5.1.2-bti-1
-5.1.2-bti-3
-5.1.2-bti-5
-5.1.2-btl-1
-5.1.2-btl-3
-5.1.2-btl-5
-5.1.2-bts-1
-5.1.2-bts-2
-5.1.2-bts-3
-5.1.2-bts-4
-5.1.2-bts-5
 5.1.2-std-3
 5.1.2-std-5
 5.1.2-stf-1
 5.1.2-stf-3
 5.1.2-stf-5
-5.1.2-sti-1
-5.1.2-sti-5
-5.1.2-stl-1
-5.1.2-stl-3
-5.1.2-stl-5
 6.3-1
 6.5.1-type-15
 6.5.1-type-16

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]