re PR middle-end/32628 (bogus integer overflow warning)

2008-01-16  Richard Guenther  <rguenther@suse.de>

	PR middle-end/32628
	* fold-const.c (fold_convert_const_int_from_int): Do not
	set overflow if that occured only because of a sign extension
	change when converting from/to a sizetype with the same
	precision and signedness.

	* gcc.dg/overflow-warn-7.c: New testcase.

From-SVN: r131579
This commit is contained in:
Richard Guenther 2008-01-16 21:51:57 +00:00 committed by Richard Biener
parent 2e2c7ce237
commit bdb55eae5e
4 changed files with 37 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2008-01-16 Richard Guenther <rguenther@suse.de>
PR middle-end/32628
* fold-const.c (fold_convert_const_int_from_int): Do not
set overflow if that occured only because of a sign extension
change when converting from/to a sizetype with the same
precision and signedness.
2008-01-16 Uros Bizjak <ubizjak@gmail.com>
PR debug/34249

View File

@ -2122,8 +2122,22 @@ fold_convert_const_int_from_int (tree type, const_tree arg1)
t = force_fit_type_double (type, TREE_INT_CST_LOW (arg1),
TREE_INT_CST_HIGH (arg1),
/* Don't set the overflow when
converting a pointer */
!POINTER_TYPE_P (TREE_TYPE (arg1)),
converting from a pointer, */
!POINTER_TYPE_P (TREE_TYPE (arg1))
/* or to a sizetype with same signedness
and the precision is unchanged.
??? sizetype is always sign-extended,
but its signedness depends on the
frontend. Thus we see spurious overflows
here if we do not check this. */
&& !((TYPE_PRECISION (TREE_TYPE (arg1))
== TYPE_PRECISION (type))
&& (TYPE_UNSIGNED (TREE_TYPE (arg1))
== TYPE_UNSIGNED (type))
&& ((TREE_CODE (TREE_TYPE (arg1)) == INTEGER_TYPE
&& TYPE_IS_SIZETYPE (TREE_TYPE (arg1)))
|| (TREE_CODE (type) == INTEGER_TYPE
&& TYPE_IS_SIZETYPE (type)))),
(TREE_INT_CST_HIGH (arg1) < 0
&& (TYPE_UNSIGNED (type)
< TYPE_UNSIGNED (TREE_TYPE (arg1))))

View File

@ -1,3 +1,8 @@
2008-01-16 Richard Guenther <rguenther@suse.de>
PR middle-end/32628
* gcc.dg/overflow-warn-7.c: New testcase.
2008-01-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/tree-ssa/loop-19.c: Require nonpic.

View File

@ -0,0 +1,8 @@
/* { dg-do compile } */
/* { dg-options "-Wall" } */
int f(char *device)
{
return device == ((char *)0 + ~0UL); /* { dg-bogus "overflow" } */
}