[GHC] #4012: Compilation results are not deterministic

GHC ghc-devs at haskell.org
Sun Dec 14 20:10:36 UTC 2014


#4012: Compilation results are not deterministic
-------------------------------------+-------------------------------------
              Reporter:  kili        |            Owner:  Fuuzetsu
                  Type:  bug         |           Status:  new
              Priority:  normal      |        Milestone:  7.10.1
             Component:  Compiler    |          Version:  6.12.2
            Resolution:              |         Keywords:
      Operating System:              |     Architecture:  Unknown/Multiple
  Unknown/Multiple                   |       Difficulty:  Difficult (2-5
       Type of failure:  Other       |  days)
             Test Case:              |       Blocked By:
              Blocking:              |  Related Tickets:
Differential Revisions:              |
-------------------------------------+-------------------------------------

Comment (by Fuuzetsu):

 I got a test case: I took http-client, a library that was notorious for
 non-deterministic ABIs, found a small module without any internal imports
 and stripped it down.

 It seems that this can be exhibited by nearly any compilation as long as
 you are compiling more than one module at once: {{{ghc -O -j2 Foo}}} will,
 AFAICT, for the simple case, result in the same ABI pretty much always.
 {{{ghc -O -j2 Foo Bar}}} will often not, but how often depends on the
 content of each. {{{Foo}}} and {{{Bar}}} can be completely independent,
 not importing each other. Probably going to be looking at uniqs and that
 {{{unsafeInterleaveIO}}} (thanks to Duncan for pointing it out) but needed
 a test case first.

 I attach two modules, {{{T}}} and {{{S}}}: they are not ‘trivial’ modules
 because with those the ABI hash changes much less frequently. These
 modules only import the libraries that ship with GHC so it is easy to hack
 on. Follows a sample session with 7.8.3:

 {{{
 [shana at lenalee:~/programming/ghc-nondeterminism]$ nix-shell -p
 haskellPackages.ghc --pure

 [nix-shell:~/programming/ghc-nondeterminism]$ ghc -fforce-recomp -O -j2
 -outputdir tmpdir -odir tmpdir -hidir tmpdir -stubdir tmpdir T S && ghc
 --show-iface tmpdir/T.hi | grep ABI
 [1 of 2] Compiling S                ( S.hs, tmpdir/S.o )
 [2 of 2] Compiling T                ( T.hs, tmpdir/T.o )
   ABI hash: 801be37df642d815fae5f74aa0f56580

 [nix-shell:~/programming/ghc-nondeterminism]$ ghc -fforce-recomp -O -j2
 -outputdir tmpdir -odir tmpdir -hidir tmpdir -stubdir tmpdir T S && ghc
 --show-iface tmpdir/T.hi | grep ABI
 [1 of 2] Compiling S                ( S.hs, tmpdir/S.o )
 [2 of 2] Compiling T                ( T.hs, tmpdir/T.o )
   ABI hash: 59cd140ecf48d626231ac3f8ecb5291e

 [nix-shell:~/programming/ghc-nondeterminism]$ ghc -fforce-recomp -O -j2
 -outputdir tmpdir -odir tmpdir -hidir tmpdir -stubdir tmpdir T S && ghc
 --show-iface tmpdir/T.hi | grep ABI
 [1 of 2] Compiling S                ( S.hs, tmpdir/S.o )
 [2 of 2] Compiling T                ( T.hs, tmpdir/T.o )
   ABI hash: 563ecab71f525a8aea21d4982ec67388

 [nix-shell:~/programming/ghc-nondeterminism]$ l
 total 44K
 drwxr-xr-x   3 shana nogroup 4.0K Dec 14 19:59 .
 drwxr-xr-x 221 shana shana    12K Dec 14 19:58 ..
 -rw-r--r--   1 shana nogroup  684 Dec 14 19:59 S.hs
 -rw-r--r--   1 shana nogroup  18K Dec 14 19:59 T.hs
 drwxr-xr-x   2 shana nogroup 4.0K Dec 14 20:03 tmpdir
 }}}

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


More information about the ghc-tickets mailing list