Support multiple files w/ -i option in gcov (PR gcov-profile/80224).
authorMartin Liska <mliska@suse.cz>
Mon, 10 Apr 2017 11:37:14 +0000 (13:37 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Mon, 10 Apr 2017 11:37:14 +0000 (11:37 +0000)
2017-04-10  Martin Liska  <mliska@suse.cz>

PR gcov-profile/80224
* gcov.c (print_usage): Fix usage string.
(get_gcov_intermediate_filename): Remove.
(output_gcov_file): Use both for normal and intermediate format.
(generate_results): Do not initialize special file for
intermediate format.

From-SVN: r246804

gcc/ChangeLog
gcc/gcov.c

index b02a8100a40a76a507faeea71e5edd37ab886d31..1e03c02ad29637933f6d53c6720e91eebd70af5f 100644 (file)
@@ -1,3 +1,12 @@
+2017-04-10  Martin Liska  <mliska@suse.cz>
+
+       PR gcov-profile/80224
+       * gcov.c (print_usage): Fix usage string.
+       (get_gcov_intermediate_filename): Remove.
+       (output_gcov_file): Use both for normal and intermediate format.
+       (generate_results): Do not initialize special file for
+       intermediate format.
+
 2017-04-10  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/80304
index 320b81263f88227b2dd2ea73addce1f7377cb0a0..bb26a1a9787f266f5efa59a979185d88df40203e 100644 (file)
@@ -653,7 +653,7 @@ print_usage (int error_p)
   FILE *file = error_p ? stderr : stdout;
   int status = error_p ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE;
 
-  fnotice (file, "Usage: gcov [OPTION]... SOURCE|OBJ...\n\n");
+  fnotice (file, "Usage: gcov [OPTION...] SOURCE|OBJ...\n\n");
   fnotice (file, "Print code coverage information.\n\n");
   fnotice (file, "  -h, --help                      Print this help, then exit\n");
   fnotice (file, "  -a, --all-blocks                Show information for every basic block\n");
@@ -791,31 +791,6 @@ process_args (int argc, char **argv)
   return optind;
 }
 
-/* Get the name of the gcov file.  The return value must be free'd.
-
-   It appends the '.gcov' extension to the *basename* of the file.
-   The resulting file name will be in PWD.
-
-   e.g.,
-   input: foo.da,       output: foo.da.gcov
-   input: a/b/foo.cc,   output: foo.cc.gcov  */
-
-static char *
-get_gcov_intermediate_filename (const char *file_name)
-{
-  const char *gcov = ".gcov";
-  char *result;
-  const char *cptr;
-
-  /* Find the 'basename'.  */
-  cptr = lbasename (file_name);
-
-  result = XNEWVEC (char, strlen (cptr) + strlen (gcov) + 1);
-  sprintf (result, "%s%s", cptr, gcov);
-
-  return result;
-}
-
 /* Output the result in intermediate format used by 'lcov'.
 
 The intermediate format contains a single file named 'foo.cc.gcov',
@@ -980,7 +955,11 @@ output_gcov_file (const char *file_name, source_t *src)
       if (gcov_file)
         {
           fnotice (stdout, "Creating '%s'\n", gcov_file_name);
-          output_lines (gcov_file, src);
+
+         if (flag_intermediate_format)
+           output_intermediate_file (gcov_file, src);
+         else
+           output_lines (gcov_file, src);
           if (ferror (gcov_file))
             fnotice (stderr, "Error writing output file '%s'\n", gcov_file_name);
           fclose (gcov_file);
@@ -1002,8 +981,6 @@ generate_results (const char *file_name)
   unsigned ix;
   source_t *src;
   function_t *fn;
-  FILE *gcov_intermediate_file = NULL;
-  char *gcov_intermediate_filename = NULL;
 
   for (ix = n_sources, src = sources; ix--; src++)
     if (src->num_lines)
@@ -1033,19 +1010,6 @@ generate_results (const char *file_name)
        file_name = canonicalize_name (file_name);
     }
 
-  if (flag_gcov_file && flag_intermediate_format)
-    {
-      /* Open the intermediate file.  */
-      gcov_intermediate_filename = get_gcov_intermediate_filename (file_name);
-      gcov_intermediate_file = fopen (gcov_intermediate_filename, "w");
-      if (!gcov_intermediate_file)
-       {
-         fnotice (stderr, "Cannot open intermediate output file %s\n",
-                  gcov_intermediate_filename);
-         return;
-       }
-    }
-
   for (ix = n_sources, src = sources; ix--; src++)
     {
       if (flag_relative_only)
@@ -1068,23 +1032,11 @@ generate_results (const char *file_name)
       total_executed += src->coverage.lines_executed;
       if (flag_gcov_file)
        {
-          if (flag_intermediate_format)
-            /* Output the intermediate format without requiring source
-               files.  This outputs a section to a *single* file.  */
-            output_intermediate_file (gcov_intermediate_file, src);
-          else
-            output_gcov_file (file_name, src);
+         output_gcov_file (file_name, src);
           fnotice (stdout, "\n");
         }
     }
 
-  if (flag_gcov_file && flag_intermediate_format)
-    {
-      /* Now we've finished writing the intermediate file.  */
-      fclose (gcov_intermediate_file);
-      XDELETEVEC (gcov_intermediate_filename);
-    }
-
   if (!file_name)
     executed_summary (total_lines, total_executed);
 }