limit check bug
   
    Stephen Weeks
     
    MLton@sourcelight.com
       
    Tue, 12 Feb 2002 17:52:45 -0800
    
    
  
> You can't use
>     bytesAllocated > limit - frontier
> because of LIMIT_SLOP, 
In general I agree, but I only used that test after ensuring that
	frontier <= limit
which I think makes the test OK.  As always, it wastes LIMIT_SLOP
amount of space, but who cares.
> but you could use
>     bytesAllocated + LIMIT_SLOP > limit + LIMIT_SLOP - frontier
> assuming  that  we  do not allow either addition to overflow (by now allowing
> one to allocate within LIMIT_SLOP of max int or unsigned and by not  allowing
> the end of a semispace to get within LIMIT_SLOP of the end of addressability.
I don't understand why you want LIMIT_SLOP on the left-hand side.
Keep in mind that we know we are safe if
 	frontier + bytesAllocated <= limit + LIMIT_SLOP
So, if bytesAllocated <= LIMIT_SLOP, then we know we are safe if
(1)	frontier <= limit
OTOH, if we're not sure about bytes allocated, we can use
(2)	bytesAllocated <= (limit + LIMIT_SLOP) - frontier
which cannot overflow and is equivalent to the condition we care about
So, my new proposal is to use tests like (1) when we know
bytesAllocated <= LIMIT_SLOP, and like (2) when we don't know.