From 2d3c7e4f2d3c39f0ff5f0bcf0c5d97e0d7a893dc Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 4 Jan 2011 09:50:33 +0000 Subject: [PATCH] trans.c (Case_Statement_to_gnu): Put the SLOC of the end-of-case on the end label and its associated gotos, if any. * gcc-interface/trans.c (Case_Statement_to_gnu): Put the SLOC of the end-of-case on the end label and its associated gotos, if any. From-SVN: r168458 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/trans.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f644a5569b0..68446aca747 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2011-01-04 Eric Botcazou + + * gcc-interface/trans.c (Case_Statement_to_gnu): Put the SLOC of the + end-of-case on the end label and its associated gotos, if any. + 2011-01-04 Eric Botcazou * gcc-interface/trans.c (Subprogram_Body_to_gnu): Evaluate the diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index ecd948993fb..30dbf7a969a 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -1954,6 +1954,7 @@ Case_Statement_to_gnu (Node_Id gnat_node) { tree gnu_result, gnu_expr, gnu_label; Node_Id gnat_when; + location_t end_locus; bool may_fallthru = false; gnu_expr = gnat_to_gnu (Expression (gnat_node)); @@ -1977,7 +1978,10 @@ Case_Statement_to_gnu (Node_Id gnat_node) /* We build a SWITCH_EXPR that contains the code with interspersed CASE_LABEL_EXPRs for each label. */ - gnu_label = create_artificial_label (input_location); + if (!Sloc_to_locus (Sloc (gnat_node) + UI_To_Int (End_Span (gnat_node)), + &end_locus)) + end_locus = input_location; + gnu_label = create_artificial_label (end_locus); start_stmt_group (); for (gnat_when = First_Non_Pragma (Alternatives (gnat_node)); @@ -2062,7 +2066,9 @@ Case_Statement_to_gnu (Node_Id gnat_node) add_stmt (group); if (group_may_fallthru) { - add_stmt (build1 (GOTO_EXPR, void_type_node, gnu_label)); + tree stmt = build1 (GOTO_EXPR, void_type_node, gnu_label); + SET_EXPR_LOCATION (stmt, end_locus); + add_stmt (stmt); may_fallthru = true; } } -- 2.30.2