[GHC] #13960: Ticks exhausted with 8.0.2

GHC ghc-devs at haskell.org
Tue Jul 11 19:05:29 UTC 2017


#13960: Ticks exhausted with 8.0.2
-------------------------------------+-------------------------------------
        Reporter:  tom-bop           |                Owner:  (none)
            Type:  bug               |               Status:  infoneeded
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by tom-bop:

@@ -1,2 +1,75 @@
- This is unfortunately a closed-source codebase I'm experiencing this with,
- but we get a GHC panic with a small/not-doing-anything-crazy codebase:
+ **Update**: I've been able to provide a much simpler test case for this
+ error:
+
+ Broken.hs:
+
+ {{{
+ #!haskell
+ {-# LANGUAGE OverloadedStrings #-}
+
+ module Broken (breaks) where
+
+ import Database.PostgreSQL.Simple.Types (Query(..))
+
+ breaks :: [(Query, Query)]
+ breaks = [
+     ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   , ("query", "query")
+   ]
+ }}}
+
+ broken.cabal:
+
+ {{{
+ name:                broken
+ version:             0.1.0.0
+ build-type:          Simple
+ cabal-version:       >=1.10
+
+ library
+   exposed-modules:
+     Broken
+   other-extensions:
+       OverloadedStrings
+   build-depends:
+       base
+   --  >=4.9 && <4.10
+     , postgresql-simple
+   --  >=0.5 && <0.6
+   default-language:    Haskell2010
+ }}}
+
+ `cabal install broken.cabal` results in:
+
+ {{{
+ ghc: panic! (the 'impossible' happened)
+   (GHC version 8.0.2 for x86_64-unknown-linux):
+         Simplifier ticks exhausted
+   When trying UnfoldingDone ord
+   To increase the limit, use -fsimpl-tick-factor=N (default 100)
+   If you need to do this, let GHC HQ know, and what factor you needed
+   To see detailed counts use -ddump-simpl-stats
+   Total ticks: 20731
+
+ Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
+ }}}
+
+ ----
+
+ ----
+
+ **Older info:**
+
+
+ ~~This is unfortunately a closed-source codebase I'm experiencing this
+ with, but we get a GHC panic with a small/not-doing-anything-crazy
+ codebase:~~

New description:

 **Update**: I've been able to provide a much simpler test case for this
 error:

 Broken.hs:

 {{{
 #!haskell
 {-# LANGUAGE OverloadedStrings #-}

 module Broken (breaks) where

 import Database.PostgreSQL.Simple.Types (Query(..))

 breaks :: [(Query, Query)]
 breaks = [
     ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   , ("query", "query")
   ]
 }}}

 broken.cabal:

 {{{
 name:                broken
 version:             0.1.0.0
 build-type:          Simple
 cabal-version:       >=1.10

 library
   exposed-modules:
     Broken
   other-extensions:
       OverloadedStrings
   build-depends:
       base
   --  >=4.9 && <4.10
     , postgresql-simple
   --  >=0.5 && <0.6
   default-language:    Haskell2010
 }}}

 `cabal install broken.cabal` results in:

 {{{
 ghc: panic! (the 'impossible' happened)
   (GHC version 8.0.2 for x86_64-unknown-linux):
         Simplifier ticks exhausted
   When trying UnfoldingDone ord
   To increase the limit, use -fsimpl-tick-factor=N (default 100)
   If you need to do this, let GHC HQ know, and what factor you needed
   To see detailed counts use -ddump-simpl-stats
   Total ticks: 20731

 Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
 }}}

 ----

 ----

 **Older info:**


 ~~This is unfortunately a closed-source codebase I'm experiencing this
 with, but we get a GHC panic with a small/not-doing-anything-crazy
 codebase:~~


 {{{

 ghc: panic! (the 'impossible' happened)
   (GHC version 8.0.2 for x86_64-unknown-linux):
         Simplifier ticks exhausted
   When trying RuleFired Class op return
   To increase the limit, use -fsimpl-tick-factor=N (default 100)
   If you need to do this, let GHC HQ know, and what factor you needed
   To see detailed counts use -ddump-simpl-stats
   Total ticks: 118123

 }}}

 When upping to `-fsimpl-tick-factor=150`, the error is a little different:

 {{{
 ghc: panic! (the 'impossible' happened)
   (GHC version 8.0.2 for x86_64-unknown-linux):
         Simplifier ticks exhausted
   When trying UnfoldingDone $
   To increase the limit, use -fsimpl-tick-factor=N (default 100)
   If you need to do this, let GHC HQ know, and what factor you needed
   To see detailed counts use -ddump-simpl-stats
   Total ticks: 177190
 }}}

 Upping to 200 makes the issue go away.


 We're building with

 `ghc-options: -fhpc`

 Before each build, we remove all .tix files and the .hpc directory

 At the point this error fires, we're compiling the 6th module of 9. The
 first 6 modules to compile only have a total of 635 lines of code.

 To address issues I've seen in other similar tickets:
   - There are no recursive module imports
   - We don't use any `{-# INLINE #-}` or similar pragmas
   - There is no Template Haskell other than a `makeLenses ''App` for a
 small Snaplet.
   - We don't have any "very"/exponentially recursive code
   - We don't use any unboxed tuples (there *is* ST code in a module that's
 compiled, but not the one ghc panics on)
   - We don't use type families
   - We don't use TypeRep or Typeable
   - We don't use Generic

 When this error occurs, it fails on a module which has very little code in
 it. It's mainly a list of ~200-300 Query[0] values, using
 OverloadedStrings. I notice Query's `mappend`, which we use, is `INLINE`d.

 Please let me know if I can provide more detail!

 [0] http://hackage.haskell.org/package/postgresql-simple-0.5.3.0/docs
 /Database-PostgreSQL-Simple-Types.html#t:Query

--

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


More information about the ghc-tickets mailing list