From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1958 invoked by alias); 20 Jan 2007 19:42:04 -0000 Received: (qmail 1950 invoked by uid 22791); 20 Jan 2007 19:42:04 -0000 X-Spam-Check-By: sourceware.org Received: from nevyn.them.org (HELO nevyn.them.org) (66.93.172.17) by sourceware.org (qpsmtpd/0.31.1) with ESMTP; Sat, 20 Jan 2007 19:41:59 +0000 Received: from drow by nevyn.them.org with local (Exim 4.63) (envelope-from ) id 1H8M65-0006cy-30; Sat, 20 Jan 2007 14:41:53 -0500 Date: Sat, 20 Jan 2007 19:42:00 -0000 From: Daniel Jacobowitz To: Vladimir Prus Cc: gdb-patches@sources.redhat.com Subject: Re: Simpify varobj children handling for C++ Message-ID: <20070120194153.GC22153@nevyn.them.org> Mail-Followup-To: Vladimir Prus , gdb-patches@sources.redhat.com References: <200612240050.30172.ghost@cs.msu.su> <20070103223207.GM17935@nevyn.them.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.13 (2006-08-11) X-IsSubscribed: yes 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 X-SW-Source: 2007-01/txt/msg00421.txt.bz2 On Wed, Jan 17, 2007 at 09:55:53PM +0300, Vladimir Prus wrote: > >> @@ -950,7 +950,8 @@ value_ind (struct value *arg1) > >> if (TYPE_CODE (base_type) == TYPE_CODE_INT) > >> return value_at_lazy (builtin_type_int, > >> (CORE_ADDR) value_as_long (arg1)); > >> - else if (TYPE_CODE (base_type) == TYPE_CODE_PTR) > >> + else if (TYPE_CODE (base_type) == TYPE_CODE_PTR > >> + || TYPE_CODE (base_type) == TYPE_CODE_PTR) > >> { > >> struct type *enc_type; > >> /* We may be pointing to something embedded in a larger object */ > > > > Something tells me you didn't actually need value_ind to handle > > references... :-) > > Why? Because that's a bad idea or because varobj code does not > need to dereference rereferences? The latter is true, > attached version of the patch builds on the > "fix 'editable' attribute for references" patch I've posted earlier > and now 'adjust_value_for_child_access' asserts that the type > is not reference. All I meant was that you added "is TYPE_CODE_PTR or is TYPE_CODE_PTR". I guess you meant to check TYPE_CODE_REF, but you must not have needed it if you didn't notice the typo. > +get_value_type (struct varobj *var) > { > struct type *type; > > - type = get_type (var); > + if (var->value) > + type = value_type (var->value); > + else > + type = var->type; > > - if (type) > - { > - if (TYPE_CODE (type) == TYPE_CODE_REF) > - type = get_target_type (type); > - if (TYPE_CODE (type) == TYPE_CODE_PTR) > - type = get_target_type (type); > - } > + if (TYPE_CODE (type) == TYPE_CODE_REF) > + type = get_target_type (type); > + > + type = check_typedef (type); > > return type; > } I think that if you want to check for references, you need to call check_typedef first (I just checked that g++ does allow typedefs to reference types). Otherwise this looks OK to commit. It would be nice to have some tests for not stripping typedefs, if that's practical, but it's not really important. -- Daniel Jacobowitz CodeSourcery