Commit bdb55eae by Richard Guenther Committed by Richard Biener

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
parent 2e2c7ce2
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> 2008-01-16 Uros Bizjak <ubizjak@gmail.com>
PR debug/34249 PR debug/34249
......
...@@ -2122,8 +2122,22 @@ fold_convert_const_int_from_int (tree type, const_tree arg1) ...@@ -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), t = force_fit_type_double (type, TREE_INT_CST_LOW (arg1),
TREE_INT_CST_HIGH (arg1), TREE_INT_CST_HIGH (arg1),
/* Don't set the overflow when /* Don't set the overflow when
converting a pointer */ converting from a pointer, */
!POINTER_TYPE_P (TREE_TYPE (arg1)), !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 (TREE_INT_CST_HIGH (arg1) < 0
&& (TYPE_UNSIGNED (type) && (TYPE_UNSIGNED (type)
< TYPE_UNSIGNED (TREE_TYPE (arg1)))) < TYPE_UNSIGNED (TREE_TYPE (arg1))))
......
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> 2008-01-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/tree-ssa/loop-19.c: Require nonpic. * gcc.dg/tree-ssa/loop-19.c: Require nonpic.
/* { dg-do compile } */
/* { dg-options "-Wall" } */
int f(char *device)
{
return device == ((char *)0 + ~0UL); /* { dg-bogus "overflow" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment