diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b2b7a14ab220406bc1ed5b60357bbe197e75bb3d..35dfeb86e231f215d3239b6496594e34b81ba4cc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-01-02  Jan Hubicka  <jh@suse.cz>
+
+	* cgraphunit.c (cgraph_optimize_function):  Call optimize_inline_calls
+	when there is nothing to inline but warnings are requested.
+	(cgraph_decide_inlining):  Fix memory leak.
+
 2004-01-02  Jan Hubicka  <jh@suse.cz>
 
 	* expr.c (store_constructor):  Fix pasto in previous patch.
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index dfe4c7173dca9d4174f6c855568de2f30b152c73..932c418a073c5cf1830be26b45b5fe84c1ca618f 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -476,7 +476,7 @@ cgraph_optimize_function (struct cgraph_node *node)
       struct cgraph_edge *e;
 
       for (e = node->callees; e; e = e->next_callee)
-	if (e->inline_call)
+	if (e->inline_call || warn_inline)
 	  break;
       if (e)
         optimize_inline_calls (decl);
@@ -1213,17 +1213,17 @@ cgraph_decide_inlining (void)
 		}
 	    }
 	}
-
-      if (cgraph_dump_file)
-	fprintf (cgraph_dump_file,
-		 "\nInlined %i calls, eliminated %i functions, "
-		 "%i insns turned to %i insns.\n\n",
-		 ncalls_inlined, nfunctions_inlined, initial_insns,
-		 overall_insns);
-      free (order);
-      free (inlined);
-      free (inlined_callees);
     }
+
+  if (cgraph_dump_file)
+    fprintf (cgraph_dump_file,
+	     "\nInlined %i calls, eliminated %i functions, "
+	     "%i insns turned to %i insns.\n\n",
+	     ncalls_inlined, nfunctions_inlined, initial_insns,
+	     overall_insns);
+  free (order);
+  free (inlined);
+  free (inlined_callees);
 }
 
 /* Decide on the inlining.  We do so in the topological order to avoid