public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/marxin/heads/gcov-proper-exit-code)] gcov: return proper exit code when error happens
@ 2021-10-18  9:32 Martin Liska
  0 siblings, 0 replies; only message in thread
From: Martin Liska @ 2021-10-18  9:32 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:ff180fbff7141f8cae67ed829ad57c597e719062

commit ff180fbff7141f8cae67ed829ad57c597e719062
Author: Martin Liska <mliska@suse.cz>
Date:   Mon Oct 18 11:30:55 2021 +0200

    gcov: return proper exit code when error happens
    
            PR gcov-profile/102746
            PR gcov-profile/102747
    
    gcc/ChangeLog:
    
            * gcov.c (main): Return return_code.
            (output_gcov_file): Mark return_code when error happens.
            (generate_results): Likewise.
            (read_graph_file): Likewise.
            (read_count_file): Likewise.

Diff:
---
 gcc/gcov.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/gcc/gcov.c b/gcc/gcov.c
index 3672ae7a6f8..34f53ac2d78 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -638,6 +638,9 @@ static int flag_preserve_paths = 0;
 
 static int flag_counts = 0;
 
+/* Return code of the tool invocation.  */
+static int return_code = 0;
+
 /* Forward declarations.  */
 static int process_args (int, char **);
 static void print_usage (int) ATTRIBUTE_NORETURN;
@@ -907,7 +910,7 @@ main (int argc, char **argv)
   if (!flag_use_stdout)
     executed_summary (total_lines, total_executed);
 
-  return 0;
+  return return_code;
 }
 \f
 /* Print a usage message and exit.  If ERROR_P is nonzero, this is an error,
@@ -1467,12 +1470,18 @@ output_gcov_file (const char *file_name, source_info *src)
 	  fnotice (stdout, "Creating '%s'\n", gcov_file_name);
 	  output_lines (gcov_file, src);
 	  if (ferror (gcov_file))
-	    fnotice (stderr, "Error writing output file '%s'\n",
-		     gcov_file_name);
+	    {
+	      fnotice (stderr, "Error writing output file '%s'\n",
+		       gcov_file_name);
+	      return_code = 6;
+	    }
 	  fclose (gcov_file);
 	}
       else
-	fnotice (stderr, "Could not open output file '%s'\n", gcov_file_name);
+	{
+	  fnotice (stderr, "Could not open output file '%s'\n", gcov_file_name);
+	  return_code = 6;
+	}
     }
   else
     {
@@ -1594,6 +1603,7 @@ generate_results (const char *file_name)
 	    {
 	      fnotice (stderr, "Cannot open JSON output file %s\n",
 		       gcov_intermediate_filename.c_str ());
+	      return_code = 6;
 	      return;
 	    }
 
@@ -1602,6 +1612,7 @@ generate_results (const char *file_name)
 	    {
 	      fnotice (stderr, "Error writing JSON output file %s\n",
 		       gcov_intermediate_filename.c_str ());
+	      return_code = 6;
 	      return;
 	    }
 	}
@@ -1790,12 +1801,14 @@ read_graph_file (void)
   if (!gcov_open (bbg_file_name, 1))
     {
       fnotice (stderr, "%s:cannot open notes file\n", bbg_file_name);
+      return_code = 1;
       return;
     }
   bbg_file_time = gcov_time ();
   if (!gcov_magic (gcov_read_unsigned (), GCOV_NOTE_MAGIC))
     {
       fnotice (stderr, "%s:not a gcov notes file\n", bbg_file_name);
+      return_code = 2;
       gcov_close ();
       return;
     }
@@ -1810,6 +1823,7 @@ read_graph_file (void)
 
       fnotice (stderr, "%s:version '%.4s', prefer '%.4s'\n",
 	       bbg_file_name, v, e);
+      return_code = 3;
     }
   bbg_stamp = gcov_read_unsigned ();
   /* Read checksum.  */
@@ -1977,6 +1991,7 @@ read_graph_file (void)
 	{
 	corrupt:;
 	  fnotice (stderr, "%s:corrupted\n", bbg_file_name);
+	  return_code = 4;
 	  break;
 	}
     }
@@ -2009,6 +2024,7 @@ read_count_file (void)
   if (!gcov_magic (gcov_read_unsigned (), GCOV_DATA_MAGIC))
     {
       fnotice (stderr, "%s:not a gcov data file\n", da_file_name);
+      return_code = 2;
     cleanup:;
       gcov_close ();
       return 1;
@@ -2023,11 +2039,13 @@ read_count_file (void)
 
       fnotice (stderr, "%s:version '%.4s', prefer version '%.4s'\n",
 	       da_file_name, v, e);
+      return_code = 3;
     }
   tag = gcov_read_unsigned ();
   if (tag != bbg_stamp)
     {
       fnotice (stderr, "%s:stamp mismatch with notes file\n", da_file_name);
+      return_code = 5;
       goto cleanup;
     }
 
@@ -2088,6 +2106,7 @@ read_count_file (void)
 		   ? N_("%s:overflowed\n")
 		   : N_("%s:corrupted\n"),
 		   da_file_name);
+	  return_code = 4;
 	  goto cleanup;
 	}
     }


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-10-18  9:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-18  9:32 [gcc(refs/users/marxin/heads/gcov-proper-exit-code)] gcov: return proper exit code when error happens Martin Liska

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).