[llvm-commits] [llvm] r109495 - /llvm/trunk/lib/VMCore/Value.cpp

Duncan Sands baldrick at free.fr
Mon Jul 26 23:53:14 PDT 2010


Author: baldrick
Date: Tue Jul 27 01:53:14 2010
New Revision: 109495

URL: http://llvm.org/viewvc/llvm-project?rev=109495&view=rev
Log:
After updating value handles for RAUW, check that no weak or tracking handles
are still on the list.  This might happen if a CallbackVH created some new value
handles for the old value when doing RAUW.  Barf if it occurs, since it is almost
certainly a mistake.

Modified:
    llvm/trunk/lib/VMCore/Value.cpp

Modified: llvm/trunk/lib/VMCore/Value.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Value.cpp?rev=109495&r1=109494&r2=109495&view=diff
==============================================================================
--- llvm/trunk/lib/VMCore/Value.cpp (original)
+++ llvm/trunk/lib/VMCore/Value.cpp Tue Jul 27 01:53:14 2010
@@ -494,7 +494,7 @@
   // Note that we deliberately do not the support the case when dropping a value
   // handle results in a new value handle being permanently added to the list
   // (as might occur in theory for CallbackVH's): the new value handle will not
-  // be processed and the checking code will meet out righteous punishment if
+  // be processed and the checking code will mete out righteous punishment if
   // the handle is still present once we have finished processing all the other
   // value handles (it is fine to momentarily add then remove a value handle).
   for (ValueHandleBase Iterator(Assert, *Entry); Entry; Entry = Iterator.Next) {
@@ -577,6 +577,24 @@
       break;
     }
   }
+
+#ifndef NDEBUG
+  // If any new tracking or weak value handles were added while processing the
+  // list, then complain about it now.
+  if (Old->HasValueHandle)
+    for (Entry = pImpl->ValueHandles[Old]; Entry; Entry = Entry->Next)
+      switch (Entry->getKind()) {
+      case Tracking:
+      case Weak:
+        dbgs() << "After RAUW from " << *Old->getType() << " %"
+          << Old->getNameStr() << " to " << *New->getType() << " %"
+          << New->getNameStr() << "\n";
+        llvm_unreachable("A tracking or weak value handle still pointed to the"
+                         " old value!\n");
+      default:
+        break;
+      }
+#endif
 }
 
 /// ~CallbackVH. Empty, but defined here to avoid emitting the vtable





More information about the llvm-commits mailing list