barbies icon indicating copy to clipboard operation
barbies copied to clipboard

Pathological compilation behavior with GHC 9.8.1

Open m4dc4p opened this issue 1 year ago • 2 comments
trafficstars

I've found that a module using barbies takes exponentially longer to compile under GHC 9.8 as I add fields to a data type.

The repo at https://github.com/m4dc4p/ghc98-bug demonstrates the problem. If you have GHC and cabal installed, you should be able to build with just cabal build:

$ cabal build
Warning: The package list for 'hackage.haskell.org' is 19 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
Build profile: -w ghc-9.8.1 -O1
In order, the following will be built (use -v for more details):
 - ghc98-bug-0.0.0 (lib) (first run)
Configuring library for ghc98-bug-0.0.0..
Preprocessing library for ghc98-bug-0.0.0..
Building library for ghc98-bug-0.0.0..

Uncommenting fields on the HDKType data constructor cause compilation to take longer and longer (and use more memory):

  • 1 field - 2.5s, 198MB peak
  • 2 fields - 7s, 1.0GB peak
  • 3 fields - 26.8s, 4.6GB peak
  • 4 fields - 82.9s, 14.5GB peak

Its worth noting the removing the deriving instance for Eq causes the problem to go away (but, of course, that instance is something we want). Also worth noting that with -O0, the problem goes away. I have not narrowed down which optimization is the problem.

m4dc4p avatar Feb 21 '24 21:02 m4dc4p

Thanks for flagging! Just to confirm, this is a regression, correct? Is there a ghc issue tracking this?

jcpetruzza avatar Feb 21 '24 22:02 jcpetruzza

Yeh, under 9.6 this does not happen. I reported to GHC just after this as well - https://gitlab.haskell.org/ghc/ghc/-/issues/24462.

m4dc4p avatar Feb 21 '24 22:02 m4dc4p