limit check insertion
   
    Stephen Weeks
     
    MLton@sourcelight.com
       
    Mon, 22 Oct 2001 16:46:42 -0700
    
    
  
> I assume that the last defining case of V should have been
>     V (l :: p, n) = V (p, n - m) if at(l) = Alloc(m)
>                                  if at(l) = LimitCheck(m)
> I.e.,  you  have to walk through the path, not just take the first element of
> the path, and what you called `li' was just `l'.  (Is the  first  part  wrong
> because all allocations and checks are at the start of a basic block?)
Sorry, the definition should have been
Definition [V]:
   V: Path x Int -> Int
   V ([], n) = n
   V (l :: p, n) = V(p, n - m)  if at(l) = Alloc(m)
		   V(p, m)      if at(l) = LimitCheck(m)
This framework abstracts away from basic blocks, which can be
represented as statements with only one successor.
 
> Isn't  it  incorrect  (needlessly  resrictive)  to  allow paths to start from
> arbitrary positions?
Yes.  That is why, the definitions of soundness and correctness only
refered to paths starting at ls.