This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: g++ 4.3, troubles with C++ indexing idioms


On 19 July 2007 14:08, tbp wrote:

> I have that usual heavy duty 3 fp components class that needs to be
> reasonably efficient and takes this form for g++
> struct vec_t {
> 	float x,y,z;
> 	const float &operator()(const uint_t i) const { return *(&x + i); }
> 	float &operator()(const uint_t i) { return *(&x + i); } // <-- guilty
> 	[snip ctors, operators & related cruft]
> };
> 
> I use this notation 

  That's not "notation".  That's "illegal invalid code that invokes undefined
behaviour".  struct vec_t is not a POD type (since it has ctors) and you don't
actually have any right to assume that x, y and z are arranged in consecutive
memory locations.

> Alas, somewhere between gcc-4.3-20070608 (ok) and gcc-4.3-20070707
> (not ok ever since), the non const indexing started to trigger bogus
> codegen with 

  Bogus codegen is the inevitable result of bogus code.  Garbage in, garbage
out.

  BTW, the const indexing is completely undefined too.

> At this point i'd need some guidance from compiler developers 

  No, you need to read a book on how to program in C++.

> What kind of idiom am i supposed to write such thing in to get back
> efficient and correct code?

  This is a question for gcc-help, not for the main gcc list.  "Legal valid"
code would be a good start.

    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]