To get GHC to raise an exception from an inline primop, I presume that I'd need to jump to stg_raisezh. None of the existing inline primops do anything quite like this. I see things like emitMemcmpCall and emitMemsetCall, but these ultimately just wrap emitForeignCall, which wraps mkUnsafeCall, which wraps the data constructor CmmUnsafeForeignCall. I think I want CmmCall instead, which is described by the comments as being used for "a native call or tail call". Hmm... emitRtsCall might be what I want. I'll try pursuing this route further.
--
-Andrew Thaddeus Martin