aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-03-04 19:36:42 +0000
committerRichard Stallman <rms@gnu.org>1993-03-04 19:36:42 +0000
commit766f6c304d4173d2b279d29dd096e8aec4fbacc8 (patch)
tree43366ca8ed642d0d7298b15c40661970ed582514 /gcc
parent1cc1b11a2edb824cebfcee7eddad213be0454a9f (diff)
downloadgcc-766f6c304d4173d2b279d29dd096e8aec4fbacc8.zip
gcc-766f6c304d4173d2b279d29dd096e8aec4fbacc8.tar.gz
gcc-766f6c304d4173d2b279d29dd096e8aec4fbacc8.tar.bz2
(truthvalue_conversion): Handle COMPLEX_EXPR.
From-SVN: r3638
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-common.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 85ef048..8dfc1e7 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -373,7 +373,13 @@ convert_and_check (type, expr)
tree t = convert (type, expr);
if (TREE_CODE (t) == INTEGER_CST)
{
- if (TREE_CONSTANT_OVERFLOW (t))
+ if (TREE_UNSIGNED (TREE_TYPE (expr))
+ && !TREE_UNSIGNED (type)
+ && TREE_CODE (TREE_TYPE (expr)) == INTEGER_TYPE
+ && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (expr)))
+ /* No warning for converting 0x80000000 to int. */
+ TREE_CONSTANT_OVERFLOW (t) = 0;
+ else if (TREE_CONSTANT_OVERFLOW (t))
{
pedwarn ("overflow in implicit constant conversion");
TREE_CONSTANT_OVERFLOW (t) = 0;
@@ -829,7 +835,8 @@ shorten_compare (op0_ptr, op1_ptr, restype_ptr, rescode_ptr)
TYPE is already properly set. */
}
else if (real1 && real2
- && TYPE_PRECISION (TREE_TYPE (primop0)) == TYPE_PRECISION (TREE_TYPE (primop1)))
+ && (TYPE_PRECISION (TREE_TYPE (primop0))
+ == TYPE_PRECISION (TREE_TYPE (primop1))))
type = TREE_TYPE (primop0);
/* If args' natural types are both narrower than nominal type
@@ -959,6 +966,12 @@ truthvalue_conversion (expr)
else
return integer_one_node;
+ case COMPLEX_EXPR:
+ return build_binary_op (TRUTH_ANDIF_EXPR,
+ truthvalue_conversion (TREE_REALPART (expr)),
+ truthvalue_conversion (TREE_IMAGPART (expr)),
+ 0);
+
case NEGATE_EXPR:
case ABS_EXPR:
case FLOAT_EXPR: