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:
Richard Guenther 2012-01-03 08:59:21 +00:00 committed by Richard Biener
parent 96fda42cb4
commit 8b3c295192
4 changed files with 39 additions and 0 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View 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" } } */