"Kevin P. Fleming" <kpfleming@xxxxxxxxxx> writes: > Andrew Haley wrote: >> Kevin P. Fleming wrote: >>> Nikos Chantziaras wrote: >>> >>>> Thanks for the tip. Looking at the generated assembly files, I finally >>>> solved the "mystery": GCC uses SSE/SSE2 instructions to fetch both >>>> variables in one CPU instruction. It's faster but circumvents >>>> short-circuit "if" rules and Valgrind prints an error. >>> Then that seems very broken; you should not have to have initialized a >>> variable to avoid this issue, since short-circuit evaluation is defined >>> in the C standard. >> >> Yes, but it's covered by the "as if" rule: if no conforming program could >> ever notice the difference, an optimization is allowed. > > Well, I guess that was my point, stated in another way. I'm certainly no > C standard expert, but I didn't think his program was 'non-conforming' > in any way. Andrew's point was not that the program was non-conforming. His point was that a conforming program could not detect this optimization. And, indeed, it couldn't. The issue was reported by valgrind, not by the program itself. Ian