On Mar 30, 2007, at 19:51, Paul Eggert wrote:
Geoff Clare <[EMAIL PROTECTED]> writes:
Paul Eggert <[EMAIL PROTECTED]> wrote, on 30 Mar 2007:
Picky, picky.  Let me restate it as "if the code ... outputs
"SSIZE_MAX wrong" (through normal execution, not undefined behaviour),
Fine, but the point is that there's no portable way for an application
to determine whether adding 1 to a ssize_t variable will have "normal
execution" if the variable's value is SSIZE_MAX.
Perhaps not with x+1, but what about x|(1<<b) where 1<<b is known to  
be less than x?  I think the constraints on integer representations  
guarantee that the result will be a valid positive value equal to or  
larger than x in that same integer type.  From that, I think you can  
conclude that we can reach some 2**n-1 value, and possibly get  
"SSIZE_MAX wrong" without invoking undefined behavior, if SSIZE_MAX  
isn't of the form 2**n-1.  It could still be 2**13-1 for a 16-bit  
type, but not 52k.  (Indeed, the C99 spec also seems to allow for a 2- 
byte integer type with 13 bits of precision, one sign bit, and two  
padding bits, and I'm not sure you could distinguish that from a  
normal 16-bit short without wandering into undefined behavior.)
Ken


Reply via email to