[vmkit-commits] [vmkit] r85801 - in /vmkit/trunk/lib/Mvm/GCMmap2: MvmGC.h gc.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Mon Nov 2 01:30:20 PST 2009


Author: geoffray
Date: Mon Nov  2 03:30:19 2009
New Revision: 85801

URL: http://llvm.org/viewvc/llvm-project?rev=85801&view=rev
Log:
Add some asserts to ensure the precise tracer is correct.


Modified:
    vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
    vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp

Modified: vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h?rev=85801&r1=85800&r2=85801&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/MvmGC.h Mon Nov  2 03:30:19 2009
@@ -281,12 +281,19 @@
   
   static inline void markAndTraceRoot(void *ptr) {
     void* obj = *(void**)ptr;
-    GCChunkNode *node = o2node(obj);
+    if (obj) {
+      GCChunkNode *node = o2node(obj);
+   
+#ifdef WITH_LLVM_GCC
+      assert(node && "No node in  precise mode");
+      assert(obj == begOf(obj) && "Interior pointer");
+#endif
 
-    if(node && !isMarked(node)) {
-      mark(node);
-      node->remove();
-      node->prepend(used_nodes);
+      if(node && !isMarked(node)) {
+        mark(node);
+        node->remove();
+        node->prepend(used_nodes);
+      }
     }
   }
 

Modified: vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp?rev=85801&r1=85800&r2=85801&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp (original)
+++ vmkit/trunk/lib/Mvm/GCMmap2/gc.cpp Mon Nov  2 03:30:19 2009
@@ -31,6 +31,7 @@
     GCChunkNode *node = o2node(obj);
 
 #ifdef WITH_LLVM_GCC
+    assert(begOf(obj) == obj && "Interior pointer\n");
     assert(node && "No node in precise GC mode");
 #endif
   





More information about the vmkit-commits mailing list