* Andrew Haley: > The test was, if I recall correctly > > x = a + b; > if ((x ^ a) & (x ^ b)) < 0) > > all you have to do is convert everything to unsigned values, then > > ux = ua + ub; > if ((ux ^ ua) & (ux ^ ub)) & (unsigned)INT_MIN)) > goto deal_with_overflow; > // we now know there is no overflow > x = ux; > > which is exactly the same test as before, but perfectly compliant. The comment is wrong. The code checks for signed overflow, but the following assignment still overflwos when ux is larger than INT_MAX. So this version is usable exactly under the same circumstances as the first one. And the comparison against 0 results in tighter code. 8-)