Ticks exhausted with 8.0.2
- *Update 2**: repro case with fewer dependencies:
Broken.hs:
{-# LANGUAGE OverloadedStrings #-}
module Broken (breaks) where
import Data.ByteString
import Data.ByteString.Builder
import Data.ByteString.Lazy (toStrict)
import Data.String (IsString(..))
newtype Query = Query ByteString
toByteString :: Builder -> ByteString
toByteString x = toStrict (toLazyByteString x)
instance IsString Query where
fromString = Query . toByteString . stringUtf8
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
, bytestring
, bytestring-builder
default-language: Haskell2010
Errors with:
ghc: panic! (the 'impossible' happened)
(GHC version 8.0.2 for x86_64-unknown-linux):
Simplifier ticks exhausted
When trying UnfoldingDone pokeN_a1Db
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: 22484
- *Update 1**: I've been able to provide a much simpler test case for this error:
Broken.hs:
{-# 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!