]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/38564 (Revision 142662 caused ICE in insert_into_preds_of_block)
authorRichard Guenther <rguenther@suse.de>
Tue, 30 Dec 2008 10:28:01 +0000 (10:28 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 30 Dec 2008 10:28:01 +0000 (10:28 +0000)
2008-12-30  Richard Guenther  <rguenther@suse.de>

PR middle-end/38564
* fold-const.c (fold_comparison): Use the correct result type.

* gcc.c-torture/compile/pr38564.c: New testcase.

From-SVN: r142961

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr38564.c [new file with mode: 0644]

index 603b68d0b4da5a4394f22206b3b0eb5af49be38c..1772b608765dc1e122a5480dbc154c741d36cf93 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-30  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/38564
+       * fold-const.c (fold_comparison): Use the correct result type.
+
 2008-12-30  Dorit Nuzman  <dorit@il.ibm.com>
             Ira Rosen  <irar@il.ibm.com>
 
index 74a0a87d3cc29e040a6291e9da180905c334f26b..be542b773b2043fc4b56ce081de8025ba3936f9b 100644 (file)
@@ -9036,17 +9036,17 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
              switch (code)
                {
                case EQ_EXPR:
-                 return build_int_cst (boolean_type_node, bitpos0 == bitpos1);
+                 return constant_boolean_node (bitpos0 == bitpos1, type);
                case NE_EXPR:
-                 return build_int_cst (boolean_type_node, bitpos0 != bitpos1);
+                 return constant_boolean_node (bitpos0 != bitpos1, type);
                case LT_EXPR:
-                 return build_int_cst (boolean_type_node, bitpos0 < bitpos1);
+                 return constant_boolean_node (bitpos0 < bitpos1, type);
                case LE_EXPR:
-                 return build_int_cst (boolean_type_node, bitpos0 <= bitpos1);
+                 return constant_boolean_node (bitpos0 <= bitpos1, type);
                case GE_EXPR:
-                 return build_int_cst (boolean_type_node, bitpos0 >= bitpos1);
+                 return constant_boolean_node (bitpos0 >= bitpos1, type);
                case GT_EXPR:
-                 return build_int_cst (boolean_type_node, bitpos0 > bitpos1);
+                 return constant_boolean_node (bitpos0 > bitpos1, type);
                default:;
                }
            }
index 4f010a2782d5684577707f2c31ac4b891a399675..7c6dc8d5a1f3ef98f813a33f4d8d71d1918b6504 100644 (file)
@@ -1,3 +1,8 @@
+2008-12-30  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/38564
+       * gcc.c-torture/compile/pr38564.c: New testcase.
+
 2008-12-29  Dorit Nuzman  <dorit@il.ibm.com>
             Ira Rosen  <irar@il.ibm.com>
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr38564.c b/gcc/testsuite/gcc.c-torture/compile/pr38564.c
new file mode 100644 (file)
index 0000000..de365cc
--- /dev/null
@@ -0,0 +1,22 @@
+struct S
+{
+  struct S *n, *p;
+} *s;
+
+void bar (void *);
+
+int
+foo (int x)
+{
+  struct S p = { &p, &p };
+  int i;
+  for (i = 0; i < x; i++)
+    bar (s);
+  return p.n == &p;
+}
+
+int dialog_calendar(int state)
+{
+  int *obj = (state == 1 ? &state : 0);
+  return (obj == &state);
+}