[GHC] #9352: Allow `State# s` argument/result types in `ccall` FFI imports
GHC
ghc-devs at haskell.org
Wed Jul 23 19:15:10 UTC 2014
#9352: Allow `State# s` argument/result types in `ccall` FFI imports
-------------------------------------+-------------------------------------
Reporter: hvr | Owner:
Type: feature | Status: new
request | Milestone: 7.10.1
Priority: normal | Version: 7.8.2
Component: Compiler | Keywords:
(Type checker) | Architecture: Unknown/Multiple
Resolution: | Difficulty: Unknown
Operating System: | Blocked By:
Unknown/Multiple | Related Tickets: #9218
Type of failure: |
None/Unknown |
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by hvr):
As first proof-of-concept, I made the type-checker allow `State# s` to see
if it would just-work(tm), here's the Cmm output resulting from the `foo`
declaration:
{{{#!c
[section "data" {
M.c_foo_closure:
const M.c_foo_info;
},
M.c_foo_entry() // [R2]
{ info_tbl: [(c1Cx,
label: M.c_foo_info
rep:HeapRep static { Fun {arity: 2 fun_type:
ArgSpec 4} })]
stack_info: arg_space: 8 updfr_space: Just 8
}
{offset
c1Cx:
_s1Cl::I64 = R2;
goto c1Cz;
c1Cz:
_c1Cv::I64 = foo;
_c1Cw::I64 = _s1Cl::I64;
call "ccall" arg hints: [‘signed’] result hints: []
(_c1Cv::I64)(_c1Cw::I64);
call (P64[Sp])() args: 8, res: 0, upd: 8;
}
}]
}}}
Compiling `bar` however, results in
{{{
ghc-stage2: panic! (the 'impossible' happened)
(GHC version 7.9.20140723 for x86_64-unknown-linux):
resultWrapper (# State# s, Int# #)
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9352#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list