From bd23343072e6e7e6f52c23c6b2e164c2c81e838a Mon Sep 17 00:00:00 2001 From: rguenth Date: Tue, 30 Dec 2008 10:28:01 +0000 Subject: [PATCH] 2008-12-30 Richard Guenther PR middle-end/38564 * fold-const.c (fold_comparison): Use the correct result type. * gcc.c-torture/compile/pr38564.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142961 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/fold-const.c | 12 ++++++------ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr38564.c | 22 ++++++++++++++++++++++ 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr38564.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 603b68d0b4d..1772b608765 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-12-30 Richard Guenther + + PR middle-end/38564 + * fold-const.c (fold_comparison): Use the correct result type. + 2008-12-30 Dorit Nuzman Ira Rosen diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 74a0a87d3cc..be542b773b2 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 4f010a2782d..7c6dc8d5a1f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-12-30 Richard Guenther + + PR middle-end/38564 + * gcc.c-torture/compile/pr38564.c: New testcase. + 2008-12-29 Dorit Nuzman Ira Rosen 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 00000000000..de365cc1f55 --- /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); +} -- 2.11.0