#12614: Integer division can overwrite other arguments to foreign call -------------------------------------+------------------------------------- Reporter: jscholl | Owner: Type: bug | Status: patch Priority: high | Milestone: 8.0.2 Component: Compiler (NCG) | Version: 8.0.1 Resolution: | Keywords: integer | division Operating System: Unknown/Multiple | Architecture: x86_64 Type of failure: Incorrect result | (amd64) at runtime | Test Case: Blocked By: | Blocking: Related Tickets: #11792 | Differential Rev(s): Phab:D2263 Wiki Page: | -------------------------------------+------------------------------------- Comment (by Ben Gamari <ben@…>): In [changeset:"b61b7c2462b919de7eb4c373e2e2145c6d78d04c/ghc" b61b7c24/ghc]: {{{ #!CommitTicketReference repository="ghc" revision="b61b7c2462b919de7eb4c373e2e2145c6d78d04c" CodeGen X86: fix unsafe foreign calls wrt inlining Foreign calls (unsafe and safe) interact badly with inlining and register passing ABIs (see #11792 and #12614): the inlined code to compute a parameter of the call may overwrite a register already set to pass a preceding parameter. With this patch, we compute all parameters which are not simple expressions before assigning them to fixed registers required by the ABI. Test Plan: - Add test (test both reg and stack parameters) - Validate Reviewers: osa1, bgamari, austin, simonmar Reviewed By: simonmar Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D2263 GHC Trac Issues: #11792, #12614 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12614#comment:5> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler