diff options
author | Richard Guenther <rguenther@suse.de> | 2008-12-30 10:28:01 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-12-30 10:28:01 +0000 |
commit | b0331ccbe2cd52043b328f1bbd07f8f75bc9b97e (patch) | |
tree | 9d001283408b27bd22fd3e7978b27d4df23a90a6 | |
parent | 1721382102e3b912f547d92fdfe7309225dd79d6 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fold-const.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr38564.c | 22 |
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); +} |