bogus inlining of foreign import "foo.h &foo"
Foreign imports with include file annotations are not supposed to be inlined, because if they end up crossing a module boundary the include file might not be available when compiling the importing module.
This works by making the Id representing the foreign call NOINLINE, which is done in DsForeign.dsCImport
. Unfortunately with the example below, the Id still gets inlined into another binding, and thereby escapes the module.
module Curses (screen_size) where
import Foreign
data WINDOW = WINDOW
type WINDOWptr = Ptr WINDOW
foreign import ccall unsafe "curses.h & stdscr" stdscrp :: Ptr WINDOWptr
screen_size :: IO ()
screen_size = do
stdscr <- peek stdscrp
return ()
Compile with GHC 6.8.2, -O.
Trac metadata
Trac field | Value |
---|---|
Version | 6.8.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | Unknown |
Architecture | Unknown |