Hi! ipa-inline.c apparently in all spots but one where it checks call_stmt_cannot_inline_p also checks tree_can_inline_p. With -fno-early-inlining tree_can_inline_p won't be called earlier and thus code to attempt to inline functions called once doesn't ever call it to notice there is an argument mismatch.
Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux. Ok for trunk? 2011-03-10 Jakub Jelinek <ja...@redhat.com> PR tree-optimization/48063 * ipa-inline.c (cgraph_decide_inlining): Don't try to inline functions called once if !tree_can_inline_p (node->callers). * gcc.dg/torture/pr48063.c: New test. --- gcc/ipa-inline.c.jj 2011-03-03 09:11:51.000000000 +0100 +++ gcc/ipa-inline.c 2011-03-10 20:03:41.000000000 +0100 @@ -1498,6 +1498,7 @@ cgraph_decide_inlining (void) && node->callers->caller != node && node->callers->caller->global.inlined_to != node && !node->callers->call_stmt_cannot_inline_p + && tree_can_inline_p (node->callers) && !DECL_EXTERNAL (node->decl)) { cgraph_inline_failed_t reason; --- gcc/testsuite/gcc.dg/torture/pr48063.c.jj 2011-03-10 20:05:59.000000000 +0100 +++ gcc/testsuite/gcc.dg/torture/pr48063.c 2011-03-10 20:05:43.000000000 +0100 @@ -0,0 +1,19 @@ +/* PR tree-optimization/48063 */ +/* { dg-do compile } */ +/* { dg-options "-fno-early-inlining" } */ + +extern void abort (void); +static void bar (); + +void +foo () +{ + bar (1); +} + +static void +bar (double i) +{ + if (i) + abort (); +} Jakub