fold-const.c (build_range_check): Use proper type for subtraction when merging lower bound.

* fold-const.c (build_range_check): Use proper type for subtraction
	when merging lower bound.

From-SVN: r107178
This commit is contained in:
Richard Kenner 2005-11-18 13:07:06 +00:00 committed by Richard Kenner
parent 7697e6c66a
commit 438090c372
2 changed files with 21 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2005-11-18 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* fold-const.c (build_range_check): Use proper type for subtraction
when merging lower bound.
2005-11-18 Zdenek Dvorak <dvorakz@suse.cz>
PR rtl-optimization/24497

View File

@ -4062,10 +4062,22 @@ build_range_check (tree type, tree exp, int in_p, tree low, tree high)
}
if (value != 0 && ! TREE_OVERFLOW (value))
return build_range_check (type,
fold_build2 (MINUS_EXPR, etype, exp, low),
1, fold_convert (etype, integer_zero_node),
value);
{
/* 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 (INTEGRAL_TYPE_P (etype) && TREE_TYPE (etype))
{
etype = TREE_TYPE (etype);
exp = fold_convert (etype, exp);
low = fold_convert (etype, low);
value = fold_convert (etype, value);
}
return build_range_check (type,
fold_build2 (MINUS_EXPR, etype, exp, low),
1, build_int_cst (etype, 0), value);
}
return 0;
}