[GHC] #9390: Inlining prevents evaluation of ignored parts of unboxed tuples

GHC ghc-devs at haskell.org
Wed Aug 6 10:39:49 UTC 2014


#9390: Inlining prevents evaluation of ignored parts of unboxed tuples
-------------------------------------+-------------------------------------
              Reporter:  snoyberg    |            Owner:
                  Type:  bug         |           Status:  new
              Priority:  normal      |        Milestone:  7.8.4
             Component:  Compiler    |          Version:  7.8.3
            Resolution:              |         Keywords:
      Operating System:  Linux       |     Architecture:  x86_64 (amd64)
       Type of failure:  Incorrect   |       Difficulty:  Unknown
  result at runtime                  |       Blocked By:
             Test Case:              |  Related Tickets:
              Blocking:              |
Differential Revisions:              |
-------------------------------------+-------------------------------------

Comment (by snoyberg):

 I think so, let me see if I've got a grasp of this. In Carter's example
 above, there are essentially the following steps:

 1. Create a new vector.
 2. Write 'A' into the vector.
 3. Write 'B' into the vector.
 4. Freeze and print the vector.

 The ordering dependencies in the code are as follows:

 * Steps 2, 3, and 4 all depend on step 1 occurring.
 * Step 4 depends on step 2 (due to ordering in the IO monad) and step 3
 (due to the usage of seq).

 However, there is no clearly expressed ordering between 2 and 3. Even
 those we only force evaluation of step 3's thunk "after" step 2 is
 performed, there is nothing in the code to express this as a strict
 ordering requirement, and therefore GHC is at full liberty to perform step
 3 before step 2.

 In your code, however, by using `unsafeInterleaveIO`, we have in fact
 stated a strict ordering requirement that step 3 occur after step 2, which
 solves the problem.

 And none of this has anything to do with my original example, which has to
 do with some primops being optimized away depending on how their resulting
 `State#` is handled (whether inside a `case` or not).

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


More information about the ghc-tickets mailing list