]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c/8224 (Incorrect joining of signed and unsigned division)
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 29 Mar 2003 10:29:33 +0000 (10:29 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 29 Mar 2003 10:29:33 +0000 (10:29 +0000)
PR c/8224
* fold-const.c (extract_muldiv_1): Don't pass through type conversions
when signedness changes for division or modulus.

From-SVN: r65012

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog

index 65d1d38a588948a8a7b34237ad6fc7e56e898ae2..7d75144d716c5ed2a8a4a7e73328cc905f9a8a36 100644 (file)
@@ -1,3 +1,9 @@
+2003-03-29  Glen Nakamura <glen@imodulo.com>
+
+       PR c/8224
+       * fold-const.c (extract_muldiv_1): Don't pass through type conversions
+       when signedness changes for division or modulus.
+
 2003-03-29  Alan Modra  <amodra@bigpond.net.au>
 
        * reload1.c (reload_as_needed): Allow a USE in asm reloads.
index 06f36d8542def638bdb84cbd8bd8d8b622dd3e23..e341bd98f07d41c551e1d10ef0d6346e85ab017d 100644 (file)
@@ -4558,7 +4558,12 @@ extract_muldiv_1 (t, c, code, wide_type)
              /* ...and its type is larger than ctype,
                 then we cannot pass through this truncation.  */
              || (GET_MODE_SIZE (TYPE_MODE (ctype))
-                 < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0))))))
+                 < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (op0))))
+             /* ... or signedness changes for division or modulus,
+                then we cannot pass through this conversion.  */
+             || (code != MULT_EXPR
+                 && (TREE_UNSIGNED (ctype)
+                     != TREE_UNSIGNED (TREE_TYPE (op0))))))
        break;
 
       /* Pass the constant down and see if we can make a simplification.  If
index dfbdf4e9f2c86d94bb637b66b8805aadc5c169a2..0459d46ffd10683ac13adad78b12f08b7b759da5 100644 (file)
@@ -1,3 +1,7 @@
+2003-03-29  Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
+
+       * gcc.dg/20030323-1.c: New test.
+
 2003-03-28  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * gcc.dg/ultrasp8.c: New test.