libgcov: improve profile reproducibility
authorMartin Liska <mliska@suse.cz>
Tue, 26 Jan 2021 11:44:34 +0000 (12:44 +0100)
committerMartin Liska <mliska@suse.cz>
Tue, 26 Jan 2021 11:44:34 +0000 (12:44 +0100)
libgcc/ChangeLog:

PR gcov-profile/98739
* libgcov.h (gcov_topn_add_value): Do not train when
we have a merged profile with a negative number of total
value.

libgcc/libgcov.h

index df08e882dd7db7754b9872b311fd7f9b4db92c27..ddc688509bd9c0b180bb627918a3c440a77a25bf 100644 (file)
@@ -443,7 +443,13 @@ gcov_topn_add_value (gcov_type *counters, gcov_type value, gcov_type count,
                     int use_atomic, int increment_total)
 {
   if (increment_total)
-    gcov_counter_add (&counters[0], 1, use_atomic);
+    {
+      /* In the multi-threaded mode, we can have an already merged profile
+        with a negative total value.  In that case, we should bail out.  */
+      if (counters[0] < 0)
+       return 0;
+      gcov_counter_add (&counters[0], 1, use_atomic);
+    }
 
   struct gcov_kvp *prev_node = NULL;
   struct gcov_kvp *minimal_node = NULL;