55 lines
1.7 KiB
Diff
55 lines
1.7 KiB
Diff
2020-03-29 Martin Liska <mliska@suse.cz>
|
|
|
|
Backport from mainline
|
|
2019-09-02 Martin Liska <mliska@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
|
|
+++ 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;
|
|
|