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 fa11207..bc3f2e0 100644 (file)
@@ -1,5 +1,11 @@
 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
        * config/aarch64/aarch64.c (aarch64_override_options_internal):
         Set default values for x_aarch64_*_string strings.
index 43dfc9a..ff4020c 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 ();
 }