when a node is removed from an ilist, set its next/prev pointers to
authorChris Lattner <sabre@nondot.org>
Thu, 27 Mar 2008 02:43:03 +0000 (02:43 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 27 Mar 2008 02:43:03 +0000 (02:43 +0000)
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".

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48859 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/ilist

index fe55f5ced9c8549f7fe8b8fbef9eb9e56333ba42..4e6ea007975bfd28b56d9a44d73dffcd070945e2 100644 (file)
@@ -356,6 +356,14 @@ public:
     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;
   }