Commit 1c2a9b35 by Richard Stallman

(c_expand_return): Set TREE_SIDE_EFFECTS for the MODIFY_EXPR that we make.

(build_unary_op): Support CONJ_EXPR.
Change BIT_NOT_EXPR to CONJ_EXPR if arg is complex.

From-SVN: r4939
parent 551064b1
...@@ -3029,7 +3029,13 @@ build_unary_op (code, xarg, noconvert) ...@@ -3029,7 +3029,13 @@ build_unary_op (code, xarg, noconvert)
break; break;
case BIT_NOT_EXPR: case BIT_NOT_EXPR:
if (typecode != INTEGER_TYPE) if (typecode == COMPLEX_TYPE)
{
code = CONJ_EXPR;
if (!noconvert)
arg = default_conversion (arg);
}
else if (typecode != INTEGER_TYPE)
errstring = "wrong type argument to bit-complement"; errstring = "wrong type argument to bit-complement";
else if (!noconvert) else if (!noconvert)
arg = default_conversion (arg); arg = default_conversion (arg);
...@@ -3043,6 +3049,15 @@ build_unary_op (code, xarg, noconvert) ...@@ -3043,6 +3049,15 @@ build_unary_op (code, xarg, noconvert)
arg = default_conversion (arg); arg = default_conversion (arg);
break; break;
case CONJ_EXPR:
/* Conjugating a real value is a no-op, but allow it anyway. */
if (!(typecode == INTEGER_TYPE || typecode == REAL_TYPE
|| typecode == COMPLEX_TYPE))
errstring = "wrong type argument to conjugation";
else if (!noconvert)
arg = default_conversion (arg);
break;
case TRUTH_NOT_EXPR: case TRUTH_NOT_EXPR:
if (typecode != INTEGER_TYPE if (typecode != INTEGER_TYPE
&& typecode != REAL_TYPE && typecode != POINTER_TYPE && typecode != REAL_TYPE && typecode != POINTER_TYPE
...@@ -5800,6 +5815,7 @@ c_expand_return (retval) ...@@ -5800,6 +5815,7 @@ c_expand_return (retval)
tree res = DECL_RESULT (current_function_decl); tree res = DECL_RESULT (current_function_decl);
t = build (MODIFY_EXPR, TREE_TYPE (res), t = build (MODIFY_EXPR, TREE_TYPE (res),
res, convert (TREE_TYPE (res), t)); res, convert (TREE_TYPE (res), t));
TREE_SIDE_EFFECTS (t) = 1;
expand_return (t); expand_return (t);
current_function_returns_value = 1; current_function_returns_value = 1;
} }
......
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