
#8834: 64-bit windows cabal.exe segfaults in GC ----------------------------------+---------------------------------- Reporter: awson | Owner: Type: bug | Status: patch Priority: highest | Milestone: 7.8.1 Component: Compiler | Version: 7.8.1-rc2 Resolution: | Keywords: Operating System: Windows | Architecture: x86_64 (amd64) Type of failure: Runtime crash | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: ----------------------------------+---------------------------------- Comment (by simonmar): Here is the broken bit of code, from `lines1_bad`: {{{ c2gC: _s2cV::I64 = R5; _s2cY::I64 = R2 + R4; _c2f5::I64 = R5; (_s2d3::I64) = call "ccall" arg hints: [PtrHint, `signed',] result hints: [PtrHint] memchr(_s2cY::I64, 10, _c2f5::I64); if (_s2d3::I64 == 0) goto c2gK; else goto c2gL; c2gK: call MO_Touch(R3); I64[Hp - 128] = Data.ByteString.Internal.PS_con_info; P64[Hp - 120] = R3; I64[Hp - 112] = R2; I64[Hp - 104] = R4; I64[Hp - 96] = _s2cV::I64; I64[Hp - 88] = :_con_info; P64[Hp - 80] = Hp - 127; P64[Hp - 72] = GHC.Types.[]_closure+1; _c2gw::P64 = Hp - 86; Hp = Hp - 72; R1 = _c2gw::P64; call (P64[Sp])(R1) args: 8, res: 0, upd: 8; }}} Note how R2, R3 and R4 are live across the C call. This is wrong, because on Win64, R3 and R4 are caller-saves and therefore clobbered by the C call. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8834#comment:35 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler