mirror of git://gcc.gnu.org/git/gcc.git
re PR debug/63284 (-fcompare-debug issue due to redirection to __builtin_unreachable ())
PR debug/63284 * tree-cfgcleanup.c (fixup_noreturn_call): Don't split block if there are only debug stmts after the noreturn call, instead remove the debug stmts. * gcc.dg/pr63284.c: New test. From-SVN: r215331
This commit is contained in:
parent
f020a31c22
commit
c83ee18019
|
|
@ -1,3 +1,10 @@
|
||||||
|
2014-09-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/63284
|
||||||
|
* tree-cfgcleanup.c (fixup_noreturn_call): Don't split block
|
||||||
|
if there are only debug stmts after the noreturn call, instead
|
||||||
|
remove the debug stmts.
|
||||||
|
|
||||||
2014-09-17 Jan Hubicka <hubicka@ucw.cz>
|
2014-09-17 Jan Hubicka <hubicka@ucw.cz>
|
||||||
|
|
||||||
* ipa-devirt.c (type_pair, default_hashset_traits): New types.
|
* ipa-devirt.c (type_pair, default_hashset_traits): New types.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
2014-09-17 Jakub Jelinek <jakub@redhat.com>
|
2014-09-17 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR debug/63284
|
||||||
|
* gcc.dg/pr63284.c: New test.
|
||||||
|
|
||||||
* ada/acats/run_all.sh: Redirect mkdir stderr to /dev/null.
|
* ada/acats/run_all.sh: Redirect mkdir stderr to /dev/null.
|
||||||
|
|
||||||
2014-09-17 Paolo Carlini <paolo.carlini@oracle.com>
|
2014-09-17 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
/* PR debug/63284 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -fcompare-debug" } */
|
||||||
|
|
||||||
|
int a[10], *b, *d, c, f;
|
||||||
|
int fn2 (void);
|
||||||
|
void fn3 (void);
|
||||||
|
void fn4 (int);
|
||||||
|
|
||||||
|
static int
|
||||||
|
fn1 (int x)
|
||||||
|
{
|
||||||
|
int e = a[0];
|
||||||
|
if (e)
|
||||||
|
return 1;
|
||||||
|
if (b)
|
||||||
|
switch (x)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
if (d)
|
||||||
|
e = fn2 ();
|
||||||
|
else
|
||||||
|
fn3 ();
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
if (d)
|
||||||
|
{
|
||||||
|
fn3 ();
|
||||||
|
if (c)
|
||||||
|
fn4 (1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fn4 (0);
|
||||||
|
}
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
fn6 (void)
|
||||||
|
{
|
||||||
|
f = fn1 (0);
|
||||||
|
}
|
||||||
|
|
@ -565,7 +565,20 @@ fixup_noreturn_call (gimple stmt)
|
||||||
|
|
||||||
/* First split basic block if stmt is not last. */
|
/* First split basic block if stmt is not last. */
|
||||||
if (stmt != gsi_stmt (gsi_last_bb (bb)))
|
if (stmt != gsi_stmt (gsi_last_bb (bb)))
|
||||||
split_block (bb, stmt);
|
{
|
||||||
|
if (stmt == gsi_stmt (gsi_last_nondebug_bb (bb)))
|
||||||
|
{
|
||||||
|
/* Don't split if there are only debug stmts
|
||||||
|
after stmt, that can result in -fcompare-debug
|
||||||
|
failures. Remove the debug stmts instead,
|
||||||
|
they should be all unreachable anyway. */
|
||||||
|
gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
|
||||||
|
for (gsi_next (&gsi); !gsi_end_p (gsi); )
|
||||||
|
gsi_remove (&gsi, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
split_block (bb, stmt);
|
||||||
|
}
|
||||||
|
|
||||||
changed |= remove_fallthru_edge (bb->succs);
|
changed |= remove_fallthru_edge (bb->succs);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue