coverage.c (struct conts_entry): Add n_counts.
authorJan Hubicka <hubicka@ucw.cz>
Mon, 17 Dec 2018 13:21:52 +0000 (14:21 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Mon, 17 Dec 2018 13:21:52 +0000 (13:21 +0000)
* coverage.c (struct conts_entry): Add n_counts.
(remap_counts_file): Record number of ocunts.
(get_coverage_counts): Verify that counts match.
* coverage.h (get_coverage_counts): Update prototype.
* profile.c (get_exec_counts. compute_value_histograms): Add
n_counts parametrs.

From-SVN: r267200

gcc/ChangeLog
gcc/coverage.c
gcc/coverage.h
gcc/profile.c

index e63c4c9b50bfa46632f00c6fb73848bec93f7084..17b32f52c8f67471911f63c3de832293addbd17f 100644 (file)
@@ -1,3 +1,12 @@
+2018-12-15  Jan Hubicka  <hubicka@ucw.cz>
+
+       * coverage.c (struct conts_entry): Add n_counts.
+       (remap_counts_file): Record number of ocunts.
+       (get_coverage_counts): Verify that counts match.
+       * coverage.h (get_coverage_counts): Update prototype.
+       * profile.c (get_exec_counts. compute_value_histograms): Add
+       n_counts parametrs.
+
 2018-12-17  Senthil Kumar Selvaraj  <senthilkumar.selvaraj@microchip.com>
 
        PR rtl-optimization/88253
index 9dc1cae28b1074b7a2af78a50e448b8fdc0c7f46..f3ffac5f11e14a8dd28806276b70b60b65651bd5 100644 (file)
@@ -74,6 +74,7 @@ struct counts_entry : pointer_hash <counts_entry>
   unsigned lineno_checksum;
   unsigned cfg_checksum;
   gcov_type *counts;
+  unsigned n_counts;
 
   /* hash_table support.  */
   static inline hashval_t hash (const counts_entry *);
@@ -260,6 +261,7 @@ read_counts_file (void)
              entry->lineno_checksum = lineno_checksum;
              entry->cfg_checksum = cfg_checksum;
              entry->counts = XCNEWVEC (gcov_type, n_counts);
+             entry->n_counts = n_counts;
            }
          else if (entry->lineno_checksum != lineno_checksum
                   || entry->cfg_checksum != cfg_checksum)
@@ -295,7 +297,7 @@ read_counts_file (void)
 
 gcov_type *
 get_coverage_counts (unsigned counter, unsigned cfg_checksum,
-                    unsigned lineno_checksum)
+                    unsigned lineno_checksum, unsigned int n_counts)
 {
   counts_entry *entry, elt;
 
@@ -344,17 +346,27 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum,
       return NULL;
     }
   
-  if (entry->cfg_checksum != cfg_checksum)
+  if (entry->cfg_checksum != cfg_checksum || entry->n_counts != n_counts)
     {
       static int warned = 0;
       bool warning_printed = false;
 
-      warning_printed =
-       warning_at (DECL_SOURCE_LOCATION (current_function_decl),
-                   OPT_Wcoverage_mismatch,
-                   "the control flow of function %qD does not match "
-                   "its profile data (counter %qs)", current_function_decl,
-                   ctr_names[counter]);
+      if (entry->n_counts != n_counts)
+       warning_printed =
+         warning_at (DECL_SOURCE_LOCATION (current_function_decl),
+                     OPT_Wcoverage_mismatch,
+                     "number of counters in profile data for function %qD "
+                     "does not match "
+                     "its profile data (counter %qs, expected %i and have %i)",
+                     current_function_decl,
+                     ctr_names[counter], entry->n_counts, n_counts);
+      else
+       warning_printed =
+         warning_at (DECL_SOURCE_LOCATION (current_function_decl),
+                     OPT_Wcoverage_mismatch,
+                     "the control flow of function %qD does not match "
+                     "its profile data (counter %qs)", current_function_decl,
+                     ctr_names[counter]);
       if (warning_printed && dump_enabled_p ())
        {
          dump_user_location_t loc
index d612c38d1592a80d8f70627f3a5b45e8ef033b15..f2a8c2939ac8300546c621136fca00ea00ddcd8e 100644 (file)
@@ -52,7 +52,8 @@ extern tree tree_coverage_counter_addr (unsigned /*counter*/, unsigned/*num*/);
 /* Get all the counters for the current function.  */
 extern gcov_type *get_coverage_counts (unsigned /*counter*/,
                                       unsigned /*cfg_checksum*/,
-                                      unsigned /*lineno_checksum*/);
+                                      unsigned /*lineno_checksum*/,
+                                      unsigned /*n_counts*/);
 
 extern tree get_gcov_type (void);
 extern bool coverage_node_map_initialized_p (void);
index ded0958f0aa6b37588bb1de8642b417688e8dfb2..3c2ac33da554cbc5436584636f4ecd9077dfc127 100644 (file)
@@ -218,7 +218,7 @@ get_exec_counts (unsigned cfg_checksum, unsigned lineno_checksum)
     }
 
   counts = get_coverage_counts (GCOV_COUNTER_ARCS, cfg_checksum,
-                               lineno_checksum);
+                               lineno_checksum, num_edges);
   if (!counts)
     return NULL;
 
@@ -780,7 +780,8 @@ compute_value_histograms (histogram_values values, unsigned cfg_checksum,
 
       histogram_counts[t] = get_coverage_counts (COUNTER_FOR_HIST_TYPE (t),
                                                 cfg_checksum,
-                                                lineno_checksum);
+                                                lineno_checksum,
+                                                n_histogram_counters[t]);
       if (histogram_counts[t])
        any = 1;
       act_count[t] = histogram_counts[t];