padsproj / pads-haskell

Haskell binding for PADS
www.padsproj.org
Other
18 stars 7 forks source link

Compile-time performance problem in AI.hs #7

Open cronburg opened 7 years ago

cronburg commented 7 years ago

Since adding generation of the internal AST representation of a pads description to the output of the quasiquoter, the AI example takes significantly longer to build (minutes). Offending commit: c535c1885d09f19049deca5b12315856196ade3b

But when I try building with profiling information enabled, the build takes on the order of seconds...

cronburg commented 7 years ago

Minimal PADS example:

[pads| data Entry = Entry { host :: (Int, '.', Int, '.', Int, '.', Int) } |]

which triggers the following GHC hang / panic:

[27 of 28] Compiling Examples.AI      ( Examples/AI.hs, .stack-work/dist
xamples-tmp/Examples/AI.o )
ghc: panic! (the 'impossible' happened)
  (GHC version 8.0.2 for x86_64-unknown-linux):
        Simplifier ticks exhausted
  When trying UnfoldingDone $wlvl_sg2Ag
  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: 6861563

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

It appears to have something to do with nesting a tuple type inside of a record making it difficult for GHC to deduce the type of the entry_parseM function.