rts: enable parallel GC scan of large (32M+) allocation area
[ghc.git] / rts / RetainerProfile.c
index 04bbd82..6cd9c89 100644 (file)
@@ -117,14 +117,9 @@ typedef union {
 
     // layout.payload
     struct {
-    // See StgClosureInfo in InfoTables.h
-#if SIZEOF_VOID_P == 8
-        StgWord32 pos;
-        StgWord32 ptrs;
-#else
-        StgWord16 pos;
-        StgWord16 ptrs;
-#endif
+        // See StgClosureInfo in InfoTables.h
+        StgHalfWord pos;
+        StgHalfWord ptrs;
         StgPtr payload;
     } ptrs;
 
@@ -456,6 +451,7 @@ push( StgClosure *c, retainer c_child_r, StgClosure **first_child )
     case CONSTR_0_1:
     case CONSTR_0_2:
     case ARR_WORDS:
+    case COMPACT_NFDATA:
         *first_child = NULL;
         return;
 
@@ -1367,7 +1363,7 @@ retainStack( StgClosure *c, retainer c_child_r,
             StgFunInfoTable *fun_info;
 
             retainClosure(ret_fun->fun, c, c_child_r);
-            fun_info = get_fun_itbl(UNTAG_CLOSURE(ret_fun->fun));
+            fun_info = get_fun_itbl(UNTAG_CONST_CLOSURE(ret_fun->fun));
 
             p = (P_)&ret_fun->payload;
             switch (fun_info->f.fun_type) {