Hi pypy !<br><br>I hit an assert in pypy/annotation/annrpython.py in addpendingblock line 231 : assert annmodel.unionof(s_oldarg, s_newarg) == s_oldarg<br><br>I think I found an explanation by digging in code :<br><br>The treated block is in the &quot;ll_delitem_nonneg&quot; function, <br>
s_newarg is a &quot;SomeInteger(nonneg=True)&quot; and s_oldarg is a &quot;SomeInteger(nonneg=False)&quot;<br>and in fact they are the &quot;index&quot; argument of this function.<br><br><br>oldarg comes from a previous annotation using the &quot;rtype_method_remove&quot; of rlist.py.<br>
&quot;rtype_method_remove&quot; use &quot;ll_listremove&quot; which use :<br>ll_delitem_nonneg(..., ll_listindex(...))<br>Looking at ll_listindex, it seems clear that the index can be proved as always positive.<br>That&#39;s probably why s_oldarg is a &quot;SomeInteger(nonneg=True)&quot;<br>
<br><br>The new annotation comes from the method &quot;rtype_delitem&quot; (class __extend__ in rlist.py).<br>the index from hop is always positive, so the code :<br>if hop.args_s[1].nonneg:<br>    llfn = ll_delitem_nonneg<br>
select  &quot;ll_delitem_nonneg&quot; as the deletion function.<br>But the index given to the annotator is taken from :<br>v_lst, v_index = hop.inputargs(r_lst, Signed)<br>v_index is a &quot;Signed&quot;<br>The information concerning the &quot;non negative&quot; property of the index integer is lost here.<br>
index is now &quot;SomeInteger(nonneg=False)&quot; and trigs the assert.<br><br><br>What do you think ?<br><br>Zariko.<br>