]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR debug/90197 (Cannot step through simple loop at -O -g)
authorJakub Jelinek <jakub@redhat.com>
Fri, 17 May 2019 19:52:06 +0000 (21:52 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 17 May 2019 19:52:06 +0000 (21:52 +0200)
Backported from mainline
2019-05-15  Jakub Jelinek  <jakub@redhat.com>

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: r271353

gcc/cp/ChangeLog
gcc/cp/cp-gimplify.c

index 94ebd940d51181d1a685330f4ed0925fcd693e02..1503fd083ab53c43a4d1c1ec3f56deef62349ac6 100644 (file)
@@ -1,6 +1,15 @@
 2019-05-17  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
+       2019-05-15  Jakub Jelinek  <jakub@redhat.com>
+
+       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-10  Jakub Jelinek  <jakub@redhat.com>
 
        PR pch/90326
index 26be1fd15223eb14e5bb8dfd08a3cc1e3595f908..17d10456341b712e84e7aaf9fa16f9f7ff912da6 100644 (file)
@@ -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);