]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Permit const counters in flush_on_edges [PR123855]
authorJørgen Kvalsvik <j@lambda.is>
Wed, 28 Jan 2026 19:33:21 +0000 (20:33 +0100)
committerJørgen Kvalsvik <j@lambda.is>
Fri, 30 Jan 2026 10:20:58 +0000 (11:20 +0100)
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.

gcc/path-coverage.cc
gcc/testsuite/gcc.misc-tests/gcov-pr123855.c [new file with mode: 0644]

index 7ce662ce0077abd1fa6ed562798640f8e240237d..68a30d5a8ee36e7876d1638a9b6d0181b91135b9 100644 (file)
@@ -379,8 +379,8 @@ void
 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)
diff --git a/gcc/testsuite/gcc.misc-tests/gcov-pr123855.c b/gcc/testsuite/gcc.misc-tests/gcov-pr123855.c
new file mode 100644 (file)
index 0000000..16fc27a
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-options "--coverage -fpath-coverage" } */
+
+__attribute__((__returns_twice__)) void
+foo ()
+{
+  foo ();
+  for (;;)
+    ;
+}
+
+int main () {}
+
+/* { dg-final { run-gcov prime-paths gcov-pr123855.c } } */