c++/3782: [3.4 regression] -quiet -fstats produces a segmentation fault in cc1plus
Neil Booth
neil@daikokuya.co.uk
Sat Apr 26 17:09:00 GMT 2003
steven@gcc.gnu.org wrote:-
> Synopsis: [3.4 regression] -quiet -fstats produces a segmentation fault in cc1plus
>
> Responsible-Changed-From-To: unassigned->neil
> Responsible-Changed-By: steven
> Responsible-Changed-When: Wed Apr 23 06:40:21 2003
> Responsible-Changed-Why:
> Neil broke this, so he agreed it's his to fix.
>
> http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=3782
Fixed with this. I took the opportunity to reduce global variable
usage.
I'm going to follow up with some timevar.c improvements.
Neil.
* flags.h (time_report): Remove.
* timevar.c (timevar_enable): New.
(TIMEVAR_ENABLE): Remove, use timevar_enable.
(timevar_init): Rename from init_timevar.
* timevar.h (timevar_init): Rename from init_timevar.
* toplev.c (time_report): Make static.
(process_options): Conditionally call timevar_init first.
Index: flags.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/flags.h,v
retrieving revision 1.105
diff -u -p -r1.105 flags.h
--- flags.h 12 Apr 2003 02:16:45 -0000 1.105
+++ flags.h 26 Apr 2003 13:03:09 -0000
@@ -72,10 +72,6 @@ extern int optimize_size;
extern int quiet_flag;
-/* Print times taken by the various passes. -ftime-report. */
-
-extern int time_report;
-
/* Print memory still in use at end of compilation (which may have little
to do with peak memory consumption). -fmem-report. */
Index: timevar.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/timevar.c,v
retrieving revision 1.27
diff -u -p -r1.27 timevar.c
--- timevar.c 31 Jan 2003 07:33:56 -0000 1.27
+++ timevar.c 26 Apr 2003 13:03:09 -0000
@@ -113,10 +113,9 @@ static double clocks_to_msec;
#include "flags.h"
#include "timevar.h"
-/* See timevar.h for an explanation of timing variables. */
+static bool timevar_enable;
-/* This macro evaluates to nonzero if timing variables are enabled. */
-#define TIMEVAR_ENABLE (time_report)
+/* See timevar.h for an explanation of timing variables. */
/* A timing variable. */
@@ -187,7 +186,7 @@ get_time (now)
now->sys = 0;
now->wall = 0;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
{
@@ -225,10 +224,9 @@ timevar_accumulate (timer, start_time, s
/* Initialize timing variables. */
void
-init_timevar ()
+timevar_init ()
{
- if (!TIMEVAR_ENABLE)
- return;
+ timevar_enable = true;
/* Zero all elapsed times. */
memset ((void *) timevars, 0, sizeof (timevars));
@@ -262,7 +260,7 @@ timevar_push (timevar)
struct timevar_stack_def *context;
struct timevar_time_def now;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* Mark this timing variable as used. */
@@ -314,7 +312,7 @@ timevar_pop (timevar)
struct timevar_time_def now;
struct timevar_stack_def *popped = stack;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
if (&timevars[timevar] != stack->timevar)
@@ -353,7 +351,7 @@ timevar_start (timevar)
{
struct timevar_def *tv = &timevars[timevar];
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* Mark this timing variable as used. */
@@ -378,7 +376,7 @@ timevar_stop (timevar)
struct timevar_def *tv = &timevars[timevar];
struct timevar_time_def now;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* TIMEVAR must have been started via timevar_start. */
@@ -430,7 +428,7 @@ timevar_print (fp)
struct timevar_time_def *total = &timevars[TV_TOTAL].elapsed;
struct timevar_time_def now;
- if (!TIMEVAR_ENABLE)
+ if (!timevar_enable)
return;
/* Update timing information in case we're calling this from GDB. */
Index: timevar.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/timevar.h,v
retrieving revision 1.10
diff -u -p -r1.10 timevar.h
--- timevar.h 13 Feb 2003 04:57:17 -0000 1.10
+++ timevar.h 26 Apr 2003 13:03:09 -0000
@@ -79,7 +79,7 @@ timevar_id_t;
/* Execute the sequence: timevar_pop (TV), return (E); */
#define POP_TIMEVAR_AND_RETURN(TV, E) return (timevar_pop (TV), (E))
-extern void init_timevar PARAMS ((void));
+extern void timevar_init PARAMS ((void));
extern void timevar_push PARAMS ((timevar_id_t));
extern void timevar_pop PARAMS ((timevar_id_t));
extern void timevar_start PARAMS ((timevar_id_t));
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/toplev.c,v
retrieving revision 1.745
diff -u -p -r1.745 toplev.c
--- toplev.c 26 Apr 2003 03:27:07 -0000 1.745
+++ toplev.c 26 Apr 2003 13:03:12 -0000
@@ -431,7 +431,7 @@ int quiet_flag = 0;
/* Print times taken by the various passes. -ftime-report. */
-int time_report = 0;
+static int time_report = 0;
/* Print memory still in use at end of compilation (which may have little
to do with peak memory consumption). -fmem-report. */
@@ -5214,6 +5214,11 @@ parse_options_and_default_flags (argc, a
static void
process_options ()
{
+ /* Initialize timing first. The C front ends read the main file in
+ the post_options hook, and C++ does file timings. */
+ if (time_report || !quiet_flag || flag_detailed_statistics)
+ timevar_init ();
+
/* Allow the front end to perform consistency checks and do further
initialization based on the command line options. This hook also
sets the original filename if appropriate (e.g. foo.i -> foo.c)
@@ -5326,9 +5331,6 @@ process_options ()
print_switch_values (stderr, 0, MAX_LINE, "", " ", "\n");
}
- if (! quiet_flag || flag_detailed_statistics)
- time_report = 1;
-
if (flag_syntax_only)
{
write_symbols = NO_DEBUG;
@@ -5562,9 +5564,6 @@ finalize ()
static void
do_compile ()
{
- /* We cannot start timing until after options are processed since that
- says if we run timers or not. */
- init_timevar ();
timevar_start (TV_TOTAL);
/* Set up the back-end if requested. */
More information about the Gcc-bugs
mailing list