aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface/trans.c
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2012-07-23 10:41:08 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2012-07-23 10:41:08 +0200
commit678400b3589e37edc90647ce3744347301effbed (patch)
tree7d1828766db1f3cd9cdc1957c6109964833c2495 /gcc/ada/gcc-interface/trans.c
parentc4250ab16bc898d9995a804afa2bcf9523f0cd83 (diff)
downloadgcc-678400b3589e37edc90647ce3744347301effbed.zip
gcc-678400b3589e37edc90647ce3744347301effbed.tar.gz
gcc-678400b3589e37edc90647ce3744347301effbed.tar.bz2
[multiple changes]
2012-07-23 Tristan Gingold <gingold@adacore.com> * gcc-interface/trans.c (Handled_Sequence_Of_Statements_to_gnu): Use End_Label sloc when possible for sloc of the TRY_CATCH_EXPR node. 2012-07-23 Olivier Hainque <hainque@adacore.com> * gcc-interface/Makefile.in: Adjust processing of Linker_Options for VxWorks. * gcc-interface/Make-lang.in: Update dependencies. From-SVN: r189777
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;