[GHC] #14787: Remove StgLint type checks

GHC ghc-devs at haskell.org
Sun Feb 18 16:59:54 UTC 2018


#14787: Remove StgLint type checks
-------------------------------------+-------------------------------------
        Reporter:  osa1              |                Owner:  (none)
            Type:  task              |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D4404
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Ben Gamari <ben@…>):

 In [changeset:"7f389a580f42a105623853adad15ab3323b41ed5/ghc"
 7f389a58/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="7f389a580f42a105623853adad15ab3323b41ed5"
 StgLint overhaul

 - Remove all type checks
 - Check two STG invariants (no unboxed let bindings, variables defined
   before used) and post-unarisation invariants.

 See the module header and #14787.

 This version validates with `-dstg-lint` added to `GhcStage2HcOpts` and
 `GhcLibHcOpts` and `EXTRA_HC_OPTS`.

 Unarise changes:

 - `unariseConArgBinder` and `unariseFunArgBinder` functions were almost
   the same; only difference was when unarising fun args we keep void
   args while in con args we drop them. A new function `unariseArgBinder`
   added with a `Bool` argument for whether we're unarising a con arg.
   `unariseConArgBinder` and `unariseFunArgBinder` are now defined as

       unariseConArgBinder = unarsieArgBinder True  -- data con
       unariseFunArgBinder = unariseArgBinder False -- not data con

 - A bug in `unariseConArgBinder` and `unariseFunArgBinder` (which are
   just calls to `unariseArgBinder` now) that invalidated the
   post-unarise invariants when the argument has single type rep (i.e.
   `length (typePrimRep x) == 1`) fixed. This isn't a correctness issue
   (it's fine not to unarise if a variable is already represented as
   single value), but it triggers StgLint.

 Test Plan:
 - Pass testsuite with `-dstg-lint` [done]
 - Boot stage2 (including libraries) with `-dstg-lint` [done]

 Reviewers: simonpj, bgamari

 Reviewed By: bgamari

 Subscribers: duog, rwbarton, thomie, carter

 GHC Trac Issues: #14787

 Differential Revision: https://phabricator.haskell.org/D4404
 }}}

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


More information about the ghc-tickets mailing list