#10154: strange closure type 983040 (GHC version 7.8.3 for x86_64_unknown_linux) -------------------------------------+------------------------------------- Reporter: masterdezign | Owner: Type: bug | Status: closed Priority: high | Milestone: Component: Compiler | Version: 7.8.3 Resolution: invalid | Keywords: strange Operating System: Linux | closure type Type of failure: Runtime crash | Architecture: Blocked By: | Unknown/Multiple Related Tickets: | Test Case: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- Changes (by rwbarton): * status: infoneeded => closed * resolution: => invalid Comment: I tried building with `-debug -rtsopts` and running with `+RTS -DS` under gdb and sure enough, many hours later, I got this: {{{ ... Running epsilon=5.0e-3 delta=1.8e-2 Running epsilon=5.0e-3 delta=1.9e-2 Running epsilon=5.0e-3 delta=2.0e-2 [New Thread 0x7fffa53ff700 (LWP 18847)] epsilon=2.0e-2 delta=1.0e-3 => 0 head(s) (92.3%) Simul: internal error: ASSERTION FAILED: file rts/sm/Storage.c, line 789 (GHC version 7.8.4 for x86_64_unknown_linux) Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug Program received signal SIGABRT, Aborted. [Switching to Thread 0x7fffe5dfc700 (LWP 18737)] 0x00007ffff6798077 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) bt #0 0x00007ffff6798077 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 #1 0x00007ffff6799458 in __GI_abort () at abort.c:89 #2 0x00000000007e5087 in rtsFatalInternalErrorFn (s=0x854810 "ASSERTION FAILED: file %s, line %u\n", ap=0x7fffe5df7cd8) at rts/RtsMessages.c:170 #3 0x00000000007e4cbf in barf (s=0x854810 "ASSERTION FAILED: file %s, line %u\n") at rts/RtsMessages.c:42 #4 0x00000000007e4d22 in _assertFail (filename=0x85a1c8 "rts/sm/Storage.c", linenum=789) at rts/RtsMessages.c:57 #5 0x0000000000804d69 in allocate (cap=0xacec60, n=8) at rts/sm/Storage.c:789 #6 0x000000000080f522 in stg_newByteArrayzh () #7 0x0000000000000000 in ?? () }}} The failed assertion is at the end of `allocate`: {{{ IF_DEBUG(sanity, ASSERT(*((StgWord8*)p) == 0xaa)); }}} Inspecting the memory before `p` (the pointer that `allocate` has just allocated, and is about to return) I see {{{ (gdb) x/ga p-8 0x7ffff42ec9c0: 0x812e60 <stg_ARR_WORDS_info> (gdb) 0x7ffff42ec9c8: 0x30 (gdb) 0x7ffff42ec9d0: 0x30002e0030002d (gdb) 0x7ffff42ec9d8: 0x30003000300030 (gdb) 0x7ffff42ec9e0: 0x30003200300031 (gdb) 0x7ffff42ec9e8: 0x33003200340038 (gdb) 0x7ffff42ec9f0: 0x31003100340032 (gdb) 0x7ffff42ec9f8: 0x33003500380035 (gdb) 0x7ffff42eca00: 0xaaaaaaaaaaaa0032 (gdb) }}} so, I strongly suspect that something in the C++ code in the `double- conversion` library is writing past the end of an allocated array. It's quite a lot of C++ code though, so I don't particularly want to investigate further. I'll file a bug with `double-conversion`. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10154#comment:8> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler