Do not read gcda files multiple times (PR gcov-profile/87069).
authorMartin Liska <mliska@suse.cz>
Mon, 27 Aug 2018 08:01:54 +0000 (10:01 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Mon, 27 Aug 2018 08:01:54 +0000 (08:01 +0000)
2018-08-27  Martin Liska  <mliska@suse.cz>

        PR gcov-profile/87069
* gcov.c (process_file): Record files already processed
        and warn about a file being processed multiple times.

From-SVN: r263871

gcc/ChangeLog
gcc/gcov.c

index fa112074f0a19e5b51f2b2208b7f47796d12e752..bc3f2e0da38abc0036217187ee48719f9858c6be 100644 (file)
@@ -1,3 +1,9 @@
+2018-08-27  Martin Liska  <mliska@suse.cz>
+
+        PR gcov-profile/87069
+       * gcov.c (process_file): Record files already processed
+        and warn about a file being processed multiple times.
+
 2018-08-27  Martin Liska  <mliska@suse.cz>
 
         PR driver/83193
index 43dfc9a4b2c90400e88f88272a69b580c16faade..ff4020c713e64be666c6e222806bb7a562093f56 100644 (file)
@@ -408,6 +408,10 @@ static vector<source_info> sources;
 /* Mapping of file names to sources */
 static vector<name_map> names;
 
+/* Record all processed files in order to warn about
+   a file being read multiple times.  */
+static vector<char *> processed_files;
+
 /* This holds data summary information.  */
 
 static unsigned object_runs;
@@ -1146,6 +1150,17 @@ static void
 process_file (const char *file_name)
 {
   create_file_names (file_name);
+
+  for (unsigned i = 0; i < processed_files.size (); i++)
+    if (strcmp (da_file_name, processed_files[i]) == 0)
+      {
+       fnotice (stderr, "'%s' file is already processed\n",
+                file_name);
+       return;
+      }
+
+  processed_files.push_back (xstrdup (da_file_name));
+
   read_graph_file ();
   read_count_file ();
 }