diff options
author | Richard Stallman <rms@gnu.org> | 1993-03-04 20:34:56 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-03-04 20:34:56 +0000 |
commit | f0b996c50ca3dc47e41a3e4c6f92b6403a1f55c9 (patch) | |
tree | 47bf88a4f61cc4f9d9c3e38a932044fb6f6b1685 | |
parent | a333b79fc53fa0b721a74e4444920c209296a06b (diff) | |
download | gcc-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.c | 15 |
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); } |