From b2e840ee0c95fb549d40950f43cc6e4afc177a46 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Mon, 24 May 2010 10:55:47 +0000 Subject: [PATCH] Add a missing UNTAG_CLOSURE, causing bus errors on Sparc We just about got away with this on x86 which isn't alignment-sensitive. The result of the memory load is compared against a few different values, but there is a fallback case that happened to be the right thing when the pointer was tagged. A good bug to find, nonetheless. --- rts/Messages.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/rts/Messages.c b/rts/Messages.c index 5a1e5bd..91ee9a6 100644 --- a/rts/Messages.c +++ b/rts/Messages.c @@ -183,9 +183,10 @@ nat messageBlackHole(Capability *cap, MessageBlackHole *msg) return 0; } - // we know at this point that the closure + // The blackhole must indirect to a TSO, a BLOCKING_QUEUE, an IND, + // or a value. loop: - p = ((StgInd*)bh)->indirectee; + p = UNTAG_CLOSURE(((StgInd*)bh)->indirectee); info = p->header.info; if (info == &stg_IND_info) -- 1.7.10.4