Hi. There's one more patch that I've just tested.
Martin
>From 0e8def2b6dac1e7e46e6310ded21283914e05748 Mon Sep 17 00:00:00 2001 From: Martin Liska <mli...@suse.cz> Date: Mon, 2 Sep 2019 09:06:54 +0200 Subject: [PATCH] Backport 9297e013293e4d332fc7c40859ea4dd9616e0d88 gcc/ChangeLog: 2019-09-02 Martin Liska <mli...@suse.cz> PR gcov-profile/91601 * gcov.c (path_contains_zero_cycle_arc): Rename to ... (path_contains_zero_or_negative_cycle_arc): ... this and handle also negative edges. (circuit): Handle also negative edges as they can happen in some situations. --- gcc/gcov.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/gcov.c b/gcc/gcov.c index a99802079dc..565530d4f73 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -653,10 +653,10 @@ unblock (const block_info *u, block_vector_t &blocked, /* Return true when PATH contains a zero cycle arc count. */ static bool -path_contains_zero_cycle_arc (arc_vector_t &path) +path_contains_zero_or_negative_cycle_arc (arc_vector_t &path) { for (unsigned i = 0; i < path.size (); i++) - if (path[i]->cs_count == 0) + if (path[i]->cs_count <= 0) return true; return false; } @@ -682,7 +682,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start, { block_info *w = arc->dst; if (w < start - || arc->cs_count == 0 + || arc->cs_count <= 0 || !linfo.has_block (w)) continue; @@ -693,7 +693,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start, handle_cycle (path, count); loop_found = true; } - else if (!path_contains_zero_cycle_arc (path) + else if (!path_contains_zero_or_negative_cycle_arc (path) && find (blocked.begin (), blocked.end (), w) == blocked.end ()) loop_found |= circuit (w, path, start, blocked, block_lists, linfo, count); @@ -708,7 +708,7 @@ circuit (block_info *v, arc_vector_t &path, block_info *start, { block_info *w = arc->dst; if (w < start - || arc->cs_count == 0 + || arc->cs_count <= 0 || !linfo.has_block (w)) continue; -- 2.26.0