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.
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)