Segfault or internal error: stg_ap_v_ret in ghc 9.6.2
Summary
I have a program that crashes with a segfault when run with sanity checks -Da -DS or with internal error: stg_ap_v_ret when run without them.
Its rather large, and I don't know how to reduce it (mostly because I don't understand why it happens in the first place). Its the start of a table based ecs implementation.
The core pieces are: runQuery (and a copy of it which I experimented with: runQuery2#). Its called from progress and the system and query data is created and set at system and query. Experimentally I confirmed that the first runQuery with the systemQuery argument runs and calls the second runQuery, which fails. runQuery works fine on its own (even nested), but fails with the setup in progress.
Gdb traced the segfault all the way to LOOKS_LIKE_CLOSURE_PTR.
Full output before it crashes:
stg_ap_0_ret... 0x42005e16ba: FUN/2(0x469648, 0x42005e16e8, 0x42005e16d8, 0x42005e1786)
stg_ap_v_ret... 0x42005e16d8: MUT_VAR_CLEAN(var=0x42005e17b8)
Thread 1 "Example" received signal SIGSEGV, Segmentation fault.
0x0000000000bf4c6e in LOOKS_LIKE_CLOSURE_PTR (p=0x1839000000420058)
at rts/include/rts/storage/ClosureMacros.h:269
Downloading source file /builds/ghc/ghc/rts/include/rts/storage/ClosureMacros.h
269 rts/include/rts/storage/ClosureMacros.h: Directory not empty.
(gdb) bt
#0 0x0000000000bf4c6e in LOOKS_LIKE_CLOSURE_PTR (p=0x1839000000420058)
at rts/include/rts/storage/ClosureMacros.h:269
#1 0x0000000000bf4f3b in checkClosureShallow (p=0x183900000042005e)
at rts/sm/Sanity.c:106
#2 0x0000000000bf4e77 in checkSmallBitmap (payload=0x42005fff40, bitmap=0, size=4)
at rts/sm/Sanity.c:75
#3 0x0000000000bf4fe7 in checkStackFrame (c=0x42005fff38) at rts/sm/Sanity.c:133
#4 0x0000000000c09ee9 in stg_ap_v_info ()
#5 0x0000000000000000 in ?? ()
This is as far as I got. I don't really know how to continue from here.
In a previous version I had mutable smallarrays in the mutvars, which I then froze before use. This segfaulted the second anything with the smallarrays was done (getting the size, reading any elements, or freezing). I then changed to immutable smallarrays later, but as you can see it still crashes.
Steps to reproduce
Use Brokkr/brokkr-hecs:git, checkout minimal-hecs and run cabal run hecs:example -- +RTS -Da -DS. I pushed the last state of my local testing before I gave up.
Expected behavior
Pls don't segfault :)
Environment
- GHC version used: ghc 9.6.2