Description of problem: A c++ code generates 'Segmentation' message when it is complied with -O2. It works fine with other optimization levels such as -O,-O3. Version-Release number of selected component (if applicable): I only observed this bug in FC6. My machine is Atholon64 How reproducible: /** The following code will end with 'Segmentation' if compiled with -O2 **/ /** It works fine with other optimization levels such -O, -O3 **/ /************ BEGIN OF CODE ***********/ #include <string> #include <cstddef> struct AA { int def; }; struct BB { AA *alltype; }; void compute(int n,BB *grand=NULL); int main(int argc, char *argv[]) { compute(1); return 0; } void compute(int n,BB *grand) { int t; for (t=0; t<n; t++) { if (grand) grand->alltype[t].def += 1; } return; } /********* END OF CODE **********/ Steps to Reproduce: 1. Compile the sample code with -O2 2. run it 3. you will see the 'Segmentation' on the screen Actual results: Segmentation Expected results: Additional info:
Simplified C testcase: struct S { int *s; }; void test (int x, struct S *y) { int i; for (i = 0; i < x; i++) { if (y) y->s[i] += 1; } } int main () { test (1, (void *) 0); return 0; } This seems to be a RTL strength reduction bug, present also on vanilla gcc-4_1-branch. -O2 -fno-strength-reduce cures this.
Tracking upstream.