From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7576 invoked by alias); 26 Feb 2004 02:31:12 -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 7552 invoked from network); 26 Feb 2004 02:31:08 -0000 Received: from unknown (HELO takamaka.act-europe.fr) (142.179.108.108) by sources.redhat.com with SMTP; 26 Feb 2004 02:31:08 -0000 Received: by takamaka.act-europe.fr (Postfix, from userid 507) id 0322947D62; Wed, 25 Feb 2004 18:31:09 -0800 (PST) Date: Thu, 26 Feb 2004 02:31:00 -0000 From: Joel Brobecker To: Elena Zannoni Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA/dwarf-2] Fix for the null record problem Message-ID: <20040226023108.GF3425@gnat.com> References: <20040219140145.GB804@gnat.com> <16437.11835.435941.553479@localhost.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <16437.11835.435941.553479@localhost.redhat.com> User-Agent: Mutt/1.4i X-SW-Source: 2004-02/txt/msg00752.txt.bz2 > > This is a followup on the thread that started with: > > > > http://sources.redhat.com/ml/gdb-patches/2004-02/msg00058.html > > > > The test proposed under that thread was dropped because an empty > > struct is not legal C. However, it is legal in Ada, and I've seen > > a message saying that it is also legal in C++. > > Seriously, I'd like to see a testcase that FAIL->PASS with this patch. > Can somebody get a C++ testcase, at least? > > the patch looks sensible, but I would like to see the testcase go in > at the same time, or we'll forget. I tried to update one of the C++ testcase to include an empty struct, but my C++ is completely rusty. In class2.cc, I tried adding struct empty_struct {}; Is that a struct type definition or a class definition. In any case, GDB has no trouble at all printing the description of this type: (gdb) ptype empty_struct type = class empty_struct { } Does anybody know of a way to produce the "" bug with C++? Otherwise, there is my upcoming null_record.exp test, but I need a bit more time before the first Ada testcase can be committed. > > I have found the source of the problem, and suggest the attached patch. > > The problem was that GDB was mistakenly deducing that the empry record > > was only a stub because of the lack of fields, and was therefore tagging > > it with TYPE_FLAG_STUB. This is not correct. Instead, the right > > approach, I believe, is to check for the DW_AT_declaration attribute. > > > > 2004-02-19 J. Brobecker > > > > * dwarf2read.c (read_structure_scope): Identify stub types > > using the DW_AT_declaration attribute. > > > > tested on x86-linux. No regression. Fixes the testcase that was > > proposed by Andrew (even though it is not legal C) and the Ada > > case. > > > > OK to apply? > > > > Thanks, > > -- > > Joel > > > > PS: BTW, my past 3 months of traveling will soon be over. The past > > couple of weeks have been very hectic. I have noticed that there were > > some messages directed at me to which I haven't answered yet. I am > > really sorry. I have kept these messages and will try to answer them > > soon. > > Index: dwarf2read.c > > =================================================================== > > RCS file: /cvs/src/src/gdb/dwarf2read.c,v > > retrieving revision 1.130 > > diff -u -p -r1.130 dwarf2read.c > > --- dwarf2read.c 28 Jan 2004 18:43:06 -0000 1.130 > > +++ dwarf2read.c 19 Feb 2004 13:58:42 -0000 > > @@ -3077,6 +3077,9 @@ read_structure_scope (struct die_info *d > > TYPE_LENGTH (type) = 0; > > } > > > > + if (dwarf2_attr (die, DW_AT_declaration, cu) != NULL) > > + TYPE_FLAGS (type) |= TYPE_FLAG_STUB; > > + > > /* We need to add the type field to the die immediately so we don't > > infinitely recurse when dealing with pointers to the structure > > type within the structure itself. */ > > @@ -3213,11 +3216,6 @@ read_structure_scope (struct die_info *d > > new_symbol (die, type, cu); > > > > do_cleanups (back_to); > > - } > > - else > > - { > > - /* No children, must be stub. */ > > - TYPE_FLAGS (type) |= TYPE_FLAG_STUB; > > } > > > > processing_current_prefix = previous_prefix; -- Joel