On 2016-12-01 16:42:39 -0700, Nelson H. F. Beebe wrote: > Vincent Lefevre <vinc...@vinc17.net> asks in response to my lengthy > posting earlier today about where the behavior of bit-shift operations > allows undefined behavior in C and C++: > > >> ... > >> Is this true even when the shifted value is zero? For some time, > >> I've wondered why this was also undefined for zero (in MPFR, we > >> had code where the shift count could be out of range only for > >> the value 0). > >> ... > > No, zero shifts should be perfectly legal, because they just amount to > a no-op, and thus a copy of source to destination. The hardware > manuals that I checked today all permit a zero shift count: it would > take wasteful extra chip circuitry to add a check for such a case.
I'm not talking about a zero shift count, but a shift of the value 0 with an arbitrary shift count, e.g. (uint64_t) 0 << 64. This is undefined behavior, but I wonder why. When mapped to a hardware instruction, does the result depend on the platform? -- Vincent Lefèvre <vinc...@vinc17.net> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon) _______________________________________________ gmp-devel mailing list gmp-devel@gmplib.org https://gmplib.org/mailman/listinfo/gmp-devel