OSDN Git Service

* convert.c (convert_to_integer): Don't do unsigned unless result or
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Feb 2001 21:10:35 +0000 (21:10 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 23 Feb 2001 21:10:35 +0000 (21:10 +0000)
both inputs are unsigned.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40014 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/convert.c

index a89be70..1daa849 100644 (file)
@@ -1,5 +1,8 @@
 Fri Feb 23 15:28:39 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
+       * convert.c (convert_to_integer): Don't do unsigned unless result or
+       both inputs are unsigned.
+
        * fold-const.c (fold_convert): Don't call size_int_type_wide if
        input overflows.
 
index dd1b91a..b97d08f 100644 (file)
@@ -310,13 +310,13 @@ convert_to_integer (type, expr)
                  {
                    /* Don't do unsigned arithmetic where signed was wanted,
                       or vice versa.
-                      Exception: if either of the original operands were
+                      Exception: if both of the original operands were
                       unsigned then can safely do the work as unsigned.
                       And we may need to do it as unsigned
                       if we truncate to the original size.  */
                    typex = ((TREE_UNSIGNED (TREE_TYPE (expr))
-                             || TREE_UNSIGNED (TREE_TYPE (arg0))
-                             || TREE_UNSIGNED (TREE_TYPE (arg1)))
+                             || (TREE_UNSIGNED (TREE_TYPE (arg0))
+                                 && TREE_UNSIGNED (TREE_TYPE (arg1))))
                             ? unsigned_type (typex) : signed_type (typex));
                    return convert (type,
                                    fold (build (ex_form, typex,