trq@MOOSE.CITA.UTORONTO.CA (Tom Quinn) (03/21/89)
G++ will get a segmentation violation when compiling the following code with the "-O" option. This is g++ version 1.34.1 on a Sun4/110 running SunOs 4.0. Tom Quinn Canadian Institute for Theoretical Astrophysics trq@moose.cita.utoronto.ca UUCP - decvax!utgpu!moose!trq BITNET - quinn@utorphys.bitnet ARPA - trq%moose.cita.toronto.edu@relay.cs.net The compile: g++ -g -v -O -c snapcc.cc -o snapcc.o g++ version 1.34.1 /usr/local/lib/gcc-cpp -+ -v -undef -D__GNU__ -D__GNUG__ -Dsparc -Dsun -Dunix -D__sparc__ -D__sun__ -D__unix__ -D__OPTIMIZE__ snapcc.cc /tmp/cca18859.cpp GNU CPP version 1.34 /usr/local/lib/gcc-c++ /tmp/cca18859.cpp -quiet -dumpbase snapcc.cc -opt -version -G -o /tmp/cca18859.s GNU C++ version 1.34.1 (sparc) compiled by GNU C version 1.34. In method void ParticleVec::apply (auto void (*)(struct ParticleRec )): snapcc.cc:26: Segmentation violation Program c++ got fatal signal 11. The code: ------------------------------------------------------------------------ struct ParticleRec { double x, y, z, vx, vy, vz; }; typedef struct ParticleRec Particle; typedef void (*ParticleProcedure)(Particle ); class ParticleVec { protected: int len; Particle *s; ParticleVec(int l, Particle* d); public: ParticleVec (); ParticleVec (int l); ParticleVec (int l, Particle fill_value); ParticleVec (ParticleVec&); ~ParticleVec (); ParticleVec & operator = (ParticleVec & a); Particle& operator [] (int n); void apply(ParticleProcedure f); }; inline void ParticleVec::apply(ParticleProcedure f) { Particle* top = &(s[len]); Particle* t = s; while (t < top) (*f)(*t++); }