(convert_to_integer): Warn if integer is truncated and that changes the value.

From-SVN: r3496
This commit is contained in:
Richard Stallman 1993-02-19 05:46:22 +00:00
parent 3c15ff863f
commit 4c42625bf5

View File

@ -172,6 +172,30 @@ convert_to_integer (type, expr)
switch (ex_form)
{
case INTEGER_CST:
if (TREE_UNSIGNED (type))
{
if (TREE_INT_CST_LOW (expr) >> outprec)
warning ("integer constant truncated");
}
else
{
/* if the sign bit of the low-order part isn't replicated
through the entire high part, we have overflow */
int sign = TREE_INT_CST_LOW (expr) & (1 << (outprec - 1));
if (!sign) /* lower part positive */
{
if (TREE_INT_CST_LOW (expr) >> outprec)
warning ("integer constant truncated");
}
else
{
if ((TREE_INT_CST_LOW (expr) >> outprec) + 1)
warning ("integer constant truncated");
}
}
break;
case RSHIFT_EXPR:
/* We can pass truncation down through right shifting
when the shift count is a nonpositive constant. */