Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug
Bug#: 3782
Product:  
Component:  
Status: RESOLVED
Resolution: FIXED
Assigned To: Neil Booth <neil@gcc.gnu.org>
Host:
Reported against  
Priority:  
Severity:  
Target Milestone:  
 
 
Target:
Reporter: sylvain.pion@sophia.inria.fr
Add CC:
CC:
Remove selected CCs
Build:
URL:
Summary:
Keywords:
Known to work:
Known to fail:

Attachment Description Type Created Size Actions
Create a New Attachment (proposed patch, testcase, etc.) View All

Bug 3782 depends on: Show dependency tree
Show dependency graph
Bug 3782 blocks:

Additional Comments:






View Bug Activity   |   Format For Printing   |   Clone This Bug


Description:   Last confirmed: Opened: 2001-07-23 14:56
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

------- Comment #1 From Christian Ehrhardt 2002-12-09 11:20 -------
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?

------- Comment #2 From Christian Ehrhardt 2002-12-10 04:19 -------
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''.

------- Comment #3 From sylvain.pion@sophia.inria.fr 2002-12-10 12:16 -------
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


------- Comment #4 From Christian Ehrhardt 2002-12-10 13:15 -------
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!

------- Comment #5 From s.bosscher@student.tudelft.nl 2003-02-20 10:35 -------
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
 
 

------- Comment #6 From Andreas Jaeger 2003-02-22 05:47 -------
State-Changed-From-To: analyzed->closed
State-Changed-Why: Steven's patch was applied to 3.2/3.3 and mainline.

------- Comment #7 From Volker Reichelt 2003-03-10 14:24 -------
State-Changed-From-To: closed->open
State-Changed-Why: Crashes again on mainline (as of 20030310) :(

------- Comment #8 From Christian Ehrhardt 2003-04-16 20:07 -------
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

------- Comment #9 From Steven Bosscher 2003-04-23 06:40 -------
Responsible-Changed-From-To: unassigned->neil
Responsible-Changed-Why: Neil broke this, so he agreed it's his to fix.

------- Comment #10 From Neil Booth 2003-04-26 14:04 -------
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.  */

------- Comment #11 From Steven Bosscher 2003-04-29 07:10 -------
State-Changed-From-To: analyzed->closed
State-Changed-Why: fixed

Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug