From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14463 invoked by alias); 3 Nov 2010 00:10:05 -0000 Received: (qmail 14382 invoked by uid 22791); 3 Nov 2010 00:09:59 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 03 Nov 2010 00:09:53 +0000 Received: (qmail 15933 invoked from network); 3 Nov 2010 00:09:52 -0000 Received: from unknown (HELO orlando.localnet) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 3 Nov 2010 00:09:52 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: [PATCH] call cp_lookup_symbol_namespace recursively to search symbols in C++ base classes Date: Wed, 03 Nov 2010 00:10:00 -0000 User-Agent: KMail/1.13.2 (Linux/2.6.33-29-realtime; KDE/4.4.2; x86_64; ; ) Cc: "Liu, Lei" References: <4CCF89F0.5090100@windriver.com> In-Reply-To: <4CCF89F0.5090100@windriver.com> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201011030009.47662.pedro@codesourcery.com> 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: 2010-11/txt/msg00056.txt.bz2 Hi! I'm looking at this exact problem as well. :-) > 2010-11-02 Lei Liu > > * cp-namespace.c (cp_lookup_symbol_namespace): Recursively call > itself to search C++ base classes. > @@ -513,6 +513,8 @@ cp_lookup_symbol_namespace (const char *scope, > const domain_enum domain) > { ... > @@ -530,6 +532,31 @@ cp_lookup_symbol_namespace (const char *scope, > block = BLOCK_SUPERBLOCK (block); > } > > + /* If scope is a C++ class, we need to search all its base classes. */ > + if (scope == NULL || scope[0] == '\0') > + return NULL; Your testcase is not hitting this empty scope check, due to your "#include ", which does namespace things, and ends up emitting DW_TAG_namespace in the debug info, and so dwarf2read.c sets the processing_has_namespace_info global, and so a "namespace" for you test's class is installed by: /* For C++, set the block's scope. */ if (cu->language == language_cplus || cu->language == language_fortran) cp_set_block_scope (new->name, block, &objfile->objfile_obstack, determine_prefix (die, cu), processing_has_namespace_info); If I remove that include from your test (and the printf), then the patch no longer works. We need to do something here. A related issue that should be addressed as well, I think, is: class A { public: enum E { X, Y, Z }; }; A a; Both "print a.X" and "ptype a.X" should work. I've got a patch that fixes this part, and a dejagnuified testcase, but haven't sorted out the processing_has_namespace_info part yet. -- Pedro Alves