
#7015: Add support for 'static' -------------------------------------+------------------------------------- Reporter: edsko | Owner: Type: feature | Status: patch request | Milestone: 7.10.1 Priority: normal | Version: 7.4.2 Component: Compiler | Keywords: Resolution: | Architecture: Unknown/Multiple Operating System: | Difficulty: Unknown Unknown/Multiple | Blocked By: Type of failure: | Related Tickets: None/Unknown | Test Case: | Blocking: | Differential Revisions: Phab:D119 | -------------------------------------+------------------------------------- Comment (by simonpj): Here's a comment from Phab that should feed into the design: The current implementation does not appear to keep the heap references alive correctly: {{{ {-# LANGUAGE StaticValues #-} module Main where import GHC.Ref import Control.Concurrent import System.Environment import System.Mem import System.Mem.Weak import Data.Numbers.Primes -- from Numbers -- Just a Ref to some CAF from another package so that we can deRef it when linked with -dynamic primes_ref :: Ref [Integer] primes_ref = static primes main = do as <- getArgs let z = primes!!(length as+200) print z performGC -- addFinalizer z (putStrLn "finalizer z") print z performGC threadDelay 1000000 print . fmap (!!300) =<< deRef primes_ref -- uncommenting the next line keeps primes alive and prevents the segfault -- print (primes!!300) }}} and {{{ $ ghc -dynamic -o primes primes.hs [1 of 1] Compiling Main ( primes.hs, primes.o ) Linking primes ... $ ./primes 1229 1229 Segmentation fault (core dumped) }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/7015#comment:32 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler