aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-common.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-03-13 08:31:27 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-03-13 08:31:27 -0500
commitc05f751c24182e733cb986b7660ec1223be52428 (patch)
treea926aec850cd012df0b2f7d28cf873eacb06f676 /gcc/c-common.c
parent649ff3b44f1adaca0ee5c2a51f568f334cb476eb (diff)
downloadgcc-c05f751c24182e733cb986b7660ec1223be52428.zip
gcc-c05f751c24182e733cb986b7660ec1223be52428.tar.gz
gcc-c05f751c24182e733cb986b7660ec1223be52428.tar.bz2
(constant_expression_warning, overflow_warning): Handle REAL_CST and
COMPLEX_CST. From-SVN: r6769
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r--gcc/c-common.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index b71a425..ecdeb8f 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -1078,9 +1078,10 @@ void
constant_expression_warning (value)
tree value;
{
- if (TREE_CODE (value) == INTEGER_CST && TREE_CONSTANT_OVERFLOW (value))
- if (pedantic)
- pedwarn ("overflow in constant expression");
+ if ((TREE_CODE (value) == INTEGER_CST || TREE_CODE (value) == REAL_CST
+ || TREE_CODE (value) == COMPLEX_CST)
+ && TREE_CONSTANT_OVERFLOW (value) && pedantic)
+ pedwarn ("overflow in constant expression");
}
/* Print a warning if an expression had overflow in folding.
@@ -1094,11 +1095,22 @@ void
overflow_warning (value)
tree value;
{
- if (TREE_CODE (value) == INTEGER_CST && TREE_OVERFLOW (value))
+ if ((TREE_CODE (value) == INTEGER_CST
+ || (TREE_CODE (value) == COMPLEX_CST
+ && TREE_CODE (TREE_REALPART (value)) == INTEGER_CST))
+ && TREE_OVERFLOW (value))
{
TREE_OVERFLOW (value) = 0;
warning ("integer overflow in expression");
}
+ else if ((TREE_CODE (value) == REAL_CST
+ || (TREE_CODE (value) == COMPLEX_CST
+ && TREE_CODE (TREE_REALPART (value)) == REAL_CST))
+ && TREE_OVERFLOW (value))
+ {
+ TREE_OVERFLOW (value) = 0;
+ warning ("floating-pointer overflow in expression");
+ }
}
/* Print a warning if a large constant is truncated to unsigned,