[project @ 2001-01-16 12:02:04 by simonmar]
[ghc-hetmet.git] / ghc / rts / ProfHeap.c
index 9ef9a11..acd7778 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: ProfHeap.c,v 1.12 2000/04/19 12:42:48 simonmar Exp $
+ * $Id: ProfHeap.c,v 1.20 2000/12/11 12:36:59 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2000
  *
@@ -50,6 +50,7 @@ static void fprint_data(FILE *fp);
  *
  * -------------------------------------------------------------------------- */
 
+#ifdef PROFILING
 typedef struct _ctr {
     const char *str;
     unsigned long mem_resid;
@@ -142,6 +143,7 @@ reportCtrResid(FILE *fp)
        }
     }
 }
+#endif /* PROFILING */
 
 /* -------------------------------------------------------------------------- */
 
@@ -489,17 +491,16 @@ heapCensus(void)
       info = get_itbl((StgClosure *)p);
 
       switch (info->type) {
-      case BCO:
-       size = bco_sizeW((StgBCO *)p);
-       break;
        
       case CONSTR:
-       if (((StgClosure *)p)->header.info == &DEAD_WEAK_info) {
-         size = sizeofW(StgWeak);
-         break;
+       if (((StgClosure *)p)->header.info == &stg_DEAD_WEAK_info
+           && !(LOOKS_LIKE_GHC_INFO(*(p + sizeW_fromITBL(info))))) {
+           size = sizeofW(StgWeak);
+           break;
        }
        /* else, fall through... */
 
+      case BCO:
       case FUN:
       case THUNK:
       case IND_PERM: