(convert_to_integer): When we want to return zero, be sure we honor

any side-effects in our operand.

From-SVN: r4255
This commit is contained in:
Richard Kenner 1993-04-28 06:16:57 -04:00
parent 3dc4a939b9
commit d9a9c5a7b3
1 changed files with 16 additions and 5 deletions

View File

@ -199,11 +199,22 @@ convert_to_integer (type, expr)
/* In this case, shifting is like multiplication. */
goto trunc1;
else
/* If it is >= that width, result is zero.
Handling this with trunc1 would give the wrong result:
(int) ((long long) a << 32) is well defined (as 0)
but (int) a << 32 is undefined and would get a warning. */
return convert_to_integer (type, integer_zero_node);
{
/* If it is >= that width, result is zero.
Handling this with trunc1 would give the wrong result:
(int) ((long long) a << 32) is well defined (as 0)
but (int) a << 32 is undefined and would get a
warning. */
tree t = convert_to_integer (type, integer_zero_node);
/* If the original expression had side-effects, we must
preserve it. */
if (TREE_SIDE_EFFECTS (expr))
return build (COMPOUND_EXPR, type, expr, t);
else
return t;
}
}
break;