diff options
author | Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> | 1998-06-19 01:46:50 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@gcc.gnu.org> | 1998-06-19 01:46:50 +0000 |
commit | f0b8d9aab46ec64cd1a42ac2bc6d3c47df52a513 (patch) | |
tree | 511e2ebe6a5a9b3cd70413e4381c906b737049fb /gcc/c-common.c | |
parent | c4137c50396559f083f9b618725917022baecbf1 (diff) | |
download | gcc-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.c | 15 |
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); } |