(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
This commit is contained in:
parent
551064b16e
commit
1c2a9b35f7
@ -3029,7 +3029,13 @@ build_unary_op (code, xarg, noconvert)
|
||||
break;
|
||||
|
||||
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";
|
||||
else if (!noconvert)
|
||||
arg = default_conversion (arg);
|
||||
@ -3043,6 +3049,15 @@ build_unary_op (code, xarg, noconvert)
|
||||
arg = default_conversion (arg);
|
||||
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:
|
||||
if (typecode != INTEGER_TYPE
|
||||
&& typecode != REAL_TYPE && typecode != POINTER_TYPE
|
||||
@ -5800,6 +5815,7 @@ c_expand_return (retval)
|
||||
tree res = DECL_RESULT (current_function_decl);
|
||||
t = build (MODIFY_EXPR, TREE_TYPE (res),
|
||||
res, convert (TREE_TYPE (res), t));
|
||||
TREE_SIDE_EFFECTS (t) = 1;
|
||||
expand_return (t);
|
||||
current_function_returns_value = 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user