This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: preprocessor/6084: cpp Segmentation Fault


> -----Original Message-----
> From: Neil Booth [mailto:neil@daikokuya.demon.co.uk]
> Sent: Friday, April 12, 2002 10:07 PM
> To: Gerwin, Joshua A
> Cc: 'Phil Edwards'; joshg@hf.intel.com; gcc-gnats@gcc.gnu.org;
> rnesius@ichips.intel.com; Nguyen, Tuan; gcc-bugs@gcc.gnu.org
> Subject: Re: preprocessor/6084: cpp Segmentation Fault
> 
> 
> Gerwin, Joshua A wrote:-
> 
> > #1  0xffffffff7f48d6d4 in _doprnt () from /usr/lib/64/libc.so.1
> > #2  0xffffffff7f48f180 in fprintf () from /usr/lib/64/libc.so.1
> > #3  0x100003d28 in maybe_print_line ()
> > #4  0x100003e1c in cb_define ()
> > #5  0x100004904 in do_define ()
> > #6  0x100004778 in run_directive ()
> > #7  0x100011d20 in init_builtins ()
> > #8  0x100012344 in cpp_start_read ()
> > #9  0x100003680 in do_preprocessing ()
> > #10 0x10000349c in main ()
> 
> As I've already pointed out to you, and you confirmed with your
> mail, there is no fprintf() in the function maybe_print_line.
> 

OK, here's my theory as to why I think you aren't seeing it in
maybe_print_line.  Often when we compile, we use an optimizing flag (admit
it, you do this sometimes too!) and in this case the optimizer dropped the
jump to the separate print_line function and put the fprintf directly in
maybe_print_line.  So in cppmain.c (line 329 by my reckoning), effectively
substitute 

    else
    {
      print.lineno = line;
      print_line ("");
    }

with 

    else
    {
      print.lineno = line;
      if (print.printed) putc ('\n', print.outf);
      print.printed = 0;
      fprintf (print.outf, "# %u \"%s\"%s%s\n",
           print.lineno, print.last_fname, "", print.syshdr_flags);
    }
 
This saves a subroutine call.

> > Also noteworthy, reversing the parameters fixes the segfault!
> 
> That makes me even more suspicious that something is very wrong
> with your env.  Exactly the same code should be running, with the
> same internal state, once you get to do_preprocessing()
> when you flip the order.

Right.  I wouldn't be a bit surprised if something is very wrong with this
platform environment.  I've been doing compiles on Solaris 5.8 that work
flawlessly, when they break down on Solaris 2.7 for what appears to be No
Good Reason.  

> 
> Phil, could I ask you to try what Joshua claims above on 3.0 branch,
> if you still have it lying around?  If you still can't get anything,
> I'll close this PR, since it is unreproducable with a seemingly
> impossible backtrace.
> 
> Thanks a lot,
> 
> Neil.
> 

While I respectfully disagree that it's completely impossible, and it is
reproducable on at least this particular platform, I will not overly object
to closing out the PR as it may be specific to some peculiarity of our
compiler and/or OS environment.  If you think of anything else worth
checking, let me know.

Thanks for your assistance.

Josh Gerwin, System Programmer/Analyst
joshua.a.gerwin@intel.com
Intel Corp.
NorthWest Engineering Computing


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]