aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-12-30 10:28:01 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-12-30 10:28:01 +0000
commitb0331ccbe2cd52043b328f1bbd07f8f75bc9b97e (patch)
tree9d001283408b27bd22fd3e7978b27d4df23a90a6
parent1721382102e3b912f547d92fdfe7309225dd79d6 (diff)
downloadgcc-b0331ccbe2cd52043b328f1bbd07f8f75bc9b97e.zip
gcc-b0331ccbe2cd52043b328f1bbd07f8f75bc9b97e.tar.gz
gcc-b0331ccbe2cd52043b328f1bbd07f8f75bc9b97e.tar.bz2
re PR tree-optimization/38564 (Revision 142662 caused ICE in insert_into_preds_of_block)
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
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/fold-const.c12
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr38564.c22
4 files changed, 38 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 603b68d..1772b60 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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>
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 74a0a87..be542b7 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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:;
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4f010a2..7c6dc8d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..de365cc
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr38564.c
@@ -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);
+}