next is initialized only in the loop before, it is never updated in it's own loop.
gcc/ChangeLog 2019-11-15 Xiong Hu Luo <luo...@linux.ibm.com> * ipa-inline.c (inline_small_functions): Update iterator of next. --- gcc/ipa-inline.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 78ec0ec685f..96aefaf514b 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -1945,12 +1945,15 @@ inline_small_functions (void) } if (has_speculative) for (edge = node->callees; edge; edge = next) - if (edge->speculative && !speculation_useful_p (edge, - edge->aux != NULL)) - { - edge->resolve_speculation (); - update = true; - } + { + if (edge->speculative + && !speculation_useful_p (edge, edge->aux != NULL)) + { + edge->resolve_speculation (); + update = true; + } + next = edge->next_callee; + } if (update) { struct cgraph_node *where = node->inlined_to -- 2.21.0.777.g83232e3864