From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26149 invoked by alias); 11 Aug 2005 10:10:59 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 26132 invoked by uid 22791); 11 Aug 2005 10:10:53 -0000 Received: from ns.suse.de (HELO mx1.suse.de) (195.135.220.2) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Thu, 11 Aug 2005 10:10:53 +0000 Received: from Relay2.suse.de (mail2.suse.de [195.135.221.8]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.suse.de (Postfix) with ESMTP id A2A10EE1E; Thu, 11 Aug 2005 12:10:51 +0200 (CEST) Received: from sykes.suse.de (sykes.suse.de [10.10.3.53]) by Relay2.suse.de (Postfix) with ESMTP id 6D15AE4F1; Thu, 11 Aug 2005 12:10:51 +0200 (CEST) From: Andreas Schwab To: gdb-patches@sources.redhat.com Cc: gdb@sources.redhat.com, ramana.radhakrishnan@codito.com Subject: Re: Query regarding expression evaluation. References: <1123684979.29036.21.camel@localhost.localdomain> X-Yow: The Osmonds! You are all Osmonds!! Throwing up on a freeway at dawn!!! Date: Thu, 11 Aug 2005 10:10:00 -0000 In-Reply-To: <1123684979.29036.21.camel@localhost.localdomain> (Ramana Radhakrishnan's message of "Wed, 10 Aug 2005 20:12:59 +0530") Message-ID: User-Agent: Gnus/5.110003 (No Gnus v0.3) Emacs/22.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-SW-Source: 2005-08/txt/msg00052.txt.bz2 Ramana Radhakrishnan writes: > Look at PR1978 . The discrepancy is because in valarith.c , GDB takes > the operation to be unsigned depending only on the operand types. In the > case described in the PR this seems alright with respect to the C > standard since the result is implementation dependent. Here is a fix: 2005-08-11 Andreas Schwab PR exp/1978 * valarith.c (value_binop): Fix result type for the shift operators. --- gdb/valarith.c.~1.41.~ 2005-07-07 11:12:12.000000000 +0200 +++ gdb/valarith.c 2005-08-10 18:22:48.000000000 +0200 @@ -883,7 +883,14 @@ value_binop (struct value *arg1, struct Use the signedness of the operand with the greater length. If both operands are of equal length, use unsigned operation if one of the operands is unsigned. */ - if (promoted_len1 > promoted_len2) + if (op == BINOP_RSH || op == BINOP_LSH) + { + /* In case of the shift operators the type of the result only + depends on the type of the left operand. */ + unsigned_operation = is_unsigned1; + result_len = promoted_len1; + } + else if (promoted_len1 > promoted_len2) { unsigned_operation = is_unsigned1; result_len = promoted_len1; Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."