Consistent segfault when compiled program is executed
Current status
%8.8.2 will ship with a fix avoiding this issue for the uses of unsafeCoerce
in Data.Typeable.Internal
. However, it is still possible for the crash to manifest in user code using unsafeCoerce
. The underlying cause won't be fixed until %8.10.1, with !1869 (closed) .
If you are a user seeing this issue, you are advised to factor the unsafeCoerce
application into a separate binding with a NOINLINE
pragma to ensure that the simplifier cannot float out the coerced value outside of the case
alternatives where the coercion is valid.
Summary
The bug is very straightforward: compiled program results in a segfault when executed. I could not make it reproducible without a bytestring
dependency, but the couple places where ByteString
/ShortByteString
s are created as completely empty.
Steps to reproduce
Here is a github repo that contains a minimal (as much as I could make it) project that triggers a bug. Just in case, source files are also attached to this ticket.
In order to reproduce using the attached files:
$ ghc -fforce-recomp -O1 Main.hs Complex.hs Sample.hs -o trigger-segfault && ./trigger-segfault
Compiling without optimizations (-O0
) does not trigger the bug, so -O1
or -O2
is necessary.
Expected behavior
Executable should exit successfully
Environment
- GHC version used: GHC-8.4.4 through GHC-8.6.5
Optional:
- Operating System: Ubuntu 18.04 LTS
- System Architecture: x86_64