[GHC] #11651: Allow plugins to define built-in rules

GHC ghc-devs at haskell.org
Fri Feb 26 14:27:54 UTC 2016


#11651: Allow plugins to define built-in rules
-------------------------------------+-------------------------------------
           Reporter:  simonpj        |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  7.10.3
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 Conal Eliot has an application in which he wants a plugin to add some new
 `BuiltinRules` to the `mg_rules` of the `ModGuts` of the module being
 compiled.  He needs a built-in rule (which runs some custom code) rather
 than a vanilla `CoreRule` (which pattern-matches the argument).

 But then he got a GHC panic
 {{{
 get a GHC panic: “No match in record selector ru_args”.
 }}}
 Turns out it comes from these lines in `OccAnal`
 {{{
     imp_rule_edges = foldr (plusVarEnv_C unionVarSet) emptyVarEnv
                             [ mapVarEnv (const maps_to) (exprFreeIds arg
 `delVarSetList` ru_bndrs imp_rule)
                             | imp_rule <- imp_rules
                             , let maps_to = exprFreeIds (ru_rhs imp_rule)
                                              `delVarSetList` ru_bndrs
 imp_rule
                             , arg <- ru_args imp_rule ]
 }}}
 This code is just working out what locally-defined variables should be
 kept alive by the `mg_rules` for imported Ids.   But `BuiltinRules` don't
 have any `ru_args`.

 Easy fix: just don't traverse builtin rules in this scan.  In Conal's
 case, the rules that his plugin adds certainly don't mention locally-
 defined Ids.

 I'll do this shortly.

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


More information about the ghc-tickets mailing list