Some systems don't support the %zu format modifier for size_t, such as
hppa64-hp-hpux. We don't really need the full width of size_t for
printing the number of prime paths as path counts of those sizes
would've already blown up the machine. For printing the vector size we
can use the formatting directives from hwint.h.

        PR gcov-profile/120086

gcc/ChangeLog:

        * gcov.cc (print_prime_path_lines): Use unsigned, format with
        %u.
        (print_prime_path_source): Likewise.
        (output_path_coverage): Format with HOST_SIZE_T_PRINT_UNSIGNED,
        use unsigned for pathno.
---

I bootstrapped and tested this on x86_64-linux-gnu. John, could you
please try it on your hppa64 system, and verify that it fixes the tests?

---
 gcc/gcov.cc | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/gcc/gcov.cc b/gcc/gcov.cc
index e1ad80162b3..0dfe513723c 100644
--- a/gcc/gcov.cc
+++ b/gcc/gcov.cc
@@ -3591,7 +3591,7 @@ print_source_line (FILE *f, const vector<const char *> 
&source_lines,
    Returns 1 if the path was printed, 0 otherwise.  */
 static unsigned
 print_prime_path_lines (FILE *gcov_file, const function_info &fn,
-                       const vector<unsigned> &path, size_t pathno)
+                       const vector<unsigned> &path, unsigned pathno)
 {
   const bool is_covered = fn.paths.covered_p (pathno);
   if (is_covered && !flag_prime_paths_lines_covered)
@@ -3600,9 +3600,9 @@ print_prime_path_lines (FILE *gcov_file, const 
function_info &fn,
     return 0;
 
   if (is_covered)
-    fprintf (gcov_file, "path %zu covered: lines", pathno);
+    fprintf (gcov_file, "path %u covered: lines", pathno);
   else
-    fprintf (gcov_file, "path %zu not covered: lines", pathno);
+    fprintf (gcov_file, "path %u not covered: lines", pathno);
 
   for (size_t k = 0; k != path.size (); ++k)
     {
@@ -3658,7 +3658,7 @@ print_inlined_separator (FILE *gcov_file, unsigned 
current_index, const
    Returns 1 if the path was printed, 0 otherwise.  */
 static unsigned
 print_prime_path_source (FILE *gcov_file, const function_info &fn,
-                        const vector<unsigned> &path, size_t pathno)
+                        const vector<unsigned> &path, unsigned pathno)
 {
   const bool is_covered = fn.paths.covered_p (pathno);
   if (is_covered && !flag_prime_paths_source_covered)
@@ -3667,9 +3667,9 @@ print_prime_path_source (FILE *gcov_file, const 
function_info &fn,
     return 0;
 
   if (is_covered)
-    fprintf (gcov_file, "path %zu covered:\n", pathno);
+    fprintf (gcov_file, "path %u covered:\n", pathno);
   else
-    fprintf (gcov_file, "path %zu not covered:\n", pathno);
+    fprintf (gcov_file, "path %u not covered:\n", pathno);
   unsigned current = fn.src;
   for (size_t k = 0; k != path.size (); ++k)
     {
@@ -3728,19 +3728,19 @@ output_path_coverage (FILE *gcov_file, const 
function_info *fn)
   if (fn->paths.paths.empty ())
     fnotice (gcov_file, "path coverage omitted\n");
   else
-    fnotice (gcov_file, "paths covered %u of %zu\n",
-            fn->paths.covered_paths (), fn->paths.paths.size ());
+    fnotice (gcov_file, "paths covered %u of " HOST_SIZE_T_PRINT_UNSIGNED "\n",
+            fn->paths.covered_paths (), (fmt_size_t)fn->paths.paths.size ());
 
   if (flag_prime_paths_lines_uncovered || flag_prime_paths_lines_covered)
     {
-      size_t pathno = 0;
+      unsigned pathno = 0;
       for (const vector<unsigned> &path : fn->paths.paths)
        print_prime_path_lines (gcov_file, *fn, path, pathno++);
     }
 
   if (flag_prime_paths_source_uncovered || flag_prime_paths_source_covered)
     {
-      size_t pathno = 0;
+      unsigned pathno = 0;
       for (const vector<unsigned> &path : fn->paths.paths)
        print_prime_path_source (gcov_file, *fn, path, pathno++);
     }
-- 
2.39.5

Reply via email to