Compiling any file (C or C++), even an empty file, with -fstats produces : <internal>:0: Internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. Release: 3.0 Environment: Reading specs from ./gcc/Linux_CVS/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.0/specs Configured with: /u/zosma/0/prisme/spion/gcc/gcc/configure --enable-languages=c++ --prefix=/u/zosma/0/prisme/spion/gcc/Linux_CVS Thread model: single gcc version 3.0
State-Changed-From-To: open->feedback State-Changed-Why: I can't reproduce this with recent gcc on a similar machine. Does this still happen with your setup?
State-Changed-From-To: feedback->analyzed State-Changed-Why: Confirmed with recent cvs. This is a regression from 2.95.3, the easiest way to reproduce this is to call ``cc1plus -quiet -fstats''.
From: Sylvain Pion <Sylvain.Pion@sophia.inria.fr> To: ehrhardt@mathematik.uni-ulm.de, Sylvain.Pion@sophia.inria.fr, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org Cc: Subject: Re: other/3782: -fstats produces a segmentation fault Date: Tue, 10 Dec 2002 12:16:31 +0100 On Mon, Dec 09, 2002 at 07:20:25PM -0000, ehrhardt@mathematik.uni-ulm.de wrote: > I can't reproduce this with recent gcc on a similar machine. > Does this still happen with your setup? Yes it does. With current mainline, I get : spion@mpino1212:~/GCC$ ./Linux/bin/gcc -v Reading specs from ./Linux/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.3/specs Configured with: ../gcc/configure --prefix=/home/spion/GCC/Linux --enable-languages=c++ --with-as=/home/spion/BINUTILS/Linux-2.13/bin/as --with-ld=/home/spion/BINUTILS/Linux-2.13/bin/ld Thread model: posix gcc version 3.3 20021210 (experimental) spion@mpino1212:~/GCC$ ./Linux/bin/gcc -fstats -c foo.c cc1: warning: "-fstats" is valid for C++ but not for C/ObjC spion@mpino1212:~/GCC$ ./Linux/bin/g++ -fstats -c foo.C <internal>:0: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions. -- Sylvain
From: "Christian Ehrhardt" <ehrhardt@mathematik.uni-ulm.de> To: Sylvain Pion <Sylvain.Pion@sophia.inria.fr> Cc: gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: other/3782: -fstats produces a segmentation fault Date: Tue, 10 Dec 2002 13:15:39 +0100 On Tue, Dec 10, 2002 at 12:16:31PM +0100, Sylvain Pion wrote: > > Does this still happen with your setup? > > Yes it does. With current mainline, I get : Thanks for the feedback. I only tried with gcc not with g++. I now can reproduce this, cc1plus segfaults even without ANY input file if -quiet and -fstats is passed. This one line patch (compiled but not bootstrap tested) fixes the ICE for me, not sure if this is the appropriate fix though. Someone please look at this and check it in if appropriate. --- gcc/timevar.c.orig Tue Dec 10 13:01:22 2002 +++ gcc/timevar.c Tue Dec 10 13:05:28 2002 @@ -404,7 +404,7 @@ timevar_accumulate (elapsed, &tv->start_time, &now); } /* Or is TIMEVAR at the top of the timer stack? */ - else if (stack->timevar == tv) + else if (stack && stack->timevar == tv) { get_time (&now); timevar_accumulate (elapsed, &start_time, &now); regards Christian -- THAT'S ALL FOLKS!
From: Steven Bosscher <s.bosscher@student.tudelft.nl> To: gcc-gnats@gcc.gnu.org, gcc-bugs@gcc.gnu.org, Sylvain.Pion@sophia.inria.fr, nobody@gcc.gnu.org, gcc-prs@gcc.gnu.org Cc: Subject: Re: other/3782: [3.2/3.3/3.4 regression] -quiet -fstats produces a segmentation fault in cc1plus Date: Thu, 20 Feb 2003 10:35:04 +0100 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=3782 Approved patch pending: http://gcc.gnu.org/ml/gcc-patches/2003-02/msg01533.html http://gcc.gnu.org/ml/gcc-patches/2003-02/msg01547.html
State-Changed-From-To: analyzed->closed State-Changed-Why: Steven's patch was applied to 3.2/3.3 and mainline.
State-Changed-From-To: closed->open State-Changed-Why: Crashes again on mainline (as of 20030310) :(
State-Changed-From-To: open->analyzed State-Changed-Why: This PR is the cc1plus crash with -fstats. It now crashes due to a call to get_run_time in init_c_lex before timevar is initialized. Neil moved the call to init_c_lex from c_common_init to c_common_init to c_common_post_options with this patch: 2003-03-08 Neil Booth <neil@daikokuya.co.uk> * c-common.h (c_common_init, c_common_post_options): Update. * c-objc-common.c (c_objc_common_init): Update for new prototype. * c-opts.c (saved_lineno): New. (c_common_post_options, c_common_init): Update prototypes, move call to cpp_read_main_file from latter to former. Unfortunately c_common_post_options is called before timevar_init. regards Christian
Responsible-Changed-From-To: unassigned->neil Responsible-Changed-Why: Neil broke this, so he agreed it's his to fix.
From: Neil Booth <neil@daikokuya.co.uk> 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. */
State-Changed-From-To: analyzed->closed State-Changed-Why: fixed