Add missing end location information
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. gcc/ada/ChangeLog: * gcc-interface/trans.c (Subprogram_Body_to_gnu): Set the end locus of body and declaration earlier.
This commit is contained in:
parent
88795e14ae
commit
cc997e0cc4
1 changed files with 5 additions and 6 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue