From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 61416 invoked by alias); 17 Jun 2018 01:06:46 -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 61403 invoked by uid 89); 17 Jun 2018 01:06:45 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=D*oracle.com, inheritance, PR's, pr's X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 17 Jun 2018 01:06:43 +0000 Received: from [10.0.0.11] (unknown [192.222.164.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 0AD8D1E481; Sat, 16 Jun 2018 21:06:40 -0400 (EDT) Subject: Re: [PATCH PR gdb/16841] virtual inheritance via typedef cannot find base To: Weimin Pan , gdb-patches@sourceware.org References: <1529106313-11806-1-git-send-email-weimin.pan@oracle.com> From: Simon Marchi Message-ID: <97eae4ee-dc9b-2c02-83e2-d35974319ed2@simark.ca> Date: Sun, 17 Jun 2018 01:06:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <1529106313-11806-1-git-send-email-weimin.pan@oracle.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2018-06/txt/msg00428.txt.bz2 On 2018-06-15 07:45 PM, Weimin Pan wrote: > Fix failure to find member of a typedef base class > > The test case below demonstrates the problem, as described in this PR's Comment 5: > > typedef struct { > int x; > } A; > > struct C : A { > int y; > }; > > int main() > { > C c; > return 55; > } > > $ gdb a.out > (gdb) ptype C::x > Internal error: non-aggregate type to value_struct_elt_for_reference > > In value_struct_elt_for_reference(), need to call check_typedef() on > the aggregate type to handle the case of *curtype being ptr->typedef. Thanks, that makes sense. I noted some nits, you can push the patch after addressing them. > diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog > index b2938b1..78771d3 100644 > --- a/gdb/testsuite/ChangeLog > +++ b/gdb/testsuite/ChangeLog > @@ -1,3 +1,9 @@ > +2018-06-12 Weimin Pan > + > + PR gdb/16841 > + * gdb/testsuite/gdb.cp/typedef-base-ptype.cc: New file. > + * gdb/testsuite/gdb.cp/typedef-base-ptype.exp: New file. Filenames should be relative to the ChangeLog file, so remove "gdb/testsuite/". > diff --git a/gdb/testsuite/gdb.cp/typedef-base-ptype.cc b/gdb/testsuite/gdb.cp/typedef-base-ptype.cc > new file mode 100644 > index 0000000..bfbcc4a > --- /dev/null > +++ b/gdb/testsuite/gdb.cp/typedef-base-ptype.cc > @@ -0,0 +1,30 @@ > +/* This testcase is part of GDB, the GNU debugger. > + > + Copyright 2018 Free Software Foundation, Inc. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +typedef struct { > + int x; > +} A; > + > +struct C : A { > + int y; > +}; > + > +int main() > +{ > + C c; > + return 55; > +} We try to make the test code follow the GNU coding style (unless testing a particular formatting is the purpose of the test). > diff --git a/gdb/testsuite/gdb.cp/typedef-base-ptype.exp b/gdb/testsuite/gdb.cp/typedef-base-ptype.exp I would suggest naming this test "typedef-base.exp", because we may add other tests than ptype in it. For example, David's original reproducer in PR 16841 still won't work after this patch (AFAIK), and would be a good candidate to end up as a test in this file. > new file mode 100644 > index 0000000..e588fd3 > --- /dev/null > +++ b/gdb/testsuite/gdb.cp/typedef-base-ptype.exp > @@ -0,0 +1,37 @@ > +# Copyright 2018 Free Software Foundation, Inc. > + > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . Can you add a one-liner comment that states the purpose of the test? Something like # Make sure that inheritance through a typedef is well handled. Thanks, Simon