(pointer_int_sum): Don't distribute if intop is unsigned and not the

same size as ptrop.

From-SVN: r10186
This commit is contained in:
Richard Kenner 1995-07-28 09:36:30 -04:00
parent 307d8cd67d
commit ba11c17994
1 changed files with 7 additions and 1 deletions

View File

@ -2648,7 +2648,13 @@ pointer_int_sum (resultcode, ptrop, intop)
&& TREE_CONSTANT (size_exp)
/* If the constant comes from pointer subtraction,
skip this optimization--it would cause an error. */
&& TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE)
&& TREE_CODE (TREE_TYPE (TREE_OPERAND (intop, 0))) == INTEGER_TYPE
/* If the constant is unsigned, and smaller than the pointer size,
then we must skip this optimization. This is because it could cause
an overflow error if the constant is negative but INTOP is not. */
&& (! TREE_UNSIGNED (TREE_TYPE (intop))
|| (TYPE_PRECISION (TREE_TYPE (intop))
== TYPE_PRECISION (TREE_TYPE (ptrop)))))
{
enum tree_code subcode = resultcode;
tree int_type = TREE_TYPE (intop);