From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 52691 invoked by alias); 28 Oct 2015 20:50:49 -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 52682 invoked by uid 89); 28 Oct 2015 20:50:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qk0-f182.google.com Received: from mail-qk0-f182.google.com (HELO mail-qk0-f182.google.com) (209.85.220.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 28 Oct 2015 20:50:48 +0000 Received: by qkbl190 with SMTP id l190so8936956qkb.2 for ; Wed, 28 Oct 2015 13:50:45 -0700 (PDT) X-Received: by 10.55.77.71 with SMTP id a68mr31307916qkb.106.1446065445845; Wed, 28 Oct 2015 13:50:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.55.75.66 with HTTP; Wed, 28 Oct 2015 13:50:16 -0700 (PDT) In-Reply-To: <1446057972-21579-1-git-send-email-palves@redhat.com> References: <1446057972-21579-1-git-send-email-palves@redhat.com> From: Simon Marchi Date: Thu, 29 Oct 2015 13:03:00 -0000 Message-ID: Subject: Re: [PATCH] gnu-v2-abi.c: Add casts To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: text/plain; charset=UTF-8 X-SW-Source: 2015-10/txt/msg00673.txt.bz2 On 28 October 2015 at 14:46, Pedro Alves wrote: > I looked at changing these is_destructor_name/is_constructor_name > interfaces in order to detangle the boolean result from the ctor/dtor > kind return, but then realized that this design goes all the way down > to the libiberty demangler interfaces. E.g, include/demangle.h: > > ~~~ > /* Return non-zero iff NAME is the mangled form of a constructor name > in the G++ V3 ABI demangling style. Specifically, return an `enum > gnu_v3_ctor_kinds' value indicating what kind of constructor > it is. */ > extern enum gnu_v3_ctor_kinds > is_gnu_v3_mangled_ctor (const char *name); > > > enum gnu_v3_dtor_kinds { > gnu_v3_deleting_dtor = 1, > gnu_v3_complete_object_dtor, > gnu_v3_base_object_dtor, > /* These are not part of the V3 ABI. Unified destructors are generated > as a speed-for-space optimization when the -fdeclone-ctor-dtor option > is used, and are always internal symbols. */ > gnu_v3_unified_dtor, > gnu_v3_object_dtor_group > }; > ~~~ > > libiberty/cp-demangle.c: > > ~~~ > enum gnu_v3_ctor_kinds > is_gnu_v3_mangled_ctor (const char *name) > { > enum gnu_v3_ctor_kinds ctor_kind; > enum gnu_v3_dtor_kinds dtor_kind; > > if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind)) > return (enum gnu_v3_ctor_kinds) 0; > return ctor_kind; > } > ~~~ > > etc. > > gdb/ChangeLog: > 2015-10-27 Pedro Alves > > * gnu-v2-abi.c (gnuv2_is_destructor_name) > (gnuv2_is_constructor_name): Add casts. > --- > gdb/gnu-v2-abi.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/gdb/gnu-v2-abi.c b/gdb/gnu-v2-abi.c > index c508b55..6c2b92a 100644 > --- a/gdb/gnu-v2-abi.c > +++ b/gdb/gnu-v2-abi.c > @@ -40,7 +40,7 @@ gnuv2_is_destructor_name (const char *name) > || startswith (name, "__dt__")) > return complete_object_dtor; > else > - return 0; > + return (enum dtor_kinds) 0; > } > > static enum ctor_kinds > @@ -51,7 +51,7 @@ gnuv2_is_constructor_name (const char *name) > || startswith (name, "__ct__")) > return complete_object_ctor; > else > - return 0; > + return (enum ctor_kinds) 0; > } > > static int > -- > 1.9.3 > I am ok with the cast, but just to note that we could do another way. I think it would be safe to add a "not_a_ctor = 0" enum value to ctor_kinds (which is defined in gdb), and return that in gnuv2_is_constructor_name. Meanwhile, the function in libiberty for gnu-abi-v3 (is_gnu_v3_mangled_ctor) will still return a casted 0, which will map to not_a_ctor. Of course, the comment /* Kinds of constructors. All these values are guaranteed to be non-zero. */ would need to change. Idem for destructors.