fold-const.c (fold): Fix a few cases when the returned result is not of the same...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Thu, 16 Mar 2000 23:45:28 +0000 (23:45 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 16 Mar 2000 23:45:28 +0000 (18:45 -0500)
* fold-const.c (fold): Fix a few cases when the returned result
is not of the same type as the input.

From-SVN: r32597

gcc/ChangeLog
gcc/fold-const.c

index b9169550ab4f2fe79de0a5ac91e0083938e23680..fffbf78f28f6d9a294bfc2767c0bfeb2bdd53955 100644 (file)
@@ -1,3 +1,8 @@
+Thu Mar 16 18:52:32 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+       * fold-const.c (fold): Fix a few cases when the returned result
+       is not of the same type as the input.
+
 2000-03-16  Nick Clifton  <nickc@cygnus.com>
 
        * config/arm/arm.h (ASM_OUTPUT_MI_THUNK): Fix compile time
index d24a7d1435f1a8affe2c91170c8b5f49afb60751..904e93dd08cb1fb1a5ba4ba72927583f29404f0b 100644 (file)
@@ -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: