aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2000-03-16 23:45:28 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2000-03-16 18:45:28 -0500
commitc9869b75ee626214ec24447f33215fb4b6c9f038 (patch)
tree8be480c93bcf9552a35b2f3938d918504f513389 /gcc/fold-const.c
parentb1801c0246be659c50616cda377cd982087e01c6 (diff)
downloadgcc-c9869b75ee626214ec24447f33215fb4b6c9f038.zip
gcc-c9869b75ee626214ec24447f33215fb4b6c9f038.tar.gz
gcc-c9869b75ee626214ec24447f33215fb4b6c9f038.tar.bz2
fold-const.c (fold): Fix a few cases when the returned result is not of the same type as the input.
* fold-const.c (fold): Fix a few cases when the returned result is not of the same type as the input. From-SVN: r32597
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index d24a7d1..904e93d 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -5226,7 +5226,7 @@ fold (expr)
if (TREE_CODE (TREE_TYPE (arg0)) != COMPLEX_TYPE)
return arg0;
else if (TREE_CODE (arg0) == COMPLEX_EXPR)
- return build (COMPLEX_EXPR, TREE_TYPE (arg0),
+ return build (COMPLEX_EXPR, type,
TREE_OPERAND (arg0, 0),
negate_expr (TREE_OPERAND (arg0, 1)));
else if (TREE_CODE (arg0) == COMPLEX_CST)
@@ -5525,7 +5525,7 @@ fold (expr)
if (! FLOAT_TYPE_P (type))
{
if (! wins && integer_zerop (arg0))
- return negate_expr (arg1);
+ return convert (type, negate_expr (arg1));
if (integer_zerop (arg1))
return non_lvalue (convert (type, arg0));
@@ -5548,7 +5548,7 @@ fold (expr)
{
/* Except with IEEE floating point, 0-x equals -x. */
if (! wins && real_zerop (arg0))
- return negate_expr (arg1);
+ return convert (type, negate_expr (arg1));
/* Except with IEEE floating point, x-0 equals x. */
if (real_zerop (arg1))
return non_lvalue (convert (type, arg0));
@@ -6819,7 +6819,8 @@ fold (expr)
switch (comp_code)
{
case EQ_EXPR:
- return pedantic_non_lvalue (negate_expr (arg1));
+ return
+ pedantic_non_lvalue (convert (type, negate_expr (arg1)));
case NE_EXPR:
return pedantic_non_lvalue (convert (type, arg1));
case GE_EXPR: