[GHC] #12622: Unboxed static pointers lead to missing SPT entries
GHC
ghc-devs at haskell.org
Sun Sep 25 15:34:24 UTC 2016
#12622: Unboxed static pointers lead to missing SPT entries
-------------------------------------+-------------------------------------
Reporter: mboes | Owner: facundominguez
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
I found what appears to be a regression following the merge of the new
FloatOut based static pointers support. See github.com/mboes/bug-ptr-not-
in-spt for a fully developed minimal example.
It seems to be quite hard to trigger this bug:
* I need to be using distributed-closure (not bare `StaticPtr`).
* The static pointer needs to be defined in a separate module.
* The static pointer must refer to a value with at least one polymorphic
argument.
* Compiler optimization level 1 needs to be turned on.
At any rate, I wasn't able to trigger it without all conditions above
being true. Initial investigations by facundominguez point to static
pointer unpacking in distributed-closure as the culprit. Likely unpacked
static pointers are no longer recognized as such by the FloatOut pass and
therefore never floated to top-level, hence breaking a fundamental
invariant about static pointers.
This might explain why sometimes static pointers don't get added to the
static pointer table (SPT), as in the above minimal example.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12622>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list