Bug 228521 - c++ code crashes
Summary: c++ code crashes
Keywords:
Status: CLOSED UPSTREAM
Alias: None
Product: Fedora
Classification: Fedora
Component: gcc
Version: 6
Hardware: athlon
OS: Linux
medium
urgent
Target Milestone: ---
Assignee: Jakub Jelinek
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2007-02-13 15:49 UTC by Tianlin Wang
Modified: 2007-11-30 22:11 UTC (History)
1 user (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2007-02-14 11:22:50 UTC
Type: ---
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
GNU Compiler Collection 30787 0 None None None Never

Description Tianlin Wang 2007-02-13 15:49:38 UTC
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:

Comment 1 Jakub Jelinek 2007-02-13 16:11:48 UTC
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.

Comment 2 Jakub Jelinek 2007-02-14 11:22:50 UTC
Tracking upstream.


Note You need to log in before you can comment on or make changes to this bug.