diff mbox series

[Ada] Add missing end location information

Message ID 2735929.ri9RJRQ35B@fomalhaut
State New
Headers show
Series [Ada] Add missing end location information | expand

Commit Message

Eric Botcazou Sept. 28, 2020, 7:35 a.m. UTC
In some cases we would fail to put the end location information on the 
outermost BIND_EXPR of a function, which is problematic when there is a 
dynamic stack allocation.

Tested on x86_64-suse-linux, applied on the mainline.  This makes the 
following tweak to lower_try_finally_dup_block obsolete:
  https://gcc.gnu.org/pipermail/gcc-patches/2020-September/553951.html
so I reverted it.


2020-09-28  Eric Botcazou  <ebotcazou@adacore.com>

	* gcc-interface/trans.c (Subprogram_Body_to_gnu): Set the end locus
	of body and declaration earlier.
diff mbox series

Patch

diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 3491451cc3d..f03d591a323 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -4017,6 +4017,11 @@  Subprogram_Body_to_gnu (Node_Id gnat_node)
   gnat_poplevel ();
   gnu_result = end_stmt_group ();
 
+  /* Attempt setting the end_locus of our GCC body tree, typically a BIND_EXPR,
+     then the end_locus of our GCC subprogram declaration tree.  */
+  set_end_locus_from_node (gnu_result, gnat_node);
+  set_end_locus_from_node (gnu_subprog_decl, gnat_node);
+
   /* If we populated the parameter attributes cache, we need to make sure that
      the cached expressions are evaluated on all the possible paths leading to
      their uses.  So we force their evaluation on entry of the function.  */
@@ -4111,12 +4116,6 @@  Subprogram_Body_to_gnu (Node_Id gnat_node)
 
   gnu_return_label_stack->pop ();
 
-  /* Attempt setting the end_locus of our GCC body tree, typically a
-     BIND_EXPR or STATEMENT_LIST, then the end_locus of our GCC subprogram
-     declaration tree.  */
-  set_end_locus_from_node (gnu_result, gnat_node);
-  set_end_locus_from_node (gnu_subprog_decl, gnat_node);
-
   /* On SEH targets, install an exception handler around the main entry
      point to catch unhandled exceptions.  */
   if (DECL_NAME (gnu_subprog_decl) == main_identifier_node