From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26796 invoked by alias); 26 Apr 2003 13:06:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 26781 invoked by uid 71); 26 Apr 2003 13:06:00 -0000 Date: Sat, 26 Apr 2003 13:06:00 -0000 Message-ID: <20030426130600.26780.qmail@sources.redhat.com> To: neil@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Neil Booth Subject: Re: c++/3782: [3.4 regression] -quiet -fstats produces a segmentation fault in cc1plus Reply-To: Neil Booth X-SW-Source: 2003-04/txt/msg01198.txt.bz2 List-Id: The following reply was made to PR c++/3782; it has been noted by GNATS. From: Neil Booth To: steven@gcc.gnu.org, Sylvain.Pion@sophia.inria.fr, gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org Cc: Subject: Re: c++/3782: [3.4 regression] -quiet -fstats produces a segmentation fault in cc1plus Date: Sat, 26 Apr 2003 14:04:02 +0100 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. */