re PR middle-end/22429 (-1073741824 <= n && n <= 1073741823 is true where n is 1073741824)
PR 22429 * fold-const.c (build_range_check): Use unsigned when signed overflow is undefined also. If etype is subtype, make sure that the subtraction is in the supertype. From-SVN: r106400
This commit is contained in:
parent
88a33c3406
commit
b426200a44
|
@ -1,3 +1,10 @@
|
|||
2005-11-02 Andrew Pinski <pinskia@physics.uc.edu>
|
||||
|
||||
PR 22429
|
||||
* fold-const.c (build_range_check): Use unsigned when signed
|
||||
overflow is undefined also. If etype is subtype, make sure that
|
||||
the subtraction is in the supertype.
|
||||
|
||||
2005-11-02 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR target/24178
|
||||
|
|
|
@ -4014,7 +4014,8 @@ build_range_check (tree type, tree exp, int in_p, tree low, tree high)
|
|||
}
|
||||
|
||||
value = const_binop (MINUS_EXPR, high, low, 0);
|
||||
if (value != 0 && TREE_OVERFLOW (value) && ! TYPE_UNSIGNED (etype))
|
||||
if (value != 0 && (!flag_wrapv || TREE_OVERFLOW (value))
|
||||
&& ! TYPE_UNSIGNED (etype))
|
||||
{
|
||||
tree utype, minv, maxv;
|
||||
|
||||
|
@ -4025,6 +4026,11 @@ build_range_check (tree type, tree exp, int in_p, tree low, tree high)
|
|||
case INTEGER_TYPE:
|
||||
case ENUMERAL_TYPE:
|
||||
case CHAR_TYPE:
|
||||
/* There is no requirement that LOW be within the range of ETYPE
|
||||
if the latter is a subtype. It must, however, be within the base
|
||||
type of ETYPE. So be sure we do the subtraction in that type. */
|
||||
if (TREE_TYPE (etype))
|
||||
etype = TREE_TYPE (etype);
|
||||
utype = lang_hooks.types.unsigned_type (etype);
|
||||
maxv = fold_convert (utype, TYPE_MAX_VALUE (etype));
|
||||
maxv = range_binop (PLUS_EXPR, NULL_TREE, maxv, 1,
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
extern void abort (void);
|
||||
|
||||
#define N (1 << (sizeof(int) * __CHAR_BIT__ - 2))
|
||||
|
||||
int f(int n)
|
||||
{
|
||||
if (-N <= n && n <= N-1)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
if (f (N))
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue