From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26113 invoked by alias); 19 Jun 2003 19:28:59 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 26011 invoked from network); 19 Jun 2003 19:28:56 -0000 Received: from unknown (HELO crack.them.org) (146.82.138.56) by sources.redhat.com with SMTP; 19 Jun 2003 19:28:56 -0000 Received: from dsl093-172-017.pit1.dsl.speakeasy.net ([66.93.172.17] helo=nevyn.them.org ident=mail) by crack.them.org with asmtp (Exim 3.12 #1 (Debian)) id 19T56L-0001yJ-00; Thu, 19 Jun 2003 14:29:41 -0500 Received: from drow by nevyn.them.org with local (Exim 3.36 #1 (Debian)) id 19T55S-0001NV-00; Thu, 19 Jun 2003 15:28:46 -0400 Date: Thu, 19 Jun 2003 19:28:00 -0000 From: Daniel Jacobowitz To: Keith Seitz , David Carlton , Andrew Cagney , "gdb-patches@sources.redhat.com" Subject: Re: [RFA] varobj: call CHECK_TYPEDEF Message-ID: <20030619192845.GA2379@nevyn.them.org> Mail-Followup-To: Keith Seitz , David Carlton , Andrew Cagney , "gdb-patches@sources.redhat.com" References: <1051215397.1538.43.camel@lindt.uglyboxes.com> <3EA84A9B.5020308@redhat.com> <1051221433.1534.72.camel@lindt.uglyboxes.com> <3EA8629B.50603@redhat.com> <1055362509.1571.63.camel@lindt.uglyboxes.com> <1055378162.1571.98.camel@lindt.uglyboxes.com> <20030612012810.GA21583@nevyn.them.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20030612012810.GA21583@nevyn.them.org> User-Agent: Mutt/1.5.1i X-SW-Source: 2003-06/txt/msg00633.txt.bz2 On Wed, Jun 11, 2003 at 09:28:10PM -0400, Daniel Jacobowitz wrote: > On Wed, Jun 11, 2003 at 05:36:02PM -0700, Keith Seitz wrote: > > On Wed, 2003-06-11 at 16:49, David Carlton wrote: > > > I've just gone and looked over the thread and at Keith's patch; I > > > think the idea is sound, but the implementation isn't. The comments > > > at the top of get_type say that it's supposed to skip past typedefs, > > > so calling CHECK_TYPEDEF certainly seems legitimate. But > > > CHECK_TYPEDEF calls check_typedef, which already goes through chains > > > of typedefs, so you can get rid of the loop in get_type. > > > > Yup, I think you are correct. I'm sure that I was just being laz^Whasty. > > :-) > > David's analysis sounds right to me. I'll look over the actual code > tomorrow, really I will... I don't think David's conversions are quite right; close though. However, something here is fishy. Compare: /* This returns the type of the variable. This skips past typedefs and returns the real type of the variable. It also dereferences pointers and references. vs. static struct type * get_type (struct varobj *var) { struct type *type; type = var->type; while (type != NULL && TYPE_CODE (type) == TYPE_CODE_TYPEDEF) type = TYPE_TARGET_TYPE (type); return type; } That doesn't dereference pointers and references! It looks like get_type got inserted between get_type_deref and its comments? Can you confirm that it shouldn't dereference? Assuming get_type is not supposed to dereference pointers, then this would work: /* This returns the type of the variable. It also skips past typedefs to return the real type of the variable. NOTE: TYPE_TARGET_TYPE should NOT be used anywhere in this file except within get_target_type and get_type. */ static struct type * get_type (struct varobj *var) { struct type *type; type = var->type; if (type != NULL) type = check_typedef (type); return type; } /* This returns the target type (or NULL) of TYPE, also skipping past typedefs, just like get_type (). NOTE: TYPE_TARGET_TYPE should NOT be used anywhere in this file except within get_target_type and get_type. */ static struct type * get_target_type (struct type *type) { if (type != NULL) { type = TYPE_TARGET_TYPE (type); type = check_typedef (type); } return type; } Test results for that look OK but I don't have insight built at the moment, so I didn't test it. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer