From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23521 invoked by alias); 15 Mar 2003 21:56:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 23489 invoked by uid 71); 15 Mar 2003 21:56:00 -0000 Date: Sat, 15 Mar 2003 21:56:00 -0000 Message-ID: <20030315215600.23488.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Glen Nakamura Subject: Re: c/8224: Incorrect joining of signed and unsigned division Reply-To: Glen Nakamura X-SW-Source: 2003-03/txt/msg01041.txt.bz2 List-Id: The following reply was made to PR c/8224; it has been noted by GNATS. From: Glen Nakamura To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org, mikulas@artax.karlin.mff.cuni.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