[project @ 2000-04-24 22:05:08 by panne]
authorpanne <unknown>
Mon, 24 Apr 2000 22:05:08 +0000 (22:05 +0000)
committerpanne <unknown>
Mon, 24 Apr 2000 22:05:08 +0000 (22:05 +0000)
Use get_itbl instead of direct access to info field in
removeIndirections. This "worked" only because the probability of
hitting an indirection-like closure by chance is 5:65531 on 32bit
platforms. :-) But HOpenGL once again managed to expose this bug...

ghc/rts/Stable.c

index d0d64dd..bf5e6aa 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Stable.c,v 1.10 2000/02/29 19:59:38 sof Exp $
+ * $Id: Stable.c,v 1.11 2000/04/24 22:05:08 panne Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -163,11 +163,11 @@ removeIndirections(StgClosure* p)
 {
   StgClosure* q = p;
 
-  while (q->header.info->type == IND ||
-         q->header.info->type == IND_STATIC ||
-         q->header.info->type == IND_OLDGEN ||
-         q->header.info->type == IND_PERM ||
-         q->header.info->type == IND_OLDGEN_PERM ) {
+  while (get_itbl(q)->type == IND ||
+         get_itbl(q)->type == IND_STATIC ||
+         get_itbl(q)->type == IND_OLDGEN ||
+         get_itbl(q)->type == IND_PERM ||
+         get_itbl(q)->type == IND_OLDGEN_PERM ) {
       q = ((StgInd *)q)->indirectee;
   }
   return q;