
#9281: Rewrite `integer-gmp` to use only non-allocating GMP functions -------------------------------------+------------------------------------- Reporter: hvr | Owner: hvr Type: task | Status: patch Priority: normal | Milestone: 7.10.1 Component: libraries | Version: (other) | Keywords: integer-gmp Resolution: | Operating System: Unknown/Multiple Differential Revisions: Phab:D82 | Type of failure: None/Unknown Architecture: | Test Case: Unknown/Multiple | Blocking: Difficulty: Unknown | Blocked By: | Related Tickets: #8647 | -------------------------------------+------------------------------------- Comment (by simonpj): What happens if you try {{{ foreign import ccall unsafe "integer_gmp_mpn_tdiv_q" c_mpn_tdiv_q :: MutableByteArray# s -> ByteArray# -> GmpSize# -> ByteArray# -> GmpSize# -> State# s -> State# s }}} with `-XUnliftedFFITypes`? Answer {{{ Unacceptable argument type in foreign declaration: State# s }}} But why is `State# s` unacceptable? I can think of no good reason. So I think that it might be as simple as * Adding `State#` to the list of acceptable FFI types (with `-XUnliftedFFITypes`. * Making sure that, since it's a zero-width value, we don't actually pass it to the C function. The latter step is in the code generator itself; these zero-width values ''do'' (and must) survive into `Cmm`. If you'd like to tackle this I'm sure Simon and I would help with any bits you don't grok. I think this would be MUCH simpler than trying to allow types like `IO Int#`, which has global implications that I don't know how to deal with. Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9281#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler