
#15155: How untagged pointers sneak into banged fields -------------------------------------+------------------------------------- Reporter: heisenbug | Owner: heisenbug Type: bug | Status: new Priority: normal | Milestone: 8.8.1 Component: Compiler | Version: 8.4.2 Resolution: | Keywords: CodeGen Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: 14677 Related Tickets: #13027 #7308 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by heisenbug): Replying to [comment:12 simonpj]:
heisenbug: are you still interested in this ticket?
Yes, I am totally interested that it doesn't get killed :-) Feel free to close as fixed-by, though. I ''think'' I have a plan to enforce following invariant: - An IND_STATIC closure should never point to a tagged constructor. For this one needs to track which local (module) names point to some other module's exported name, peeking through casts (i.e. representational equalities). This needs to go into a knot tying state in the backend (or perhaps STG) codegens. Should be mostly mechanical. Then the local references should statically dereference the local name and emit the other module's imported binding. Reading the assembly will be slightly harder, as some names will reflect the representational equalities explicitly. I am not sure that the above invariant is enough, considering the presence of BLACKHOLEs etc. But my gut feeling is that such evaluation-predicated closure kinds should never arise pointing to statically evaluated data. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15155#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler