Signed overflow optimization hazards in the kernel
Signed overflow optimization hazards in the kernel
Posted Aug 18, 2012 23:58 UTC (Sat) by giraffedata (guest, #1954)In reply to: Signed overflow optimization hazards in the kernel by pdewacht
Parent article: Signed overflow optimization hazards in the kernel
The result of ... converting an integer to a signed integer type when the value cannot be represented in an object of that type ...For conversion to a type of width N, the value is reduced modulo 2^N to be within range of the type;
I must be reading that wrongly, because that's not at all what GCC does. With -m32, int is a signed integer type of width 32. UINT_MAX reduced modulo 2^32 is UINT_MAX, which is not within the range of int. So this does not describe what (int)UINT_MAX does.
Rather, what GCC does appears to be the opposite of what the standard requires for conversion from negative number to unsigned integer (add UINT_MAX+1 until it fits): it subtracts UINT_MAX+1 until the value is within the range of int (in this case -1).
