Try to compile the following code in a cpp file, gcc crashes. Working on Redhat 7.2. #include <assert.h> #define b 5 int f; int foobar(int foo, int bar = (assert(f>=b), funcPtr)(), int foob=some_int); Reading specs from /shared/i80386linux/compiler/gcc3.2/linux2.4/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs Configured with: ../configure --prefix=/user/unicore/i80386linux/compiler/gcc3.2/linux2.4 --enable-languages=c,c++ --enable-threads=posix --enable-shared --enable-__cxa_atexit Thread model: posix gcc version 3.2
Created attachment 7496 [details] Preprocessed file demonstrating the crash. It was just 48 lines, I havent bzip'd it
Created attachment 7497 [details] when compiled with -v -save-temps
Fixed already in 3.3.
Subject: Re: internal error: Segmentation fault for valid code segment Was this bug filed earlier ? if yes, please send me the original bug number. Thanks -Arvind Sachdeva. On 9 Nov 2004 06:20:51 -0000, pinskia at gcc dot gnu dot org <gcc-bugzilla@gcc.gnu.org> wrote: > > ------- Additional Comments From pinskia at gcc dot gnu dot org 2004-11-09 06:20 ------- > Fixed already in 3.3. > > -- > What |Removed |Added > ---------------------------------------------------------------------------- > Severity|critical |normal > Status|UNCONFIRMED |RESOLVED > Resolution| |FIXED > Target Milestone|--- |3.3 > > > > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18391 > > ------- You are receiving this mail because: ------- > You reported the bug, or are watching the reporter. > You are on the CC list for the bug, or are watching someone who is. >
The following code also crashes. Can somebody suggest a workaround while I am using gcc 3.2 #include <assert.h> #include <stdio.h> #include <stdlib.h> extern bool cond; int (*funcPtr)(); #define printf int foobar(int foo, int bar = ((cond?funcPtr:(fprintf(stderr, "problem at %s:%s\n", __FILE__, __LINE__), abort()))()), int foob=8);
I am planning to use the following code as workaround, which does not crash. #include <assert.h> #include <stdio.h> #include <stdlib.h> extern bool cond; typedef int (*FuncPtr)(); FuncPtr funcPtr; int foobar(int foo, int bar = ((cond?funcPtr:(fprintf(stderr, "problem at %s:%s\n", __FILE__, __LINE__), (FuncPtr)0))()), int foob=8);
3.2.x is so old and not maintained any more and ther other one is fixed also already in 3.3, I think it is time to update.