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];
+
+ bool add_comment = true;
+ while (fgets (line, sizeof (line), in))
+ {
+ if (add_comment)
+ fputs ("// ", out);
+ fputs (line, out);
+ add_comment = strchr (line, '\n') != NULL;
+ }
+
+ 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
}
}
-/* 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. */
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"
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++)