From c42b72a7ddc52c65a0a6b3f9127224c8770ac6da Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 15 May 2019 23:41:35 +0200 Subject: [PATCH] re PR debug/90197 (Cannot step through simple loop at -O -g) PR debug/90197 * cp-gimplify.c (genericize_cp_loop): Emit a DEBUG_BEGIN_STMT before the condition (or if missing or constant non-zero at the end of the loop. Emit a DEBUG_BEGIN_STMT before the increment expression if any. Don't call protected_set_expr_location on incr if it already has a location. From-SVN: r271269 --- gcc/cp/ChangeLog | 9 +++++++++ gcc/cp/cp-gimplify.c | 29 ++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3119c0370df..058773f2999 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2019-05-15 Jakub Jelinek + + PR debug/90197 + * cp-gimplify.c (genericize_cp_loop): Emit a DEBUG_BEGIN_STMT + before the condition (or if missing or constant non-zero at the end + of the loop. Emit a DEBUG_BEGIN_STMT before the increment expression + if any. Don't call protected_set_expr_location on incr if it already + has a location. + 2019-05-15 Marek Polacek CWG 2096 - constraints on literal unions. diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 4e63a4a6944..72d8581ffe5 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -241,8 +241,10 @@ genericize_cp_loop (tree *stmt_p, location_t start_locus, tree cond, tree body, tree blab, clab; tree exit = NULL; tree stmt_list = NULL; + tree debug_begin = NULL; - protected_set_expr_location (incr, start_locus); + if (EXPR_LOCATION (incr) == UNKNOWN_LOCATION) + protected_set_expr_location (incr, start_locus); cp_walk_tree (&cond, cp_genericize_r, data, NULL); cp_walk_tree (&incr, cp_genericize_r, data, NULL); @@ -253,6 +255,13 @@ genericize_cp_loop (tree *stmt_p, location_t start_locus, tree cond, tree body, cp_walk_tree (&body, cp_genericize_r, data, NULL); *walk_subtrees = 0; + if (MAY_HAVE_DEBUG_MARKER_STMTS + && (!cond || !integer_zerop (cond))) + { + debug_begin = build0 (DEBUG_BEGIN_STMT, void_type_node); + SET_EXPR_LOCATION (debug_begin, cp_expr_loc_or_loc (cond, start_locus)); + } + if (cond && TREE_CODE (cond) != INTEGER_CST) { /* If COND is constant, don't bother building an exit. If it's false, @@ -265,10 +274,24 @@ genericize_cp_loop (tree *stmt_p, location_t start_locus, tree cond, tree body, } if (exit && cond_is_first) - append_to_statement_list (exit, &stmt_list); + { + append_to_statement_list (debug_begin, &stmt_list); + debug_begin = NULL_TREE; + append_to_statement_list (exit, &stmt_list); + } append_to_statement_list (body, &stmt_list); finish_bc_block (&stmt_list, bc_continue, clab); - append_to_statement_list (incr, &stmt_list); + if (incr) + { + if (MAY_HAVE_DEBUG_MARKER_STMTS) + { + tree d = build0 (DEBUG_BEGIN_STMT, void_type_node); + SET_EXPR_LOCATION (d, cp_expr_loc_or_loc (incr, start_locus)); + append_to_statement_list (d, &stmt_list); + } + append_to_statement_list (incr, &stmt_list); + } + append_to_statement_list (debug_begin, &stmt_list); if (exit && !cond_is_first) append_to_statement_list (exit, &stmt_list); -- 2.30.2