From: Richard Stallman Date: Fri, 19 Feb 1993 05:46:22 +0000 (+0000) Subject: (convert_to_integer): Warn if integer is truncated and that changes the value. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4c42625bf5de7f1ae018bc45594ec7e39589af75;p=gcc.git (convert_to_integer): Warn if integer is truncated and that changes the value. From-SVN: r3496 --- diff --git a/gcc/convert.c b/gcc/convert.c index c67f510188c..0833a5fbcd7 100644 --- a/gcc/convert.c +++ b/gcc/convert.c @@ -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. */