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

Reply via email to