This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, driver/64690] Fix -freport-bug issue with comments.


Hi,

As -freport-bug dumps also the error output into the file as /* ... */ comment, there is a problem if that text includes /* or */ character sequences. This patch fixes this by not wrapping error output with /* ... */, but comment out each line with C++ style comments instead.

Tested on PR64688 testcase with added /* */ before last line, bootstrap in progress.

Ok to commit if bootstrap succeed?

-Maxim
gcc/ChangeLog:

2015-01-22  Max Ostapenko  <m.ostapenko@partner.samsung.com>

	PR driver/64690
	* gcc.c (insert_comments): New function.
	(try_generate_repro): Call it.
	(append_text): Removed.

diff --git a/gcc/gcc.c b/gcc/gcc.c
index 52d0521..6d3939c 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -6487,6 +6487,28 @@ out:
   return status;
 }
 
+/* This routine reads lines from IN file, adds C++ style comments
+   at the begining of each line and writes result into OUT.  */
+
+static void
+insert_comments (const char *file_in, const char *file_out)
+{
+  FILE *in = fopen (file_in, "rb");
+  FILE *out = fopen (file_out, "wb");
+  char line[256];
+  fputs ("// ", out);
+  while (fgets (line, sizeof (line), in))
+    {
+      fputs (line, out);
+      if (strchr (line, '\n'))
+	{
+	  fputs ("// ", out);
+	}
+    }
+  fclose (in);
+  fclose (out);
+}
+
 /* This routine adds preprocessed source code into the given ERR_FILE.
    To do this, it adds "-E" to NEW_ARGV and execute RUN_ATTEMPT routine to
    add information in report file.  RUN_ATTEMPT should return
@@ -6523,19 +6545,6 @@ do_report_bug (const char **new_argv, const int nargs,
     }
 }
 
-/* Append string STR to file FILE.  */
-
-static void
-append_text (char *file, const char *str)
-{
-  int fd = open (file, O_RDWR | O_APPEND);
-  if (fd < 0)
-    return;
-
-  write (fd, str, strlen (str));
-  close (fd);
-}
-
 /* Try to reproduce ICE.  If bug is reproducible, generate report .err file
    containing GCC configuration, backtrace, compiler's command line options
    and preprocessed source code.  */
@@ -6598,16 +6607,10 @@ try_generate_repro (const char **argv)
 	  emit_system_info = 1;
 	}
 
-      if (emit_system_info)
-	append_text (temp_stderr_files[attempt], "/*\n");
-
       status = run_attempt (new_argv, temp_stdout_files[attempt],
 			    temp_stderr_files[attempt], emit_system_info,
 			    append);
 
-      if (emit_system_info)
-	append_text (temp_stderr_files[attempt], "*/\n");
-
       if (status != ATTEMPT_STATUS_ICE)
 	{
 	  fnotice (stderr, "The bug is not reproducible, so it is"
@@ -6619,11 +6622,17 @@ try_generate_repro (const char **argv)
   if (!check_repro (temp_stdout_files, temp_stderr_files))
     goto out;
 
-  /* In final attempt we append compiler options and preprocesssed code to last
-     generated .err file with configuration and backtrace.  */
-  do_report_bug (new_argv, nargs,
-		 &temp_stderr_files[RETRY_ICE_ATTEMPTS - 1],
-		 &temp_stdout_files[RETRY_ICE_ATTEMPTS - 1]);
+  {
+    /* Insert commented out backtrace into report file.  */
+    char **stderr_commented = &temp_stdout_files[RETRY_ICE_ATTEMPTS - 1];
+    insert_comments (temp_stderr_files[RETRY_ICE_ATTEMPTS - 1],
+		     *stderr_commented);
+
+    /* In final attempt we append compiler options and preprocesssed code to last
+       generated .out file with configuration and backtrace.  */
+    char **output = &temp_stdout_files[RETRY_ICE_ATTEMPTS - 1];
+    do_report_bug (new_argv, nargs, stderr_commented, output);
+  }
 
 out:
   for (i = 0; i < RETRY_ICE_ATTEMPTS * 2; i++)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]