aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface/trans.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2019-01-26 16:07:47 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2019-01-26 16:07:47 +0000
commit93101d23864bdfdb62767267ad29fe20540cdbf6 (patch)
tree888b76cb38fb33ca66459613e24e988815809c63 /gcc/ada/gcc-interface/trans.c
parente54b62687aca823aebb15000d33ca59947204881 (diff)
downloadgcc-93101d23864bdfdb62767267ad29fe20540cdbf6.zip
gcc-93101d23864bdfdb62767267ad29fe20540cdbf6.tar.gz
gcc-93101d23864bdfdb62767267ad29fe20540cdbf6.tar.bz2
trans.c (Regular_Loop_to_gnu): Use the SLOC of the iteration scheme, if present, throughout the translation.
* gcc-interface/trans.c (Regular_Loop_to_gnu): Use the SLOC of the iteration scheme, if present, throughout the translation. From-SVN: r268299
Diffstat (limited to 'gcc/ada/gcc-interface/trans.c')
-rw-r--r--gcc/ada/gcc-interface/trans.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index db8e4c2..3e326b4 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -3501,25 +3501,29 @@ Acc_Loop_to_gnu (Node_Id gnat_loop)
static tree
Regular_Loop_to_gnu (Node_Id gnat_node, tree *gnu_cond_expr_p)
{
- struct loop_info_d * const gnu_loop_info = gnu_loop_stack->last ();
- tree gnu_loop_stmt = gnu_loop_info->stmt;
-
const Node_Id gnat_iter_scheme = Iteration_Scheme (gnat_node);
- tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
-
+ struct loop_info_d *const gnu_loop_info = gnu_loop_stack->last ();
+ tree gnu_loop_stmt = gnu_loop_info->stmt;
+ tree gnu_loop_label = LOOP_STMT_LABEL (gnu_loop_stmt);
tree gnu_cond_expr = *gnu_cond_expr_p;
+ tree gnu_low = NULL_TREE, gnu_high = NULL_TREE;
- tree gnu_loop_label = LOOP_STMT_LABEL (gnu_loop_stmt);
+ /* Set the condition under which the loop must keep going. If we have an
+ explicit condition, use it to set the location information throughout
+ the translation of the loop statement to avoid having multiple SLOCs.
- /* Set the condition under which the loop must keep going.
For the case "LOOP .... END LOOP;" the condition is always true. */
if (No (gnat_iter_scheme))
;
/* For the case "WHILE condition LOOP ..... END LOOP;" it's immediate. */
else if (Present (Condition (gnat_iter_scheme)))
- LOOP_STMT_COND (gnu_loop_stmt)
- = gnat_to_gnu (Condition (gnat_iter_scheme));
+ {
+ LOOP_STMT_COND (gnu_loop_stmt)
+ = gnat_to_gnu (Condition (gnat_iter_scheme));
+
+ set_expr_location_from_node (gnu_loop_stmt, gnat_iter_scheme);
+ }
/* Otherwise we have an iteration scheme and the condition is given by the
bounds of the subtype of the iteration variable. */
@@ -3673,7 +3677,7 @@ Regular_Loop_to_gnu (Node_Id gnat_node, tree *gnu_cond_expr_p)
build_binary_op (LE_EXPR, boolean_type_node,
gnu_low, gnu_high),
NULL_TREE, alloc_stmt_list ());
- set_expr_location_from_node (gnu_cond_expr, gnat_loop_spec);
+ set_expr_location_from_node (gnu_cond_expr, gnat_iter_scheme);
}
}
@@ -3748,6 +3752,8 @@ Regular_Loop_to_gnu (Node_Id gnat_node, tree *gnu_cond_expr_p)
set_expr_location_from_node (gnu_stmt, gnat_iter_scheme);
LOOP_STMT_UPDATE (gnu_loop_stmt) = gnu_stmt;
}
+
+ set_expr_location_from_node (gnu_loop_stmt, gnat_iter_scheme);
}
/* If the loop was named, have the name point to this loop. In this case,