===================================================================
@@ -1,3 +1,9 @@
+2011-10-19 Jan Hubicka <jh@suse.cz>
+
+ PR bootstrap/50709
+ * ipa-inline.c (inline_small_functions): Fix checking code to not make
+ effect on fibheap stability.
+
2011-10-19 Roland Stigge <stigge@antcom.de>
PR translation/48638
===================================================================
@@ -1384,6 +1384,7 @@ inline_small_functions (void)
struct cgraph_node *where, *callee;
int badness = fibheap_min_key (heap);
int current_badness;
+ int cached_badness = -1;
int growth;
edge = (struct cgraph_edge *) fibheap_extract_min (heap);
@@ -1392,16 +1393,20 @@ inline_small_functions (void)
if (!edge->inline_failed)
continue;
- /* Be sure that caches are maintained consistent. */
#ifdef ENABLE_CHECKING
+ /* Be sure that caches are maintained conservatively consistent.
+ This means that cached badness is allways smaller or equal
+ to the real badness. */
+ cached_badness = edge_badness (edge, false);
+#endif
reset_edge_growth_cache (edge);
reset_node_growth_cache (edge->callee);
-#endif
/* When updating the edge costs, we only decrease badness in the keys.
Increases of badness are handled lazilly; when we see key with out
of date value on it, we re-insert it now. */
current_badness = edge_badness (edge, false);
+ gcc_assert (cached_badness == -1 || cached_badness <= current_badness);
gcc_assert (current_badness >= badness);
if (current_badness != badness)
{