https://gcc.gnu.org/g:a52484f1ac34dbb604dc862407d9abb32df444dd
commit r16-1968-ga52484f1ac34dbb604dc862407d9abb32df444dd Author: Jan Hubicka <hubi...@ucw.cz> Date: Thu Jul 3 11:56:28 2025 +0200 Fix division by zero in ipa-cp.cc:update_profiling_info This ICE has triggered for me during autoprofiledbootstrap. The code already takes into care possible range, so I think in this case we can just push to one side of it. Bootstrapped/regtesed x86_64-linux, OK? gcc/ChangeLog: * ipa-cp.cc (update_profiling_info): Watch for division by zero. Diff: --- gcc/ipa-cp.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc index 901d4a5616e9..480cf48786c7 100644 --- a/gcc/ipa-cp.cc +++ b/gcc/ipa-cp.cc @@ -4838,11 +4838,12 @@ update_profiling_info (struct cgraph_node *orig_node, profile_count unexp = orig_node_count - new_sum - orig_nonrec_call_count; int limit_den = 2 * (orig_nonrec_calls + new_nonrec_calls); - profile_count new_part - = MAX(MIN (unexp.apply_scale (new_sum, - new_sum + orig_nonrec_call_count), - unexp.apply_scale (limit_den - 1, limit_den)), - unexp.apply_scale (new_nonrec_calls, limit_den)); + profile_count new_part = unexp.apply_scale (limit_den - 1, limit_den); + profile_count den = new_sum + orig_nonrec_call_count; + if (den.nonzero_p ()) + new_part = MIN (unexp.apply_scale (new_sum, den), new_part); + new_part = MAX (new_part, + unexp.apply_scale (new_nonrec_calls, limit_den)); if (dump_file) { fprintf (dump_file, " Claiming ");