Relax the (accidental) requirement and permit that function-local
counters don't have SSA names. We really only look up the def
statement to check if it is a phi node, in which case we need to
resolve the counter from there. This obviously doesn't apply when it
is a constant.
PR gcov-profile/123855
gcc/ChangeLog:
* path-coverage.cc (flush_on_edges): Only look up SSA name def
stmt when counter is non-const.
gcc/testsuite/ChangeLog:
* gcc.misc-tests/gcov-pr123855.c: New test.
flush_on_edges (basic_block bb, size_t bucket, tree local, tree mask,
tree atomic_ior, tree gcov_type_node)
{
- gimple *def = SSA_NAME_DEF_STMT (local);
- gphi *phi = dyn_cast <gphi *> (def);
+ gimple *def = !constant_p (local) ? SSA_NAME_DEF_STMT (local) : NULL;
+ gphi *phi = safe_dyn_cast <gphi *> (def);
tree relaxed = nullptr;
if (atomic_ior)
--- /dev/null
+/* { dg-options "--coverage -fpath-coverage" } */
+
+__attribute__((__returns_twice__)) void
+foo ()
+{
+ foo ();
+ for (;;)
+ ;
+}
+
+int main () {}
+
+/* { dg-final { run-gcov prime-paths gcov-pr123855.c } } */