From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 58547 invoked by alias); 21 May 2015 21:22:22 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 58534 invoked by uid 89); 21 May 2015 21:22:21 -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_50,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=no 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 (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 21 May 2015 21:22:20 +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 t4LLMHN6029847 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 21 May 2015 17:22:17 -0400 Received: from reynosa.quesejoda.com (vpn-49-169.rdu2.redhat.com [10.10.49.169]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t4LLMFUB022147; Thu, 21 May 2015 17:22:16 -0400 Message-ID: <555E4C87.9040804@redhat.com> Date: Thu, 21 May 2015 21:33:00 -0000 From: Aldy Hernandez User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Eric Botcazou CC: gcc-patches@gcc.gnu.org, jason merrill Subject: Re: [patch 1/10] debug-early merge: Ada front-end References: <554C0417.8020300@redhat.com> <6819186.gzK1HFtdtl@polaris> In-Reply-To: <6819186.gzK1HFtdtl@polaris> Content-Type: multipart/mixed; boundary="------------020403060500030704090000" X-SW-Source: 2015-05/txt/msg02042.txt.bz2 This is a multi-part message in MIME format. --------------020403060500030704090000 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Content-length: 1360 On 05/08/2015 06:26 AM, Eric Botcazou wrote: [Jason, question below.] > What's the replacement mechanism for the first pass on global_decls? The > comment explains that generating debug info must be delayed in this case. My apologies for the delay on Ada. I have reworked the patch to leave the first pass on the TYPE_DECLs which are definitely needed. I also optimized things a bit, since we don't need to save all the globals any more. There is one regression which I'd like you and Jason's input before proceeding: +FAIL: gnat.dg/specs/debug1.ads scan-assembler-times DW_AT_artificial 17 The problem is that the Ada front-end twiddles the DECL_ARTIFICIAL flag *after* it has called debug_hooks->early_global_decl(). The function gnat_to_gnu_entity() calls create_var_decl_1->rest_of_decl_compilation, but then much later twiddles DECL_ARTIFICIAL: if (!Comes_From_Source (gnat_entity)) DECL_ARTIFICIAL (gnu_decl) = 1; Twiddling DECL_ARTIFICIAL after we create early dwarf, means the DIE does not get the DW_AT_artificial. Would it be possible for you guys (ahem, Ada folk) to set DECL_ARTIFICIAL before calling rest_of_decl_compilation? If not, Jason I suppose we could tag the DW_AT_artificial in late_global_decl when we notice it now has DECL_ARTIFICIAL set. But I'd prefer not to hack things this way. Thoughts? Aldy --------------020403060500030704090000 Content-Type: text/x-patch; name="dearly-ada.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="dearly-ada.patch" Content-length: 4233 gcc/ada/ * gcc-interface/gigi.h (note_types_used_by_globals): Rename from gnat_write_global_declarations. * gcc-interface/misc.c (gnat_parse_file): Call note_types_used_by_globals. Remove LANG_HOOKS_WRITE_GLOBALS. * gcc-interface/utils.c: Rename global_decls to type_decls. (gnat_write_global_declarations): Rename to note_types_used_by_globals. Remove call to finalize_compilation_unit. Remove debug_hooks->global_decl() call for globals. (gnat_pushdecls): Only insert into type_decls if TYPE_DECL. diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index 6d65fc5..fead2be 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -535,8 +535,7 @@ extern tree gnat_type_for_size (unsigned precision, int unsignedp); an unsigned type; otherwise a signed type is returned. */ extern tree gnat_type_for_mode (machine_mode mode, int unsignedp); -/* Emit debug info for all global variable declarations. */ -extern void gnat_write_global_declarations (void); +extern void note_types_used_by_globals (void); /* Return the unsigned version of a TYPE_NODE, a scalar type. */ extern tree gnat_unsigned_type (tree type_node); diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index edaab97..2056a61 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -122,6 +122,8 @@ gnat_parse_file (void) /* Call the front end. */ _ada_gnat1drv (); + + note_types_used_by_globals (); } /* Return language mask for option processing. */ @@ -972,8 +974,6 @@ gnat_init_ts (void) #define LANG_HOOKS_GETDECLS lhd_return_null_tree_v #undef LANG_HOOKS_PUSHDECL #define LANG_HOOKS_PUSHDECL gnat_return_tree -#undef LANG_HOOKS_WRITE_GLOBALS -#define LANG_HOOKS_WRITE_GLOBALS gnat_write_global_declarations #undef LANG_HOOKS_GET_ALIAS_SET #define LANG_HOOKS_GET_ALIAS_SET gnat_get_alias_set #undef LANG_HOOKS_PRINT_DECL diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 5968857..3ef3a3a 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -227,8 +227,8 @@ static GTY((deletable)) struct gnat_binding_level *free_binding_level; /* The context to be used for global declarations. */ static GTY(()) tree global_context; -/* An array of global declarations. */ -static GTY(()) vec *global_decls; +/* An array of global type declarations. */ +static GTY(()) vec *type_decls; /* An array of builtin function declarations. */ static GTY(()) vec *builtin_decls; @@ -765,7 +765,10 @@ gnat_pushdecl (tree decl, Node_Id gnat_node) vec_safe_push (builtin_decls, decl); } else if (global_bindings_p ()) - vec_safe_push (global_decls, decl); + { + if (TREE_CODE (decl) == TYPE_DECL) + vec_safe_push (type_decls, decl); + } else { DECL_CHAIN (decl) = BLOCK_VARS (current_binding_level->block); @@ -5176,7 +5179,7 @@ smaller_form_type_p (tree type, tree orig_type) static GTY (()) tree dummy_global; void -gnat_write_global_declarations (void) +note_types_used_by_globals (void) { unsigned int i; tree iter; @@ -5209,23 +5212,9 @@ gnat_write_global_declarations (void) ensures that global types whose compilation hasn't been finalized yet, for example pointers to Taft amendment types, have their compilation finalized in the right context. */ - FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter) - if (TREE_CODE (iter) == TYPE_DECL && !DECL_IGNORED_P (iter)) + FOR_EACH_VEC_SAFE_ELT (type_decls, i, iter) + if (!DECL_IGNORED_P (iter)) debug_hooks->type_decl (iter, false); - - /* Proceed to optimize and emit assembly. */ - symtab->finalize_compilation_unit (); - - /* After cgraph has had a chance to emit everything that's going to - be emitted, output debug information for the rest of globals. */ - if (!seen_error ()) - { - timevar_push (TV_SYMOUT); - FOR_EACH_VEC_SAFE_ELT (global_decls, i, iter) - if (TREE_CODE (iter) != TYPE_DECL && !DECL_IGNORED_P (iter)) - debug_hooks->global_decl (iter); - timevar_pop (TV_SYMOUT); - } } /* ************************************************************************ --------------020403060500030704090000--