[GHC] #7307: Share top-level code for strings

GHC ghc-devs at haskell.org
Thu Dec 5 01:14:23 UTC 2013


#7307: Share top-level code for strings
-------------------------------------+------------------------------------
        Reporter:  simonpj           |            Owner:  parcs
            Type:  bug               |           Status:  new
        Priority:  normal            |        Milestone:  7.8.1
       Component:  Compiler          |          Version:  7.6.1
      Resolution:                    |         Keywords:
Operating System:  Unknown/Multiple  |     Architecture:  Unknown/Multiple
 Type of failure:  None/Unknown      |       Difficulty:  Unknown
       Test Case:                    |       Blocked By:
        Blocking:                    |  Related Tickets:
-------------------------------------+------------------------------------

Comment (by ezyang):

 Yeah, this code is buggy. Here are the problems I can find from a quick
 pass:

 * TOP_UNPACK is declared to have a thunk-representation. In that case, it
 needs to use a `StgThunkHeader`, so that the extra padding required to
 allow for lock-less thunk update in multithreaded code.

 * Similarly, it should be given the THU and SRT flags. Since these thunks
 are emitted into the data section (i.e. are static data), they also need
 the static flag (like THUNK_STATIC). So really TOP_UNPACK is a bad name.

 * I am not sure this is a good idea, but it seems like this mechanism
 could be generalized to variadic THUNK_STATICs, which are essentially
 THUNK_STATIC but have some payload attached to the end. You don't even
 have to hard-code the infotable anymore.

 * The GC code is wrong; TOP_UNPACK should be handled like a THUNK_STATIC.

 * I know for a fact you're missing this case from a number of other giant
 switch statements in the RTS. Do a grep.

 * The generated info table never pushes an update frame to adjust itself.
 So what happens when a reference to a TOP_UNPACK is inside generated code?
 I think you will end up repeatedly unpacking the string, though I am not
 100% sure here.

 * As for whether or not your C-- is right, you should double-check it with
 the old C-- we were generating for handling unpacking per thunk.

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


More information about the ghc-tickets mailing list