[GHC] #12875: GHC fails to link all StaticPointers-defining modules of a library in an executable
GHC
ghc-devs at haskell.org
Wed Nov 23 23:30:06 UTC 2016
#12875: GHC fails to link all StaticPointers-defining modules of a library in an
executable
-------------------------------------+-------------------------------------
Reporter: bgamari | Owner:
Type: bug | Status: new
Priority: normal | Milestone: 8.2.1
Component: Compiler | Version: 8.0.1
Resolution: | Keywords:
| StaticPointers
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
@@ -7,0 +7,1 @@
+
New description:
Consider that you have a package called `lib` which exposes these modules,
{{{#!hs
module ALib.Types where
data AThing = AThing String
deriving (Show)
{-# LANGUAGE StaticPointers #-}
module ALib.Things where
import GHC.StaticPtr
import ALib.Types
thing1 :: StaticPtr AThing
thing1 = static (AThing "hello")
}}}
Now consider that you have a server which reads a `StaticKey` of
`StaticPtr AThing` and shows it,
{{{#!hs
import ALib.Types
main :: IO ()
main = do
key <- readFingerprint <$> getContents :: IO StaticKey
Just thing <- unsafeLookupStaticPtr key :: IO (Maybe (StaticPtr
AThing))
print $ deRefStaticPtr thing
}}}
Naturally this executable will link against `lib`. However, this
executable as-written will fail if given the key of `ALib.Things.thing1`.
Fixing this requires that the executable explicitly import and use a
definition from `ALib.Things`.
The problem appears to be that the linker elides the `ALib.Things` object
from the final executable unless it refers to a symbol. Note that things
also work fine if the server executable is dynamically linked.
--
Comment (by bgamari):
See https://github.com/bgamari/T12875-repro for a functional example of
this.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12875#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list