[GHC] #14346: 8.2.1 regression: heap corruption after safe foreign calls

GHC ghc-devs at haskell.org
Thu Oct 19 00:26:55 UTC 2017


#14346: 8.2.1 regression: heap corruption after safe foreign calls
-------------------------------------+-------------------------------------
        Reporter:  andrewchen        |                Owner:  (none)
            Type:  bug               |               Status:  infoneeded
        Priority:  highest           |            Milestone:
       Component:  Runtime System    |              Version:  8.2.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  Runtime crash     |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by bgamari):

 So

 However, in general I wonder whether `touch#` is more unsafe than strictly
 necessary. It seems to me that for a tad of stack allocation you can get a
 much safer way to keep values alive. The trick is to introduce a primop,
 {{{
 with# :: a -> r -> r
 }}}
 When `with# a cont` is entered, the entry code will,
  1. Push an `StgWithFrame`, a new sort of return frame which carries a
 reference to `a`, onto the stack
  2. Enters `cont`
 When `cont` returns, it will enter the entry code for `StgWithFrame`,
 which will simply pop itself and return. This way we don't need to worry
 about Core simplifications dropping important `touch#`s.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14346#comment:18>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list