That's weird. What happens with -O0? What with gcc 3.3? Can you perhaps attach the assembly that is generated for the "broken" case.