limit check insertion
   
    Henry Cejtin
     
    henry@sourcelight.com
       
    Mon, 22 Oct 2001 17:17:33 -0500
    
    
  
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?)
Isn't  it  incorrect  (needlessly  resrictive)  to  allow paths to start from
arbitrary positions?  I.e., if I have some code that does a limit  check  and
then  goes to another block which does some allocation, then I am safe, but I
would fail your requirements since the path which starts  at  the  allocation
would have a V which was negative.