re PR debug/90574 ([gdb] gdb wrongly stopped at a breakpoint in an unexecuted line...
authorRichard Biener <rguenther@suse.de>
Fri, 7 Jun 2019 12:14:55 +0000 (12:14 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 7 Jun 2019 12:14:55 +0000 (12:14 +0000)
2019-06-07  Richard Biener  <rguenther@suse.de>

PR debug/90574
* tree-cfg.c (stmt_starts_bb_p): Split blocks at labels
that appear after user labels.

* gcc.misc-tests/gcov-pr90574-1.c: New testcase.
* gcc.misc-tests/gcov-pr90574-2.c: Likewise.

From-SVN: r272040

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.misc-tests/gcov-pr90574-1.c [new file with mode: 0644]
gcc/testsuite/gcc.misc-tests/gcov-pr90574-2.c [new file with mode: 0644]
gcc/tree-cfg.c

index a1cffe10a32d5612cba275c2c5e12128285f91a8..41e364b7f48309543a9d286091a1fea22d06c607 100644 (file)
@@ -1,3 +1,9 @@
+2019-06-07  Richard Biener  <rguenther@suse.de>
+
+       PR debug/90574
+       * tree-cfg.c (stmt_starts_bb_p): Split blocks at labels
+       that appear after user labels.
+
 2019-06-07  Martin Liska  <mliska@suse.cz>
 
        * cselib.c (cselib_init): Disable hash table
index 9410686a9f700bdd65c03baed40c707e8348a1ad..75ff9daf2e3867e63ac0d330a05419267554e22a 100644 (file)
@@ -1,3 +1,9 @@
+2019-06-07  Richard Biener  <rguenther@suse.de>
+
+       PR debug/90574
+       * gcc.misc-tests/gcov-pr90574-1.c: New testcase.
+       * gcc.misc-tests/gcov-pr90574-2.c: Likewise.
+
 2019-06-07  Jan Hubicka  <hubicka@ucw.cz>
 
        * gcc.dg/lto/alias-access-path-2.0.c: New testcase.
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-pr90574-1.c b/gcc/testsuite/gcc.misc-tests/gcov-pr90574-1.c
new file mode 100644 (file)
index 0000000..41ac9bb
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-options "-fprofile-arcs -ftest-coverage" } */
+/* { dg-do run { target native } } */
+
+int main(int argc, char **argv)
+{
+  if (argc == 0)
+    {
+      int *ptr;
+label:  /* count(#####) */
+       {
+       }
+    }
+  if (argc == 1)
+    {
+      __builtin_printf("hello\n");
+    }
+  return 0;
+}
+
+/* { dg-final { run-gcov gcov-pr90574-1.c } } */
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-pr90574-2.c b/gcc/testsuite/gcc.misc-tests/gcov-pr90574-2.c
new file mode 100644 (file)
index 0000000..2db70c9
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-options "-fprofile-arcs -ftest-coverage" } */
+/* { dg-do run { target native } } */
+
+int main(int argc, char **argv)
+{
+  switch (argc)
+    {
+    case 0:
+      foo: /* count(#####) */
+    case 1:;
+    }
+  return 0;
+}
+
+/* { dg-final { run-gcov gcov-pr90574-2.c } } */
index 94b258498dc54c89b1a7b2b4b3cc4f8c123e6737..a585efea3d8ac7b4d73d1d447f455909cc44c029 100644 (file)
@@ -2722,10 +2722,10 @@ stmt_starts_bb_p (gimple *stmt, gimple *prev_stmt)
          || FORCED_LABEL (gimple_label_label (label_stmt)))
        return true;
 
-      if (prev_stmt && gimple_code (prev_stmt) == GIMPLE_LABEL)
+      if (glabel *plabel = safe_dyn_cast <glabel *> (prev_stmt))
        {
-         if (DECL_NONLOCAL (gimple_label_label (
-                              as_a <glabel *> (prev_stmt))))
+         if (DECL_NONLOCAL (gimple_label_label (plabel))
+             || !DECL_ARTIFICIAL (gimple_label_label (plabel)))
            return true;
 
          cfg_stats.num_merged_labels++;