diff options
author | Simon Marlow <marlowsd@gmail.com> | 2010-05-24 10:55:47 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2010-05-24 10:55:47 +0000 |
commit | b2e840ee0c95fb549d40950f43cc6e4afc177a46 (patch) | |
tree | 59ff4a791bec8b0a35cae94bd5d13045aee31f37 /rts/Messages.c | |
parent | c5e611c7bba08457ededf840903208587fc958a1 (diff) | |
download | haskell-b2e840ee0c95fb549d40950f43cc6e4afc177a46.tar.gz |
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.
Diffstat (limited to 'rts/Messages.c')
-rw-r--r-- | rts/Messages.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/rts/Messages.c b/rts/Messages.c index 5a1e5bd3c4..91ee9a6574 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) |