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....