From patchwork Tue Apr 22 10:31:10 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Wielaard X-Patchwork-Id: 341287 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 1166E1400EF for ; Tue, 22 Apr 2014 20:31:28 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version; q=dns; s=default; b=ZeWJB7nMBbfTOjv9Wt RUm2TIJ0wumbnwAv3fC5yZ8XLkqVbBoaBKSc74DLzFPv7it93yoryAnPJuEtaX74 rKLRVn1zVgJ6arRXK8GgvM8hsJdOZn5zL9GYWZd3n6D2I1zZeNY3b/q5h0U5gsme opI/GHExlj/jzT3hwKlnHv53w= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version; s=default; bh=Y18VN/JpbvgHSoqp1Al7A3+x lus=; b=p9+j3jDKIzANOaJiAU4Q3ICuKJPFKxq99ceIMFIB35rl66gppmMJL4AK 0ESms/K3pfWpTGuOWE+M21S1nExnz7kz0nsDcUL1Ko/4V4+/wwTH92Ji1AOC22wW Qwzu/scregoDS+rAOHPN0PecHoZdCHxUlI9iGd1nJ4Mt9V4+Qi0= Received: (qmail 9047 invoked by alias); 22 Apr 2014 10:31:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9035 invoked by uid 89); 22 Apr 2014 10:31:20 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.1 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 22 Apr 2014 10:31:14 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s3MAVDj4020191 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 22 Apr 2014 06:31:13 -0400 Received: from [10.36.116.78] (ovpn-116-78.ams2.redhat.com [10.36.116.78]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s3MAVBSF026416; Tue, 22 Apr 2014 06:31:11 -0400 Subject: Ping: [PATCH] PR debug/16063. Add DW_AT_type to DW_TAG_enumeration. From: Mark Wielaard To: Cary Coutant Cc: Tom Tromey , gcc-patches , Richard Henderson , Jason Merrill In-Reply-To: <1397510343.5633.44.camel@bordewijk.wildebeest.org> References: <1395573501-21296-1-git-send-email-mjw@redhat.com> <1395744618.5704.98.camel@bordewijk.wildebeest.org> <1395859013.5704.170.camel@bordewijk.wildebeest.org> <87ha61qiug.fsf@fleche.redhat.com> <1397202952.8924.1.camel@bordewijk.wildebeest.org> <1397510343.5633.44.camel@bordewijk.wildebeest.org> Date: Tue, 22 Apr 2014 12:31:10 +0200 Message-ID: <1398162670.29199.127.camel@bordewijk.wildebeest.org> Mime-Version: 1.0 On Mon, 2014-04-14 at 23:19 +0200, Mark Wielaard wrote: > On Fri, 2014-04-11 at 11:03 -0700, Cary Coutant wrote: > > >> The DWARF bits are fine with me. > > > > > > Thanks. Who can approve the other bits? > > > > You should probably get C and C++ front end approval. I'm not really > > sure who needs to review patches in c-family/. Since the part in c/ is > > so tiny, maybe all you need is a C++ front end maintainer. Both > > Richard Henderson and Jason Merrill are global reviewers, so either of > > them could approve the whole thing. > > Thanks, I added them to the CC. > > > > When approved should I wait till stage 1 opens before committing? > > > > Yes. The PR you're fixing is an enhancement request, not a regression, > > so it needs to wait. > > Since stage one just opened up again this seems a good time to re-ask > for approval then :) Rebased patch against current trunk attached. Ping. Tom already pushed his patches to GDB that take advantage of the new information if available. Thanks, Mark From 81c76099294a9d617798ed65095d7f8210d6f958 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Sun, 23 Mar 2014 12:05:16 +0100 Subject: [PATCH] PR debug/16063. Add DW_AT_type to DW_TAG_enumeration. Add a new lang-hook that provides the underlying base type of an ENUMERAL_TYPE. Including implementations for C and C++. Use this enum_underlying_base_type lang-hook in dwarf2out.c to add a DW_AT_type base type reference to a DW_TAG_enumeration. gcc/ * dwarf2out.c (gen_enumeration_type_die): Add DW_AT_type if enum_underlying_base_type defined and DWARF version > 3. * langhooks.h (struct lang_hooks_for_types): Add enum_underlying_base_type. * langhooks-def.h (LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE): New define. (LANG_HOOKS_FOR_TYPES_INITIALIZER): Add new lang hook. gcc/c-family/ * c-common.c (c_enum_underlying_base_type): New function. * c-common.h (c_enum_underlying_base_type): Add declaration. gcc/c/ * c-objc-common.h (LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE): Define. gcc/cp/ * cp-lang.c (cxx_enum_underlying_base_type): New function. (LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE): Define. --- gcc/ChangeLog | 10 ++++++++++ gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-common.c | 8 ++++++++ gcc/c-family/c-common.h | 1 + gcc/c/ChangeLog | 5 +++++ gcc/c/c-objc-common.h | 2 ++ gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cp-lang.c | 18 ++++++++++++++++++ gcc/dwarf2out.c | 6 ++++++ gcc/langhooks-def.h | 4 +++- gcc/langhooks.h | 2 ++ 11 files changed, 67 insertions(+), 1 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e34c39f..26a9037 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2014-03-21 Mark Wielaard + + PR debug/16063 + * dwarf2out.c (gen_enumeration_type_die): Add DW_AT_type if + enum_underlying_base_type defined and DWARF version > 3. + * langhooks.h (struct lang_hooks_for_types): Add + enum_underlying_base_type. + * langhooks-def.h (LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE): New define. + (LANG_HOOKS_FOR_TYPES_INITIALIZER): Add new lang hook. + 2014-04-22 Ian Bolton * config/arm/arm-protos.h (tune_params): New struct members. diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 206b47b..0b7b7e1 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2014-03-21 Mark Wielaard + + PR debug/16063 + * c-common.c (c_enum_underlying_base_type): New function. + * c-common.h (c_enum_underlying_base_type): Add declaration. + 2014-04-14 Richard Biener Marc Glisse diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index c0e247b..a7c212f 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -3902,6 +3902,14 @@ c_register_builtin_type (tree type, const char* name) registered_builtin_types = tree_cons (0, type, registered_builtin_types); } + +/* The C version of the enum_underlying_base_type langhook. */ +tree +c_enum_underlying_base_type (const_tree type) +{ + return c_common_type_for_size (TYPE_PRECISION (type), TYPE_UNSIGNED (type)); +} + /* Print an error message for invalid operands to arith operation CODE with TYPE0 for operand 0, and TYPE1 for operand 1. diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 24959d8..d433972 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -832,6 +832,7 @@ extern void c_common_finish (void); extern void c_common_parse_file (void); extern alias_set_type c_common_get_alias_set (tree); extern void c_register_builtin_type (tree, const char*); +extern tree c_enum_underlying_base_type (const_tree); extern bool c_promoting_integer_type_p (const_tree); extern int self_promoting_args_p (const_tree); extern tree strip_pointer_operator (tree); diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index bacfbe3..cf4252b 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,8 @@ +2014-03-21 Mark Wielaard + + PR debug/16063 + * c-objc-common.h (LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE): Define. + 2014-04-12 Igor Zamyatin PR middle-end/60469 diff --git a/gcc/c/c-objc-common.h b/gcc/c/c-objc-common.h index 92cf60f..0651db7 100644 --- a/gcc/c/c-objc-common.h +++ b/gcc/c/c-objc-common.h @@ -84,6 +84,8 @@ along with GCC; see the file COPYING3. If not see #define LANG_HOOKS_TO_TARGET_CHARSET c_common_to_target_charset #undef LANG_HOOKS_EXPR_TO_DECL #define LANG_HOOKS_EXPR_TO_DECL c_expr_to_decl +#undef LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE +#define LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE c_enum_underlying_base_type /* The C front end's scoping structure is very different from that expected by the language-independent code; it is best diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b7db350..7f187f7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-03-21 Mark Wielaard + + PR debug/16063 + * cp-lang.c (cxx_enum_underlying_base_type): New function. + (LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE): Define. + 2014-04-18 Jason Merrill DR 1571 diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index c28c07a..6a40d29 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -23,6 +23,7 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "tm.h" #include "tree.h" +#include "stor-layout.h" #include "cp-tree.h" #include "c-family/c-common.h" #include "langhooks.h" @@ -40,6 +41,7 @@ static enum classify_record cp_classify_record (tree type); static tree cp_eh_personality (void); static tree get_template_innermost_arguments_folded (const_tree); static tree get_template_argument_pack_elems_folded (const_tree); +static tree cxx_enum_underlying_base_type (const_tree); /* Lang hooks common to C++ and ObjC++ are declared in cp/cp-objcp-common.h; consequently, there should be very few hooks below. */ @@ -81,6 +83,8 @@ static tree get_template_argument_pack_elems_folded (const_tree); #define LANG_HOOKS_EH_PERSONALITY cp_eh_personality #undef LANG_HOOKS_EH_RUNTIME_TYPE #define LANG_HOOKS_EH_RUNTIME_TYPE build_eh_type_type +#undef LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE +#define LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE cxx_enum_underlying_base_type /* Each front end provides its own lang hook initializer. */ struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; @@ -219,5 +223,19 @@ get_template_argument_pack_elems_folded (const_tree t) return fold_cplus_constants (get_template_argument_pack_elems (t)); } +/* The C++ version of the enum_underlying_base_type langhook. + See also cp/semantics.c (finish_underlying_type). */ +static tree cxx_enum_underlying_base_type (const_tree type) +{ + tree underlying_type = ENUM_UNDERLYING_TYPE (type); + + if (! ENUM_FIXED_UNDERLYING_TYPE_P (type)) + underlying_type + = c_common_type_for_mode (TYPE_MODE (underlying_type), + TYPE_UNSIGNED (underlying_type)); + + return underlying_type; +} + #include "gt-cp-cp-lang.h" #include "gtype-cp.h" diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 8caf940..6bff040 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -17346,6 +17346,12 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die) TREE_ASM_WRITTEN (type) = 1; add_byte_size_attribute (type_die, type); + if (lang_hooks.types.enum_underlying_base_type != NULL + && (dwarf_version >= 3 || !dwarf_strict)) + { + tree underlying = lang_hooks.types.enum_underlying_base_type (type); + add_type_attribute (type_die, underlying, 0, 0, context_die); + } if (TYPE_STUB_DECL (type) != NULL_TREE) { add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h index 95bd379..b8e0d97 100644 --- a/gcc/langhooks-def.h +++ b/gcc/langhooks-def.h @@ -173,6 +173,7 @@ extern tree lhd_make_node (enum tree_code); #define LANG_HOOKS_GET_SUBRANGE_BOUNDS NULL #define LANG_HOOKS_DESCRIPTIVE_TYPE NULL #define LANG_HOOKS_RECONSTRUCT_COMPLEX_TYPE reconstruct_complex_type +#define LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE NULL #define LANG_HOOKS_FOR_TYPES_INITIALIZER { \ LANG_HOOKS_MAKE_TYPE, \ @@ -191,7 +192,8 @@ extern tree lhd_make_node (enum tree_code); LANG_HOOKS_GET_ARRAY_DESCR_INFO, \ LANG_HOOKS_GET_SUBRANGE_BOUNDS, \ LANG_HOOKS_DESCRIPTIVE_TYPE, \ - LANG_HOOKS_RECONSTRUCT_COMPLEX_TYPE \ + LANG_HOOKS_RECONSTRUCT_COMPLEX_TYPE, \ + LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE \ } /* Declaration hooks. */ diff --git a/gcc/langhooks.h b/gcc/langhooks.h index c848b0c..667298b 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -137,6 +137,8 @@ struct lang_hooks_for_types return values from functions. The argument TYPE is the top of the chain, and BOTTOM is the new type which we will point to. */ tree (*reconstruct_complex_type) (tree, tree); + + tree (*enum_underlying_base_type) (const_tree); }; /* Language hooks related to decls and the symbol table. */ -- 1.7.1