From: Simon Marlow Date: Mon, 24 May 2010 10:55:47 +0000 (+0000) Subject: Add a missing UNTAG_CLOSURE, causing bus errors on Sparc X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=b2e840ee0c95fb549d40950f43cc6e4afc177a46;p=ghc-hetmet.git 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. --- 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)