#15508: concprog001 fails with various errors -------------------------------------+------------------------------------- Reporter: osa1 | Owner: osa1 Type: bug | Status: new Priority: highest | Milestone: 8.8.1 Component: Compiler | Version: 8.5 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: #15571 | Differential Rev(s): Phab:D5051 Wiki Page: | (reverted), Phab:D5165, Phab:D5178 -------------------------------------+------------------------------------- Comment (by osa1): One of the remaining issues is this: sometimes with prof+threaded builds we increment info pointers. This either segfaults, or the GC thinks that the object is already evacuated (because info pointer looks like a forwarding pointer when we increment it) and chaos ensues. Here's an example, in this generated code for `GHC.Conc.Sync.childHandler`: {{{ Dump of assembler code for function base_GHCziConcziSync_childHandler1_info: 0x000000000051c5c8 <+0>: add $0x28,%r12 0x000000000051c5cc <+4>: cmp 0x358(%r13),%r12 0x000000000051c5d3 <+11>: ja 0x51c61a <base_GHCziConcziSync_childHandler1_info+82> 0x000000000051c5d5 <+13>: mov 0x360(%r13),%rax => 0x000000000051c5dc <+20>: addq $0x3,0x48(%rax) 0x000000000051c5e1 <+25>: movq $0x51bd50,-0x20(%r12) 0x000000000051c5ea <+34>: mov 0x360(%r13),%rax 0x000000000051c5f1 <+41>: mov %rax,-0x18(%r12) 0x000000000051c5f6 <+46>: mov 0xd34988,%eax 0x000000000051c5fd <+53>: shl $0x1e,%rax 0x000000000051c601 <+57>: mov %rax,-0x10(%r12) 0x000000000051c606 <+62>: mov %r14,(%r12) 0x000000000051c60a <+66>: mov $0xb57742,%r14d 0x000000000051c610 <+72>: lea -0x20(%r12),%rbx 0x000000000051c615 <+77>: jmpq 0xa3c4d0 <stg_catchzh> 0x000000000051c61a <+82>: movq $0x28,0x388(%r13) 0x000000000051c625 <+93>: mov $0xb57770,%ebx 0x000000000051c62a <+98>: jmpq *-0x8(%r13) }}} The highlighted line increments this object's info pointer: {{{
print *(StgClosure*)0x4207528048 $34 = { header = { info = 0x9f2200 <ghczmprim_GHCziTypes_ZC_con_info>, prof = { ccs = 0xb44390, hp = { rs = 0x0, ldvw = 0 } } }, payload = 0x4207528060 } call printClosure((StgClosure*)0x4207528048) ghc-prim:GHC.Types.:(0x42075280b9, 0x4207528092) }}}
After that line: {{{
print *(StgClosure*)0x4207528048 $40 = { header = { info = 0x9f2203 <ghczmprim_GHCziTypes_ZC_con_info+3>, prof = { ccs = 0xb44390, hp = { rs = 0x0, ldvw = 0 } } }, payload = 0x4207528060 } }}}
This is not a valid closure anymore. I don't know what that code is supposed to increment. I'll try to generate Cmm for `GHC.Conc.Sync.childHandler` and see. -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15508#comment:26> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler