re PR debug/90574 ([gdb] gdb wrongly stopped at a breakpoint in an unexecuted line of code)

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
This commit is contained in:
Richard Biener 2019-06-07 12:14:55 +00:00 committed by Richard Biener
parent 510c919249
commit e733243a36
5 changed files with 50 additions and 3 deletions

View 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

View 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.

View File

@ -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 } } */

View File

@ -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 } } */

View 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++;