c/8224: Incorrect joining of signed and unsigned division
Glen Nakamura
glen@imodulo.com
Sat Mar 15 23:55:00 GMT 2003
I'm testing the following patch as a fix to PR c/8224:
* fold-const.c (extract_muldiv_1): Don't pass through type conversions
when signedness changes for division or modulus.
diff -Nru3p gcc-3.3.orig/gcc/fold-const.c gcc-3.3/gcc/fold-const.c
--- gcc-3.3.orig/gcc/fold-const.c 2003-02-16 08:25:20.000000000 +0000
+++ gcc-3.3/gcc/fold-const.c 2003-02-16 08:25:20.000000000 +0000
@@ -4117,7 +4117,12 @@ extract_muldiv_1 (t, c, code, wide_type)
/* ... or 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
More information about the Gcc-bugs
mailing list