re PR tree-optimization/51012 (ICE: in fold_convert_loc, at fold-const.c:1897 with -fno-early-inlining and passing incompatible function ptr)
2011-11-08 Richard Guenther <rguenther@suse.de> PR tree-optimization/51012 * ipa-prop.c (update_indirect_edges_after_inlining): Fixup non-inlinable state. * cgraph.c (cgraph_make_edge_direct): Likewise. * gcc.dg/pr51012-1.c: New testcase. * gcc.dg/pr51012-2.c: Likewise. From-SVN: r181166
This commit is contained in:
parent
a59526334d
commit
f2906a8e9e
6 changed files with 61 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2011-11-08 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/51012
|
||||
* ipa-prop.c (update_indirect_edges_after_inlining): Fixup
|
||||
non-inlinable state.
|
||||
* cgraph.c (cgraph_make_edge_direct): Likewise.
|
||||
|
||||
2011-11-08 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR rtl-optimization/47698
|
||||
|
|
|
@ -1184,6 +1184,13 @@ cgraph_make_edge_direct (struct cgraph_edge *edge, struct cgraph_node *callee)
|
|||
/* Insert to callers list of the new callee. */
|
||||
cgraph_set_edge_callee (edge, callee);
|
||||
|
||||
if (edge->call_stmt
|
||||
&& !gimple_check_call_matching_types (edge->call_stmt, callee->decl))
|
||||
{
|
||||
gimple_call_set_cannot_inline (edge->call_stmt, true);
|
||||
edge->call_stmt_cannot_inline_p = true;
|
||||
}
|
||||
|
||||
/* We need to re-determine the inlining status of the edge. */
|
||||
initialize_inline_failed (edge);
|
||||
}
|
||||
|
|
|
@ -1905,6 +1905,13 @@ update_indirect_edges_after_inlining (struct cgraph_edge *cs,
|
|||
if (new_direct_edge)
|
||||
{
|
||||
new_direct_edge->indirect_inlining_edge = 1;
|
||||
if (new_direct_edge->call_stmt
|
||||
&& !gimple_check_call_matching_types (new_direct_edge->call_stmt,
|
||||
new_direct_edge->callee->decl))
|
||||
{
|
||||
gimple_call_set_cannot_inline (new_direct_edge->call_stmt, true);
|
||||
new_direct_edge->call_stmt_cannot_inline_p = true;
|
||||
}
|
||||
if (new_edges)
|
||||
{
|
||||
VEC_safe_push (cgraph_edge_p, heap, *new_edges,
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2011-11-08 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/51012
|
||||
* gcc.dg/pr51012-1.c: New testcase.
|
||||
* gcc.dg/pr51012-2.c: Likewise.
|
||||
|
||||
2011-11-08 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/51010
|
||||
|
|
17
gcc/testsuite/gcc.dg/pr51012-1.c
Normal file
17
gcc/testsuite/gcc.dg/pr51012-1.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-early-inlining -fno-ipa-cp" } */
|
||||
|
||||
float baz (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int bar (int (*ibaz) (void))
|
||||
{
|
||||
return ibaz ();
|
||||
}
|
||||
|
||||
void foo (void)
|
||||
{
|
||||
bar((int (*)(void))baz);
|
||||
}
|
17
gcc/testsuite/gcc.dg/pr51012-2.c
Normal file
17
gcc/testsuite/gcc.dg/pr51012-2.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-early-inlining" } */
|
||||
|
||||
float baz (void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int bar (int (*ibaz) (void))
|
||||
{
|
||||
return ibaz ();
|
||||
}
|
||||
|
||||
void foo (void)
|
||||
{
|
||||
bar((int (*)(void))baz);
|
||||
}
|
Loading…
Add table
Reference in a new issue