From: Jan Hubicka Date: Mon, 14 Aug 2023 15:55:33 +0000 (+0200) Subject: Avoid division by zero in fold_loop_internal_call X-Git-Tag: basepoints/gcc-15~6938 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=882af290c137dfab5d99b88e6dbecc5e75d85a0b;p=thirdparty%2Fgcc.git Avoid division by zero in fold_loop_internal_call My patch to fix profile after folding internal call is missing check for the case profile was already zero before if-conversion. gcc/ChangeLog: PR gcov-profile/110988 * tree-cfg.cc (fold_loop_internal_call): Avoid division by zero. --- diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index fae80bb5b91e..272d5ce321eb 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -7734,11 +7734,14 @@ fold_loop_internal_call (gimple *g, tree value) test. This should not happen as the guarded code should start with pre-header. */ gcc_assert (single_pred_edge (taken_edge->dest)); - taken_edge->dest->count - = taken_edge->dest->count.apply_scale (new_count, - old_count); - scale_strictly_dominated_blocks (taken_edge->dest, - new_count, old_count); + if (old_count.nonzero_p ()) + { + taken_edge->dest->count + = taken_edge->dest->count.apply_scale (new_count, + old_count); + scale_strictly_dominated_blocks (taken_edge->dest, + new_count, old_count); + } } } }