aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-03-04 20:34:56 +0000
committerRichard Stallman <rms@gnu.org>1993-03-04 20:34:56 +0000
commitf0b996c50ca3dc47e41a3e4c6f92b6403a1f55c9 (patch)
tree47bf88a4f61cc4f9d9c3e38a932044fb6f6b1685
parenta333b79fc53fa0b721a74e4444920c209296a06b (diff)
downloadgcc-f0b996c50ca3dc47e41a3e4c6f92b6403a1f55c9.zip
gcc-f0b996c50ca3dc47e41a3e4c6f92b6403a1f55c9.tar.gz
gcc-f0b996c50ca3dc47e41a3e4c6f92b6403a1f55c9.tar.bz2
(truthvalue_conversion): Fix handling of COMPLEX_EXPR.
Handle all complex values specially. From-SVN: r3645
-rw-r--r--gcc/c-common.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 8dfc1e7..db0a5e1 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -967,9 +967,10 @@ truthvalue_conversion (expr)
return integer_one_node;
case COMPLEX_EXPR:
- return build_binary_op (TRUTH_ANDIF_EXPR,
- truthvalue_conversion (TREE_REALPART (expr)),
- truthvalue_conversion (TREE_IMAGPART (expr)),
+ return build_binary_op ((TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 1))
+ ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
+ truthvalue_conversion (TREE_OPERAND (expr, 0)),
+ truthvalue_conversion (TREE_OPERAND (expr, 1)),
0);
case NEGATE_EXPR:
@@ -1027,6 +1028,14 @@ truthvalue_conversion (expr)
break;
}
+ if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
+ return (build_binary_op
+ ((TREE_SIDE_EFFECTS (expr)
+ ? TRUTH_AND_EXPR : TRUTH_ANDIF_EXPR),
+ truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)),
+ truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)),
+ 0));
+
return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
}