Commit f0b8d9aa by Andreas Schwab Committed by Andreas Schwab

c-common.c (truthvalue_conversion): Protect side effects in the expression when…

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
parent c4137c50
Fri Jun 19 10:43:52 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* c-common.c (truthvalue_conversion): Protect side effects in the
expression when splitting a complex value.
* fold-const.c (fold): Likewise.
Fri Jun 19 02:31:16 1998 Klaus Kaempf (kkaempf@progis.de) Fri Jun 19 02:31:16 1998 Klaus Kaempf (kkaempf@progis.de)
* cccp.c (hack_vms_include_specification): rewrite to handle * cccp.c (hack_vms_include_specification): rewrite to handle
......
...@@ -2670,12 +2670,15 @@ truthvalue_conversion (expr) ...@@ -2670,12 +2670,15 @@ truthvalue_conversion (expr)
} }
if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE) if (TREE_CODE (TREE_TYPE (expr)) == COMPLEX_TYPE)
return (build_binary_op {
((TREE_SIDE_EFFECTS (expr) tree tem = save_expr (expr);
? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR), return (build_binary_op
truthvalue_conversion (build_unary_op (REALPART_EXPR, expr, 0)), ((TREE_SIDE_EFFECTS (expr)
truthvalue_conversion (build_unary_op (IMAGPART_EXPR, expr, 0)), ? TRUTH_OR_EXPR : TRUTH_ORIF_EXPR),
0)); 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); return build_binary_op (NE_EXPR, expr, integer_zero_node, 1);
} }
......
...@@ -5656,10 +5656,14 @@ fold (expr) ...@@ -5656,10 +5656,14 @@ fold (expr)
|| TREE_CODE (arg1) == COMPLEX_EXPR)) || TREE_CODE (arg1) == COMPLEX_EXPR))
{ {
tree subtype = TREE_TYPE (TREE_TYPE (arg0)); tree subtype = TREE_TYPE (TREE_TYPE (arg0));
tree real0 = fold (build1 (REALPART_EXPR, subtype, arg0)); tree real0, imag0, real1, imag1;
tree imag0 = fold (build1 (IMAGPART_EXPR, subtype, arg0));
tree real1 = fold (build1 (REALPART_EXPR, subtype, arg1)); arg0 = save_expr (arg0);
tree imag1 = fold (build1 (IMAGPART_EXPR, subtype, arg1)); arg1 = save_expr (arg1);
real0 = fold (build1 (REALPART_EXPR, subtype, arg0));
imag0 = fold (build1 (IMAGPART_EXPR, subtype, arg0));
real1 = fold (build1 (REALPART_EXPR, subtype, arg1));
imag1 = fold (build1 (IMAGPART_EXPR, subtype, arg1));
return fold (build ((code == EQ_EXPR ? TRUTH_ANDIF_EXPR return fold (build ((code == EQ_EXPR ? TRUTH_ANDIF_EXPR
: TRUTH_ORIF_EXPR), : TRUTH_ORIF_EXPR),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment