From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16411 invoked by alias); 5 Jul 2013 10:41:23 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 16401 invoked by uid 89); 5 Jul 2013 10:41:22 -0000 X-Spam-SWARE-Status: No, score=-7.5 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS,TW_CP autolearn=ham version=3.3.1 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Fri, 05 Jul 2013 10:41:22 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r65AfKoH012741 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 5 Jul 2013 06:41:20 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r65AfIXU023852; Fri, 5 Jul 2013 06:41:19 -0400 Message-ID: <51D6A2CE.7080502@redhat.com> Date: Fri, 05 Jul 2013 10:41:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 MIME-Version: 1.0 To: Andrew Burgess CC: gdb-patches@sourceware.org Subject: Re: [PATCH] ada-lang.c:coerce_unspec_val_to_type: Preserve laziness. References: <20130704182244.16683.55719.stgit@brno.lan> <51D6A00A.2050803@broadcom.com> In-Reply-To: <51D6A00A.2050803@broadcom.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2013-07/txt/msg00190.txt.bz2 On 07/05/2013 11:29 AM, Andrew Burgess wrote: > On 04/07/2013 7:22 PM, Pedro Alves wrote: >> ada-lang.c:coerce_unspec_val_to_type does: >> >> if (value_lazy (val) >> || TYPE_LENGTH (type) > TYPE_LENGTH (value_type (val))) >> result = allocate_value_lazy (type); >> else >> { >> result = allocate_value (type); >> memcpy (value_contents_raw (result), value_contents (val), >> TYPE_LENGTH (type)); >> } >> set_value_component_location (result, val); >> set_value_bitsize (result, value_bitsize (val)); >> set_value_bitpos (result, value_bitpos (val)); >> set_value_address (result, value_address (val)); >> set_value_optimized_out (result, value_optimized_out (val)); >> >> Notice that before value_optimized_out was made to auto-fetch lazy >> values, VAL would end up still lazy if it was lazy on entry. It's not >> really a problem here if VAL is lazy, and VAL->optimized_out is 0, >> because RESULT is also left lazy. IOW, this just wants to copy the >> VAL->optimized_out flag to RESULT->optimized_out, nothing else. >> >> The patch adds the value_optimized_out_const function for that. > > As an alternative, this patch avoids the new _const function, > I move the setting of the optimized_out value into the else case where we know val is no longer lazy. > > Cheers, > Andrew > > > diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c > index 8240fee..ea7b579 100644 > --- a/gdb/ada-lang.c > +++ b/gdb/ada-lang.c > @@ -576,12 +576,14 @@ coerce_unspec_val_to_type (struct value *val, struct type *type) > result = allocate_value (type); > memcpy (value_contents_raw (result), value_contents (val), > TYPE_LENGTH (type)); > + /* Only copy the optimized out setting if val is not lazy. If it > + is lazy then the optimized_out flag will always be false. */ > + set_value_optimized_out (result, value_optimized_out (val)); > } > set_value_component_location (result, val); > set_value_bitsize (result, value_bitsize (val)); > set_value_bitpos (result, value_bitpos (val)); > set_value_address (result, value_address (val)); > - set_value_optimized_out (result, value_optimized_out (val)); > return result; That works, but I had originally discarded such an approach because it looked brittle to me. E.g., I was toying with optimizing value_optimized_out by only fetching lazy values if it really can't avoid it, and such a change would render this subtly broken. -- Pedro Alves