optimization problem in g++ snapshot 2.97-2000103

Reichelt reichelt@igpm.rwth-aachen.de
Sat Nov 4 10:51:00 GMT 2000


Dear developers,

I think there's something wrong with the optimization step of g++:
The C++-program

  #include <iostream>
  #include <vector>
  #include <algorithm>

  struct Data
  {
    int x[2], y;
    Data ( int i ) { x[0]=i; x[1]=0; y=0; }
  };

  bool operator == ( const Data &d1, const Data &d2 )
  {
    for ( int i=0; i<2; ++i )
      if (d1.x[i]!=d2.x[i]) return false;
    return d1.y==d2.y;
  }

  int main()
  {
    vector<Data> DataList;
    DataList.reserve(8);

    for ( int j=0; j<2; ++j )
      for ( int i=0; i<4; ++i )
      {
        Data d(i);
        if (find(DataList.begin(),DataList.end(),d)==DataList.end())
          DataList.push_back(d);
      }

    cout << "Size of list: " << DataList.size() << "\nElements:";
    for ( int i=0; i<DataList.size(); i++ )
      cout << " " << DataList[i].x[0];
    cout << endl;
    return 0;
  }


should generate the output

  Size of list: 4
  Elements: 0 1 2 3

(it indeed does, if compiled without optimization).
However, if compiled using

  g++ -O1 bug.cpp

the ouput reads:

  Size of list: 8
  Elements: 0 1 2 3 0 1 2 3


Some information on my compiler and computer system:

  Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/2.97/specs
  Configured with: 
  gcc version 2.97 20001030 (experimental)

  SuSE Linux 6.0, running kernel 2.2.12 with SMP enabled
  on a Gigabyte dual Pentium II board (233 MHz)

Attached you will find the preprocessed file generated with

  g++ -E -O1 -g bug.cpp

I hope that helps finding the bug!
With best regards,
Volker Reichelt

 ------------------------------------------------------------------------------

   Volker Reichelt
   Lehrstuhl fuer Numerische Mathematik
     (chair for numerical mathematics)
   RWTH Aachen
   Templergraben 55
   D-52056 Aachen
   Germany

   Tel: (+49) 241/807067, Fax: (+49) 241/8888349
   email: reichelt@igpm.rwth-aachen.de
   http://www.igpm.rwth-aachen.de/reichelt

 ------------------------------------------------------------------------------



More information about the Gcc-bugs mailing list