From: Richard Biener Date: Tue, 21 May 2013 11:56:57 +0000 (+0000) Subject: re PR tree-optimization/57330 (ICE: verify_gimple failed -O3 [tree-cfg.c:4792]) X-Git-Tag: releases/gcc-4.9.0~5787 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c52da5f7d36d279d829adf384271c53e1ce87601;p=thirdparty%2Fgcc.git re PR tree-optimization/57330 (ICE: verify_gimple failed -O3 [tree-cfg.c:4792]) 2013-05-21 Richard Biener PR tree-optimization/57330 * cgraph.c (cgraph_redirect_edge_call_stmt_to_callee): Properly preserve the call stmts fntype. * gcc.dg/torture/pr57330.c: New testcase. From-SVN: r199139 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a7c1e701c3d..bab6db43cf2c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-05-21 Richard Biener + + PR tree-optimization/57330 + * cgraph.c (cgraph_redirect_edge_call_stmt_to_callee): Properly + preserve the call stmts fntype. + 2013-05-21 Richard Biener PR tree-optimization/57303 diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 899f65cb979c..2a2973bc6e44 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -1068,6 +1068,7 @@ cgraph_redirect_edge_call_stmt_to_callee (struct cgraph_edge *e) = gimple_call_copy_skip_args (e->call_stmt, e->callee->clone.combined_args_to_skip); gimple_call_set_fndecl (new_stmt, e->callee->symbol.decl); + gimple_call_set_fntype (new_stmt, gimple_call_fntype (e->call_stmt)); if (gimple_vdef (new_stmt) && TREE_CODE (gimple_vdef (new_stmt)) == SSA_NAME) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0783914af15f..1ba9007ac6c7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-05-21 Richard Biener + + PR tree-optimization/57330 + * gcc.dg/torture/pr57330.c: New testcase. + 2013-05-21 Richard Biener PR tree-optimization/57303 diff --git a/gcc/testsuite/gcc.dg/torture/pr57330.c b/gcc/testsuite/gcc.dg/torture/pr57330.c new file mode 100644 index 000000000000..3e6cbcbd28ca --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr57330.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ + +void foo (int a) +{} + +void *a; +void bar () +{ + void **( *b ) ( ) = (void**(*)()) foo; + a = b (0); +}