Hi, this patch fixes problem with ipa-cp ICEing while building gnatbind during profiledbootstrap. The problem is that I was overzelaous about ignoring callers with optimization disabled. Nothing useful can be propagated across them but we still need to process calle after the caller so we further propagate the info that we know nothing.
Bootstrapped/regtested x86_64-linux, committed. * ipa-cp.c (ignore_edge_p): Do not check caller flags. (propagate_constants_topo): Fix typo. Index: ipa-cp.c =================================================================== --- ipa-cp.c (revision 278155) +++ ipa-cp.c (working copy) @@ -816,9 +816,7 @@ ignore_edge_p (cgraph_edge *e) = e->callee->function_or_virtual_thunk_symbol (&avail, e->caller); return (avail <= AVAIL_INTERPOSABLE - || !opt_for_fn (e->caller->decl, optimize) || !opt_for_fn (ultimate_target->decl, optimize) - || !opt_for_fn (e->caller->decl, flag_ipa_cp) || !opt_for_fn (ultimate_target->decl, flag_ipa_cp)); } @@ -3246,7 +3244,7 @@ propagate_constants_topo (class ipa_topo if (opt_for_fn (v->decl, flag_ipa_cp) && opt_for_fn (v->decl, optimize)) push_node_to_stack (topo, v); - /* When V is not optimized, we can not push it to stac, but + /* When V is not optimized, we can not push it to stack, but still we need to set all its callees lattices to bottom. */ else {