From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24124 invoked by alias); 19 Nov 2002 18:16:13 -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 24088 invoked by uid 71); 19 Nov 2002 18:16:11 -0000 Date: Tue, 26 Nov 2002 12:06:00 -0000 Message-ID: <20021119181611.24087.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: "Christian Ehrhardt" Subject: Re: c/8639: [3.2/3.3 regression] simple integer arithmetic expression broken Reply-To: "Christian Ehrhardt" X-SW-Source: 2002-11/txt/msg01002.txt.bz2 List-Id: The following reply was made to PR c/8639; it has been noted by GNATS. From: "Christian Ehrhardt" To: gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org, steveJepsen@netscape.net, gcc-bugs@gcc.gnu.org, nobody@gcc.gnu.org Cc: Subject: Re: c/8639: [3.2/3.3 regression] simple integer arithmetic expression broken Date: Tue, 19 Nov 2002 19:09:59 +0100 Hi, this patch will be bootstrapping here in a minute. An non bootstapped compile indicates that this fixes the bug. I'm not sure if we can be more clever here without doing a big rewrite of fold-const.c. I'll report back tonight/tomorrow (CET) when the testsuite has completed. Someone please consider to check this in. I don't have CVS access. Also adding a testcase would probably be a good idea. regards Christian --- gcc-3.2.1-20021111/gcc/fold-const.c.orig Tue Nov 19 18:47:57 2002 +++ gcc-3.2.1-20021111/gcc/fold-const.c Tue Nov 19 18:57:04 2002 @@ -4617,10 +4617,12 @@ t2 = extract_muldiv (op1, c, code, wide_type); if (t1 != 0 && t2 != 0 && (code == MULT_EXPR - /* If not multiplication, we can only do this if either operand - is divisible by c. */ - || multiple_of_p (ctype, op0, c) - || multiple_of_p (ctype, op1, c))) + /* If not multiplication, we can only do this if this is + * PLUS_EXPR and both operands are divisible by c. Note that + * (80 - 4*x)/20 or (80 + (-4)*x)/20 must not degenerate + * into (20 - x/5). */ + || (multiple_of_p (ctype, op0, c) && + multiple_of_p (ctype, op1, c)))) return fold (build (tcode, ctype, convert (ctype, t1), convert (ctype, t2))); http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=8639 -- THAT'S ALL FOLKS!