From 4c42625bf5de7f1ae018bc45594ec7e39589af75 Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Fri, 19 Feb 1993 05:46:22 +0000 Subject: [PATCH] (convert_to_integer): Warn if integer is truncated and that changes the value. From-SVN: r3496 --- gcc/convert.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) 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. */ -- 2.30.2