possible regression in GHC 9.2.4: hang in simplifier (?) when building a test executable

Doug Burke dburke.gw at gmail.com
Tue Sep 6 13:02:27 UTC 2022


I have a test executable which will build with ghc 9.2.3 (and many
older versions) but which appears to hang with GHC 9.2.4. I have
exhausted what little I know of in debugging this, so any help in
identifying the problem would be appreciated. Unfortunately it's a
relatively large application, so the following reproducer requires
some time/disk space.

Thanks fo ryour time,
Doug

-----------------------------------------------------------------------------------------------------------------

I am on a linux machine (ubuntu 22.04) and have seen this with builds
either with stack or nix.

% git clone https://gitlab.com/dburke/swish temp
% cd temp
% git rev-parse HEAD
09c92e0fbbea9be86cac5c8e273e1d5915a9eeae

Added to get the timings, but it's not strictly necessary:

% sed -i -e "s/-Wall /-Wall -ddump-timings /" swish.cabal

First a check of a successful build (with stack, GHC 9.0.2):

% stack test --resolver lts-19.22 :test-rdfproof
... wait a while
[2 of 2] Compiling Main
*** Parser [Main]:
Parser [Main]: alloc=27576560 time=8.702
*** Renamer/typechecker [Main]:
Renamer/typechecker [Main]: alloc=61957416 time=85.052
*** Desugar [Main]:
Desugar [Main]: alloc=19485576 time=16.095
*** Simplifier [Main]:
Simplifier [Main]: alloc=1024590752 time=937.479
*** Specialise [Main]:
Specialise [Main]: alloc=49779464 time=30.480
*** Float out(FOS {Lam = Just 0,
                   Consts = True,
                   OverSatApps = False}) [Main]:
Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = False})
[Main]: alloc=243444904 time=287.934
*** Simplifier [Main]:
Simplifier [Main]: alloc=959971736 time=844.707
*** Simplifier [Main]:
Simplifier [Main]: alloc=816465992 time=727.244
*** Simplifier [Main]:
Simplifier [Main]: alloc=914290184 time=835.805
Float inwards [Main]: alloc=17448 time=0.007
Called arity analysis [Main]: alloc=19288 time=0.008
*** Float inwards [Main]:
*** Called arity analysis [Main]:
*** Simplifier [Main]:
*** Demand analysis [Main]:
Simplifier [Main]: alloc=492772800 time=396.191
Demand analysis [Main]: alloc=435384136 time=234.248
*** Constructed Product Result analysis [Main]:
Constructed Product Result analysis [Main]: alloc=67395816 time=27.498
*** Worker Wrapper binds [Main]:
Worker Wrapper binds [Main]: alloc=10456160 time=10.538
*** Simplifier [Main]:
Simplifier [Main]: alloc=675869616 time=624.538
Exitification transformation [Main]: alloc=20416 time=0.007
*** Exitification transformation [Main]:
*** Float out(FOS {Lam = Just 0,
                   Consts = True,
                   OverSatApps = True}) [Main]:
Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = True})
[Main]: alloc=212059304 time=172.872
Common sub-expression [Main]: alloc=18768 time=0.008
Float inwards [Main]: alloc=17448 time=0.006
*** Common sub-expression [Main]:
*** Float inwards [Main]:
*** Simplifier [Main]:
Simplifier [Main]: alloc=430634768 time=397.868
*** Demand analysis [Main]:
Demand analysis [Main]: alloc=144629272 time=70.451
*** CoreTidy [Main]:
CoreTidy [Main]: alloc=48438688 time=44.112
*** CorePrep [Main]:
*** CodeGen [Main]:
CorePrep [Main]: alloc=15032 time=0.012
CodeGen [Main]: alloc=1738308168 time=1051.197
*** systool:as:
systool:as: alloc=118376 time=0.481
*** initializing unit database:
initializing unit database: alloc=15393080 time=21.985
*** initializing unit database:
initializing unit database: alloc=3745512 time=2.507
*** Chasing dependencies:
*** systool:cpp:
systool:cpp: alloc=213016 time=0.552
Chasing dependencies: alloc=11345152 time=5.353
Linking .stack-work/dist/x86_64-linux-tinfo6/Cabal-3.4.1.0/build/test-rdfproof/test-rdfproof
...
...
... then it goes on to run the test
...

With 9.2.4 it will not build

%
... similar to above but with some information about the versions not
... fully tested with stack
...
*** Parser [Main]:
Parser [Main]: alloc=24346008 time=8.730
*** Renamer/typechecker [Main]:
Renamer/typechecker [Main]: alloc=58415776 time=44.077
*** Desugar [Main]:
Desugar [Main]: alloc=22148416 time=15.693
*** Simplifier [Main]:
Simplifier [Main]: alloc=651048904 time=530.123
*** Specialise [Main]:
Specialise [Main]: alloc=44412080 time=31.885
*** Float out(FOS {Lam = Just 0,
                   Consts = True,
                   OverSatApps = False}) [Main]:
Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = False})
[Main]: alloc=207753368 time=259.238
*** Simplifier [Main]:
Simplifier [Main]: alloc=599788216 time=548.107
*** Simplifier [Main]:
Simplifier [Main]: alloc=562910904 time=474.847
*** Simplifier [Main]:
Simplifier [Main]: alloc=725093584 time=643.255
Float inwards [Main]: alloc=23720 time=0.011
Called arity analysis [Main]: alloc=25856 time=0.012
*** Float inwards [Main]:
*** Called arity analysis [Main]:
*** Simplifier [Main]:


At this point it just makes my laptop fan spin faster wit h one of my
CPUs pegged at 100%, but it never seems to print anything more.

For those that prefer nix, you can try the following which shows the
same behavior (these are using the same mangled cabal file to get the
timings):

% nix-shell --argstr compiler ghc923
% cabal test test-rdfproof
...
[2 of 2] Compiling Main             ( tests/RDFProofTest.hs,
/home/dburke/rdf/temp/dist-newstyle/build/x86_64-linux/ghc-9.2.3/swish-0.10.2.0/t/test-rdfproof/build/test-rdfproof/test-rdfproof-tmp/Main.o
)
*** Parser [Main]:
Parser [Main]: alloc=25233912 time=9.910
*** Renamer/typechecker [Main]:
Renamer/typechecker [Main]: alloc=57027880 time=45.911
*** Desugar [Main]:
Desugar [Main]: alloc=21808096 time=54.569
*** Simplifier [Main]:
Simplifier [Main]: alloc=936319072 time=880.189
*** Specialise [Main]:
Specialise [Main]: alloc=41599784 time=23.425
*** Float out(FOS {Lam = Just 0,
                   Consts = True,
                   OverSatApps = False}) [Main]:
Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = False})
[Main]: alloc=204955224 time=226.189
*** Simplifier [Main]:
Simplifier [Main]: alloc=610153728 time=654.735
*** Simplifier [Main]:
Simplifier [Main]: alloc=566346328 time=549.298
*** Simplifier [Main]:
Simplifier [Main]: alloc=801330080 time=802.428
*** Float inwards [Main]:
Float inwards [Main]: alloc=23160 time=0.012
*** Called arity analysis [Main]:
Called arity analysis [Main]: alloc=25296 time=0.013
*** Simplifier [Main]:
Simplifier [Main]: alloc=423629864 time=320.611
*** Demand analysis [Main]:
Demand analysis [Main]: alloc=253018800 time=175.884
*** Constructed Product Result analysis [Main]:
Constructed Product Result analysis [Main]: alloc=74681224 time=28.675
*** Worker Wrapper binds [Main]:
Worker Wrapper binds [Main]: alloc=8622264 time=7.070
*** Simplifier [Main]:
Simplifier [Main]: alloc=598294440 time=554.802
*** Exitification transformation [Main]:
Exitification transformation [Main]: alloc=26712 time=0.013
*** Float out(FOS {Lam = Just 0,
                   Consts = True,
                   OverSatApps = True}) [Main]:
Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = True})
[Main]: alloc=179540608 time=226.938
*** Common sub-expression [Main]:
Common sub-expression [Main]: alloc=24800 time=0.014
*** Float inwards [Main]:
Float inwards [Main]: alloc=23168 time=0.010
*** Simplifier [Main]:
Simplifier [Main]: alloc=382679152 time=318.224
*** Demand analysis [Main]:
Demand analysis [Main]: alloc=84192056 time=50.989
*** CoreTidy [Main]:
CoreTidy [Main]: alloc=45347360 time=44.571
*** CorePrep [Main]:
CorePrep [Main]: alloc=34753448 time=10.917
*** CoreToStg [Main]:
CoreToStg [Main]: alloc=108293568 time=114.768
*** CodeGen [Main]:
CodeGen [Main]: alloc=1475393208 time=858.854
*** WriteIface [/home/dburke/rdf/temp/dist-newstyle/build/x86_64-linux/ghc-9.2.3/swish-0.10.2.0/t/test-rdfproof/build/test-rdfproof/test-rdfproof-tmp/Main.hi]:
WriteIface [/home/dburke/rdf/temp/dist-newstyle/build/x86_64-linux/ghc-9.2.3/swish-0.10.2.0/t/test-rdfproof/build/test-rdfproof/test-rdfproof-tmp/Main.hi]:
alloc=3732816 time=3.044
*** systool:as:
systool:as: alloc=132384 time=0.456
*** initializing unit database:
initializing unit database: alloc=7386016 time=4.306
*** initializing unit database:
initializing unit database: alloc=4000384 time=12.125
*** Chasing dependencies:
*** systool:cpp:
systool:cpp: alloc=313896 time=0.486
Chasing dependencies: alloc=12822240 time=6.459
Linking /home/dburke/rdf/temp/dist-newstyle/build/x86_64-linux/ghc-9.2.3/swish-0.10.2.0/t/test-rdfproof/build/test-rdfproof/test-rdfproof
...
...

versus

% nix-shell --argstr compiler ghc924
cabal test test-rdfproof
Warning: The package list for 'hackage.haskell.org' is 20 days old.
Run 'cabal update' to get the latest list of available packages.
Resolving dependencies...
Build profile: -w ghc-9.2.4 -O1
In order, the following will be built (use -v for more details):
 - swish-0.10.2.0 (test:test-rdfproof) (first run)
Preprocessing test suite 'test-rdfproof' for swish-0.10.2.0..
Building test suite 'test-rdfproof' for swish-0.10.2.0..
*** initializing unit database:
initializing unit database: alloc=7389248 time=4.462
*** initializing unit database:
initializing unit database: alloc=4001312 time=11.664
*** Chasing dependencies:
*** systool:cpp:
systool:cpp: alloc=319464 time=0.481
Chasing dependencies: alloc=12861208 time=6.331
[2 of 2] Compiling Main             ( tests/RDFProofTest.hs,
/home/dburke/rdf/temp/dist-newstyle/build/x86_64-linux/ghc-9.2.4/swish-0.10.2.0/t/test-rdfproof/build/test-rdfproof/test-rdfproof-tmp/Main.o
)
*** Parser [Main]:
Parser [Main]: alloc=25236056 time=23.982
*** Renamer/typechecker [Main]:
Renamer/typechecker [Main]: alloc=101830968 time=97.529
*** Desugar [Main]:
Desugar [Main]: alloc=24617072 time=19.187
*** Simplifier [Main]:
Simplifier [Main]: alloc=665051592 time=558.078
*** Specialise [Main]:
Specialise [Main]: alloc=44894576 time=30.341
*** Float out(FOS {Lam = Just 0,
                   Consts = True,
                   OverSatApps = False}) [Main]:
Float out(FOS {Lam = Just 0, Consts = True, OverSatApps = False})
[Main]: alloc=208060752 time=245.458
*** Simplifier [Main]:
Simplifier [Main]: alloc=602721856 time=555.073
*** Simplifier [Main]:
Simplifier [Main]: alloc=563887832 time=529.865
*** Simplifier [Main]:
Simplifier [Main]: alloc=727381840 time=606.367
*** Float inwards [Main]:
Float inwards [Main]: alloc=23720 time=0.012
*** Called arity analysis [Main]:
Called arity analysis [Main]: alloc=25848 time=0.012
*** Simplifier [Main]:

which again hangs


More information about the ghc-devs mailing list