From Bugzilla Helper: User-Agent: Mozilla/5.0 Galeon/1.2.7 (X11; Linux i686; U;) Gecko/20021203 Description of problem: A simple function is miscompiled under the following combination of flags: -O -fPIC -pg Version-Release number of selected component (if applicable): gcc-3.2.2-5 How reproducible: Always Steps to Reproduce: 1. Create two source files 2. Compile with proper cflags $ gcc -O2 -fPIC -pg -c bug.c $ gcc -pg -c bug-main.c $ gcc -pg bug.o bug-main.o 3. Execute resulting binary $ ./a.out Segmentation fault Actual Results: Segmentation fault Expected Results: Program exits with result code 0 Additional info: /* bug.c */ /* compile with -pg -fPIC -O2 -> wrong code generated by redhat 9's gcc */ typedef struct { void *(*f)(void *, int); } T; void *g(T *t) { return t->f(t, 0); } To actually show the problem, you also need this: /* bug-main.c */ /* compile with -pg (at least) and use with bug.c */ typedef struct { void *(*f)(void *, int); } T; void *ff(void* a, int b) { return 0; } int main(void) { T x = {ff}; g(&x); return 0; }
This is a regression compared to gcc 3.2.2 as released on gcc.gnu.org
The attached testcase seems to compile properly on fedora core with gcc-3.3.2-1
Fixed in gcc-3.2.3-20.