On Mon, Mar 08, 2010 at 10:20:05PM +0000, corvid wrote:
I wrote:
Johannes wrote:
On Mon, Mar 08, 2010 at 06:33:12PM +0000, corvid wrote:
Tried running my test/cookies program and got two failures from the 32-bit timestamp wrapping tests.
Turned out that I had -O2 set. -O succeeds, and no optimization succeeds. If I insert a MSG("exptime+local_shift %ld\n", exptime + local_shift); after setting local_shift in Cookies_expires_attr(), it works even with -O2.
This is with gcc-4.3.3. I'm going to get 4.4.3 and see what happens...
Same behaviour with 4.4.3.
Found out what's going on.
Signed overflow is undefined, and -O2 gives -fstrict-overflow, which assumes that overflow won't happen.
good catch!
So I will do something of some sort about this :)
BTW. wikipedia states that generally arithmetic operations on time_t have no defined meaning, but you can use difftime() instead.