re PR middle-end/33706 (gcc_assert failure in verify_eh_edges)

gcc/ChangeLog:
PR middle-end/33706
* tree-inline.c (copy_bb): Use bsi_replace to replace a
__builtin_va_arg_pack-containing call stmt.
gcc/testsuite/ChangeLog:
PR middle-end/33706
* gcc.dg/va-arg-pack-2.c: New.

From-SVN: r129355
This commit is contained in:
Alexandre Oliva 2007-10-15 17:05:19 +00:00 committed by Alexandre Oliva
parent 608a3be905
commit aa79283408
4 changed files with 40 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2007-10-15 Alexandre Oliva <aoliva@redhat.com>
PR middle-end/33706
* tree-inline.c (copy_bb): Use bsi_replace to replace a
__builtin_va_arg_pack-containing call stmt.
2007-10-15 Razya Ladelsky <razya@il.ibm.com>
* matrix-reorg.c (gate_matrix_reorg): Don't comment out whole

View File

@ -1,3 +1,8 @@
2007-10-15 Alexandre Oliva <aoliva@redhat.com>
PR middle-end/33706
* gcc.dg/va-arg-pack-2.c: New.
2007-10-15 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/33619

View File

@ -0,0 +1,17 @@
/* { dg-do compile } */
/* { dg-options "-O2" } */
extern void noreturn (int status, ...);
extern inline __attribute ((always_inline)) void
error (int status, ...)
{
if (__builtin_constant_p (status))
noreturn (status, __builtin_va_arg_pack ());
}
void
f (void)
{
error (1);
}

View File

@ -863,9 +863,18 @@ copy_bb (copy_body_data *id, basic_block bb, int frequency_scale, int count_scal
if (TREE_CODE (*call_ptr) == WITH_SIZE_EXPR)
call_ptr = &TREE_OPERAND (*call_ptr, 0);
gcc_assert (*call_ptr == call);
*call_ptr = new_call;
stmt = *stmtp;
update_stmt (stmt);
if (call_ptr == stmtp)
{
bsi_replace (&copy_bsi, new_call, true);
stmtp = bsi_stmt_ptr (copy_bsi);
stmt = *stmtp;
}
else
{
*call_ptr = new_call;
stmt = *stmtp;
update_stmt (stmt);
}
}
else if (call
&& id->call_expr