aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface/trans.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/gcc-interface/trans.c')
-rw-r--r--gcc/ada/gcc-interface/trans.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 93d3af1..1b1bca8 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -4456,6 +4456,7 @@ Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
else if (gcc_zcx)
{
tree gnu_handlers;
+ location_t locus;
/* First make a block containing the handlers. */
start_stmt_group ();
@@ -4468,7 +4469,14 @@ Handled_Sequence_Of_Statements_to_gnu (Node_Id gnat_node)
/* Now make the TRY_CATCH_EXPR for the block. */
gnu_result = build2 (TRY_CATCH_EXPR, void_type_node,
gnu_inner_block, gnu_handlers);
- set_expr_location_from_node (gnu_result, gnat_node);
+ /* Set a location. We need to find a uniq location for the dispatching
+ code, otherwise we can get coverage or debugging issues. Try with
+ the location of the end label. */
+ if (Present (End_Label (gnat_node))
+ && Sloc_to_locus (Sloc (End_Label (gnat_node)), &locus))
+ SET_EXPR_LOCATION (gnu_result, locus);
+ else
+ set_expr_location_from_node (gnu_result, gnat_node);
}
else
gnu_result = gnu_inner_block;