Note [Inline unsafeCoerce]
We really want to inline unsafeCoerce, even when applied to boring arguments. It doesn't look as if its RHS is smaller than the call unsafeCoerce x = case unsafeEqualityProof @a @b of UnsafeRefl -> x but that case is discarded in CoreToStg -- see Note [Implementing unsafeCoerce] in base:Unsafe.Coerce. Moreover, if we /don't/ inline it, we may be left with f (unsafeCoerce x) which will build a thunk -- bad, bad, bad. Conclusion: we really want inlineBoringOk to be True of the RHS of unsafeCoerce. And it really is, because we regard case unsafeEqualityProof @a @b of UnsafeRefl -> rhs as trivial iff rhs is. This is (U4) in Note [Implementing unsafeCoerce].
References 1
- Implementing unsafeCoerce GHC.Internal.Unsafe.Coerce
Referenced by 1
- GHC.Core.Unfold call site