[llvm-commits] [llvm] r48859 - /llvm/trunk/include/llvm/ADT/ilist

Chris Lattner sabre at nondot.org
Wed Mar 26 19:43:11 PDT 2008


Author: lattner
Date: Wed Mar 26 21:43:03 2008
New Revision: 48859

URL: http://llvm.org/viewvc/llvm-project?rev=48859&view=rev
Log:
when a node is removed from an ilist, set its next/prev pointers to
null.  This means that uses of invalidated iterators will explode violently
with:
ilist:143: failed assertion `NodePtr && "++'d off the end of an ilist!"'

instead of happening to work "most of the time".


Modified:
    llvm/trunk/include/llvm/ADT/ilist

Modified: llvm/trunk/include/llvm/ADT/ilist
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/ilist?rev=48859&r1=48858&r2=48859&view=diff

==============================================================================
--- llvm/trunk/include/llvm/ADT/ilist (original)
+++ llvm/trunk/include/llvm/ADT/ilist Wed Mar 26 21:43:03 2008
@@ -356,6 +356,14 @@
     setPrev(NextNode, PrevNode);
     IT = NextNode;
     removeNodeFromList(Node);  // Notify traits that we removed a node...
+    
+    // Set the next/prev pointers of the current node to null.  This isn't
+    // strictly required, but this catches errors where a node is removed from
+    // an ilist (and potentially deleted) with iterators still pointing at it.
+    // When those iterators are incremented or decremented, they will assert on
+    // the null next/prev pointer instead of "usually working".
+    setNext(Node, 0);
+    setPrev(Node, 0);
     return Node;
   }
 





More information about the llvm-commits mailing list