
#12622: Unboxed static pointers lead to missing SPT entries -------------------------------------+------------------------------------- Reporter: mboes | Owner: | facundo.dominguez Type: bug | Status: patch Priority: normal | Milestone: Component: Compiler | Version: 8.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D2709 Wiki Page: | Phab:D2720 -------------------------------------+------------------------------------- Comment (by facundo.dominguez): I infer that: * `makeStatic` should never be unfolded, * FloatOut needs to treat it specially when **deciding what to float** (unlike it does now with `StaticPtr`) * Besides keeping the floated bindings, the optimizations should never inline them, or the SPT construction pass wouldn't replace the inlined calls to `makeStatic`. * the SPT construction needs to do more work (which is replacing this call with a StaticPtr). It is probably doable, but how is it simpler than using the twin data constructor? Something that could be simpler is to stop relaying on the FloatOut pass. Instead: 1. As you suggest: Make `static e` expand into the ordinary function call `makeStatic e` 2. Make the SPT construction phase float all such calls and insert them in the SPT. Thus there is no need to worry about unfloated calls during linting and there will be no interference from optimizations. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12622#comment:11 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler