[GHC] #10665: INLINE breaks rewrite rules when '-g' is used

GHC ghc-devs at haskell.org
Tue Jul 21 20:35:56 UTC 2015


#10665: INLINE breaks rewrite rules when '-g' is used
-------------------------------------+-------------------------------------
              Reporter:  slyfox      |             Owner:
                  Type:  bug         |            Status:  new
              Priority:  normal      |         Milestone:
             Component:  Compiler    |           Version:  7.10.2-rc2
  (CodeGen)                          |
              Keywords:              |  Operating System:  Unknown/Multiple
          Architecture:              |   Type of failure:  Compile-time
  Unknown/Multiple                   |  crash
             Test Case:              |        Blocked By:
              Blocking:              |   Related Tickets:
Differential Revisions:              |
-------------------------------------+-------------------------------------
 The bug is found when building conduit-1.2.4.2 package with '-O2 -g'
 options. The distilled sample looks like that:

 {{{#!hs
 {-# LANGUAGE BangPatterns #-}

 module RewriteBug (bug) where

 bug :: () -> ()
 bug () = bug ()
 {-# NOINLINE bug #-}

 a2 :: ()
 a2 = ()
 {-# INLINE[1] a2 #-}

 {-# RULES "bug a2" [0] bug a2 = () #-}

 {-
  Crashes as:
    $ inplace/bin/ghc-stage2 -c -O1 -fforce-recomp RewriteBug.hs -g
     ghc-stage2: panic! (the 'impossible' happened)
       (GHC version 7.11.20150721 for x86_64-unknown-linux):
             Tick in rule ()
 -}
 }}}

 My theory of sequence of actions is the following:
 - rewrite rule gets read as-is by GHC (gentle phase)
 - a2 INLINE changes LHS of rewrite rule (phase 1)
 - when time comes to apply 'bug a2' rule GHC detects INLINE problem (phase
 0)

 In real code it happened across multiple files.

 The bug is reproducible in both ghc-7.10.2-rc2 and today's HEAD.

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


More information about the ghc-tickets mailing list