Jonas Maebe wrote:
I would propose to document it as "undefined behaviour", just like C
does (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf ,
section 4.5.7). The reason is that the behaviour can differ depending on
Section 6.5.7. But in that standard the behaviour is undefined also when "the value of the right
operand is greater than or equal to the width of the promoted left operand", which I think is a bit
too simplistic (since, if we start talking about the maximum number of bits that can "legally" be
shifted, then that number depends on the actual value of the left operand, but on the other hand if
we accept that bits get lost, then there is no reason to limit the number of bits that can be shifted)
In other words - if we allow a 1-bit shift to be always correct (independent of the value of the
left operand) then N 1-bit shifts are always correct too (for any N >= 0). And then, introducing a
difference between shifting N bits and shifting Nx1 bits is absurd.
Not much thought went into that C-standard (nor in anything related to C).
Regards,
Adriaan van Os
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel