[GHC] #15038: Memory Corruption (strange closure type)
GHC
ghc-devs at haskell.org
Mon Apr 16 02:24:42 UTC 2018
#15038: Memory Corruption (strange closure type)
-------------------------------------+-------------------------------------
Reporter: andrewthad | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.4.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
I've been encountering corruption of memory in a library of mine that uses
some of GHC's more recent features (levity polymorphism and unboxed sums).
The library is `packed`, and it's source code can be found on my github.
But, more relevant to this issue is the minimal reproducible example I've
put together here: https://github.com/andrewthad/corrupted-memory-example
It's still a bit larger than I'd like it to be, and if no one has any
insights into this, I can keep whittling it down to make it more minimal.
Here's how to run it:
{{{
git clone https://github.com/andrewthad/corrupted-memory-example
cd corrupted-memory-example
cabal new-build --enable-tests test
./dist-newstyle/build/corrupted-memory-example-0.1/build/test/test
}}}
This consistently crashes with:
{{{
test: internal error: evacuate(static): strange closure type 16648
(GHC version 8.4.1 for x86_64_unknown_linux)
Please report this as a GHC bug:
http://www.haskell.org/ghc/reportabug
}}}
Additional information: This issue can be reproduced using GHC 8.2.2, GHC
8.4.1, and GHC HEAD. This project cannot be built with GHC 8.0.2 and
earlier since it uses unboxed sums. Building this project with either
`stack` or `cabal new-build` and then running the test causes the same
crash. However, building it with plain old GHC and then running it does
not. This is really weird, since there aren't any GHC options in the cabal
file that should affect this. In the original library, I have a bunch of
tests that use the parsers `byte` and `any` in a variety of situations,
and none of them every trigger this crash except for the ones where I
stick a `Parser` inside of a `Trie`. This project does a lot of manual
passing of state tokens, but I believe all of these uses to be correct
(mostly because of the extensive tests in the original repo, but I've also
spent a lot of time just looking at the code to figure out if this was
something on my end).
Let me know if the example is too big. I can spend some more time
shrinking it further, but I wanted to go ahead and get it up here.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15038>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list