diff options
Diffstat (limited to 'rts/Messages.c')
-rw-r--r-- | rts/Messages.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/rts/Messages.c b/rts/Messages.c index 91ee9a6574..7a37a86259 100644 --- a/rts/Messages.c +++ b/rts/Messages.c @@ -186,7 +186,9 @@ nat messageBlackHole(Capability *cap, MessageBlackHole *msg) // The blackhole must indirect to a TSO, a BLOCKING_QUEUE, an IND, // or a value. loop: - p = UNTAG_CLOSURE(((StgInd*)bh)->indirectee); + // NB. VOLATILE_LOAD(), because otherwise gcc hoists the load + // and turns this into an infinite loop. + p = UNTAG_CLOSURE((StgClosure*)VOLATILE_LOAD(&((StgInd*)bh)->indirectee)); info = p->header.info; if (info == &stg_IND_info) |