Segfault or internal error: stg_ap_v_ret in ghc 9.6.2
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
Gdb traced the segfault all the way to
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.
Pls don't segfault :)
- GHC version used: ghc 9.6.2