This is the mail archive of the
gcc-prs@gcc.gnu.org
mailing list for the GCC project.
Re: c/8224: Incorrect joining of signed and unsigned division
- From: Glen Nakamura <glen at imodulo dot com>
- To: nobody at gcc dot gnu dot org
- Cc: gcc-prs at gcc dot gnu dot org,
- Date: 15 Mar 2003 21:56:00 -0000
- Subject: Re: c/8224: Incorrect joining of signed and unsigned division
- Reply-to: Glen Nakamura <glen at imodulo dot com>
The following reply was made to PR c/8224; it has been noted by GNATS.
From: Glen Nakamura <glen at imodulo dot com>
To: gcc-gnats at gcc dot gnu dot org, gcc-bugs at gcc dot gnu dot org,
mikulas at artax dot karlin dot mff dot cuni dot cz
Cc:
Subject: Re: c/8224: Incorrect joining of signed and unsigned division
Date: Sat, 15 Mar 2003 21:50:10 +0000
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