re PR c/51730 (autoconf 2.60 through 2.67 stdbool.h check fails with GCC 4.7)
2012-01-03 Richard Guenther <rguenther@suse.de> PR middle-end/51730 * fold-const.c (fold_comparison): Properly canonicalize tree offset and HOST_WIDE_INT bit position. * gcc.dg/fold-compare-6.c: New testcase. From-SVN: r182830
This commit is contained in:
parent
96fda42cb4
commit
8b3c295192
4 changed files with 39 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2012-01-03 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/51730
|
||||
* fold-const.c (fold_comparison): Properly canonicalize
|
||||
tree offset and HOST_WIDE_INT bit position.
|
||||
|
||||
2012-01-02 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/ia64/ia64.c (expand_vec_perm_broadcast): Use correct
|
||||
|
|
|
@ -8886,6 +8886,14 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
|
|||
indirect_base0 = true;
|
||||
}
|
||||
offset0 = TREE_OPERAND (arg0, 1);
|
||||
if (host_integerp (offset0, 0)
|
||||
&& ((HOST_WIDE_INT) (TREE_INT_CST_LOW (offset0) * BITS_PER_UNIT)
|
||||
/ BITS_PER_UNIT
|
||||
== (HOST_WIDE_INT) TREE_INT_CST_LOW (offset0)))
|
||||
{
|
||||
bitpos0 = TREE_INT_CST_LOW (offset0) * BITS_PER_UNIT;
|
||||
offset0 = NULL_TREE;
|
||||
}
|
||||
}
|
||||
|
||||
base1 = arg1;
|
||||
|
@ -8909,6 +8917,14 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
|
|||
indirect_base1 = true;
|
||||
}
|
||||
offset1 = TREE_OPERAND (arg1, 1);
|
||||
if (host_integerp (offset1, 0)
|
||||
&& ((HOST_WIDE_INT) (TREE_INT_CST_LOW (offset1) * BITS_PER_UNIT)
|
||||
/ BITS_PER_UNIT
|
||||
== (HOST_WIDE_INT) TREE_INT_CST_LOW (offset1)))
|
||||
{
|
||||
bitpos1 = TREE_INT_CST_LOW (offset1) * BITS_PER_UNIT;
|
||||
offset1 = NULL_TREE;
|
||||
}
|
||||
}
|
||||
|
||||
/* A local variable can never be pointed to by
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2012-01-03 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/51730
|
||||
* gcc.dg/fold-compare-6.c: New testcase.
|
||||
|
||||
2012-01-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/51669
|
||||
|
|
12
gcc/testsuite/gcc.dg/fold-compare-6.c
Normal file
12
gcc/testsuite/gcc.dg/fold-compare-6.c
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-fdump-tree-original" } */
|
||||
|
||||
char digs[] = "0123456789";
|
||||
int foo (void)
|
||||
{
|
||||
int xlcbug = 1 / (&(digs + 5)[-2 + (_Bool) 1] == &digs[4] ? 1 : -1);
|
||||
return xlcbug;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "xlcbug = 1;" "original" } } */
|
||||
/* { dg-final { cleanup-tree-dump "original" } } */
|
Loading…
Add table
Reference in a new issue