aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-common.c
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@issan.informatik.uni-dortmund.de>1998-06-19 01:46:50 +0000
committerAndreas Schwab <schwab@gcc.gnu.org>1998-06-19 01:46:50 +0000
commitf0b8d9aab46ec64cd1a42ac2bc6d3c47df52a513 (patch)
tree511e2ebe6a5a9b3cd70413e4381c906b737049fb /gcc/c-common.c
parentc4137c50396559f083f9b618725917022baecbf1 (diff)
downloadgcc-f0b8d9aab46ec64cd1a42ac2bc6d3c47df52a513.zip
gcc-f0b8d9aab46ec64cd1a42ac2bc6d3c47df52a513.tar.gz
gcc-f0b8d9aab46ec64cd1a42ac2bc6d3c47df52a513.tar.bz2
c-common.c (truthvalue_conversion): Protect side effects in the expression when splitting a complex value.
* c-common.c (truthvalue_conversion): Protect side effects in the expression when splitting a complex value. * fold-const.c (fold): Likewise. From-SVN: r20580
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r--gcc/c-common.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 9983cdb..3a22c17 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -2670,12 +2670,15 @@ truthvalue_conversion (expr)
}
if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
- return (build_binary_op
- ((TREE_SIDE_EFFECTS (expr)
- ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
- truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)),
- truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)),
- 0));
+ {
+ tree tem = save_expr (expr);
+ return (build_binary_op
+ ((TREE_SIDE_EFFECTS (expr)
+ ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
+ truthvalue_conversion (build_unary_op (REALPART_EXPR, tem, 0)),
+ truthvalue_conversion (build_unary_op (IMAGPART_EXPR, tem, 0)),
+ 0));
+ }
return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
}