When in sanity mode, un-zero malloc'd memory; fix uninitialized memory bugs.
[ghc.git] / rts / sm / Compact.c
index 81bf036..3528fab 100644 (file)
@@ -169,7 +169,8 @@ loop:
     case 1:
     {
         StgWord r = *(StgPtr)(q-1);
-        ASSERT(LOOKS_LIKE_INFO_PTR((StgWord)UNTAG_CLOSURE((StgClosure *)r)));
+        ASSERT(LOOKS_LIKE_INFO_PTR((StgWord)
+               UNTAG_CONST_CLOSURE((StgClosure *)r)));
         return r;
     }
     case 2:
@@ -469,6 +470,7 @@ update_fwd_large( bdescr *bd )
     switch (info->type) {
 
     case ARR_WORDS:
+    case COMPACT_NFDATA:
       // nothing to follow
       continue;
 
@@ -539,7 +541,7 @@ update_fwd_large( bdescr *bd )
 
 // ToDo: too big to inline
 static /* STATIC_INLINE */ StgPtr
-thread_obj (StgInfoTable *info, StgPtr p)
+thread_obj (const StgInfoTable *info, StgPtr p)
 {
     switch (info->type) {
     case THUNK_0_1:
@@ -649,7 +651,6 @@ thread_obj (StgInfoTable *info, StgPtr p)
     }
 
     case IND:
-    case IND_PERM:
         thread(&((StgInd *)p)->indirectee);
         return p + sizeofW(StgInd);
 
@@ -739,7 +740,7 @@ update_fwd( bdescr *blocks )
 {
     StgPtr p;
     bdescr *bd;
-    StgInfoTable *info;
+    const StgInfoTable *info;
 
     bd = blocks;
 
@@ -849,7 +850,7 @@ update_bkwd_compact( generation *gen )
     StgWord m;
 #endif
     bdescr *bd, *free_bd;
-    StgInfoTable *info;
+    const StgInfoTable *info;
     StgWord size;
     W_ free_blocks;
     StgWord iptr;