#4012: Compilation results are not deterministic
-------------------------------+--------------------------------------------
Reporter: kili | Owner:
Type: bug | Status: new
Priority: low | Milestone: 7.6.1
Component: Compiler | Version: 6.12.2
Resolution: | Keywords:
Os: Unknown/Multiple | Architecture: Unknown/Multiple
Failure: Other | Difficulty: Difficult (2-5 days)
Testcase: | Blockedby:
Blocking: | Related:
-------------------------------+--------------------------------------------
Comment(by nomeata):
This has bit us again with 7.4.1. I forgot about this issue and we built
lots of libraries against the first upload of GHC 7.4.1 (built with
7.0.4), all of which will have to be rebuild after the next minor GHC
upload, because that will be built with 7.4.1 and the base API will likely
change again.
This is the interface diff causing the ABI change in base, in case anybody
wonders:
{{{
/usr/lib/ghc/base-4.5.0.0/System/Posix/Internals.hi
--- /dev/fd/63 2012-02-10 20:33:16.717639938 +0000
+++ /dev/fd/62 2012-02-10 20:33:16.717639938 +0000
@@ -5,11 +5,11 @@
Way: Wanted [],
got []
interface base:System.Posix.Internals 7041
- interface hash: fef49c410428b674b72ebd8b1a93bd62
- ABI hash: 33b2adf3f92d97c87fbcbd52d7f22781
+ interface hash: 13159d537315369ddfe00efa59167f8a
+ ABI hash: fe56115a605d2758561d089b972bb8bb
export-list hash: 83b224804aef34838bb7767a01e8aaa7
orphan hash: 693e9af84d3dfcc71e640e005bdc5e2e
- flag hash: 28bf87c2d7df91e45dad874fc0a5931f
+ flag hash: 865402a98b08183763ca20b5e9837ae0
used TH splices: False
where
exports:
@@ -241,7 +241,7 @@
import -/ integer-gmp:GHC.Integer.Type 254721fe3c053c778036ed1a1fa4248d
addDependentFile "libraries/base/include/HsBaseConfig.h"
addDependentFile "libraries/base/dist-
install/build/autogen/cabal_macros.h"
-3e0a4be3b609e3ac62226d26fd8dbfa2
+9e62726eeeec5155bee7f03712b80c79
$wa :: GHC.Prim.Int#
-> GHC.Prim.State# GHC.Prim.RealWorld
-> (# GHC.Prim.State# GHC.Prim.RealWorld, GHC.IO.IOMode.IOMode
#)
@@ -258,7 +258,7 @@
System.Posix.Internals.fdGetMode3
System.Posix.Internals.fdGetMode2
(\ ds2 :: GHC.Prim.State# GHC.Prim.RealWorld ->
- case {__pkg_ccall base ghc_wrapper_d2ju_fcntl
GHC.Prim.Int#
+ case {__pkg_ccall base ghc_wrapper_d2jn_fcntl
GHC.Prim.Int#
-> GHC.Prim.Int#
-> GHC.Prim.State#
GHC.Prim.RealWorld
@@ -386,7 +386,7 @@
0
->
System.Posix.Internals.fileType2
w } } } } } } } } } }
} }) -}
-178f30c6a50e12552309d6f35e96cfa3
+1e8eed47078d0056cc7209ae4be4cd83
$wa2 :: GHC.Prim.Int#
-> GHC.Prim.State# GHC.Prim.RealWorld
-> (# GHC.Prim.State# GHC.Prim.RealWorld, () #)
@@ -404,7 +404,7 @@
GHC.Prim.RealWorld,
GHC.Prim.Int# #)}
GHC.Prim.realWorld# of wild1 { (#,#) ds2 ds3 ->
- case {__pkg_ccall base ghc_wrapper_d2ji_fcntl
GHC.Prim.Int#
+ case {__pkg_ccall base ghc_wrapper_d2jb_fcntl
GHC.Prim.Int#
->
GHC.Prim.Int#
->
GHC.Prim.Int#
->
GHC.Prim.State#
@@ -440,7 +440,7 @@
(GHC.Types.NTCo:IO (Refl
Foreign.C.Types.CInt))
ds6 of wild5 { (#,#) new_s1 a76 ->
(# new_s1, GHC.Tuple.() #) } } } } } }) -}
-20c72f17c3f40d20ed52caaaa7a2c116
+ce1394a8e53df017e302d2cc305d0231
$wa3 :: GHC.Prim.Int#
-> GHC.Types.Bool
-> GHC.Prim.State# GHC.Prim.RealWorld
@@ -459,7 +459,7 @@
System.Posix.Internals.fdGetMode3
System.Posix.Internals.setNonBlockingFD3
(\ ds2 :: GHC.Prim.State# GHC.Prim.RealWorld ->
- case {__pkg_ccall base ghc_wrapper_d2ju_fcntl
GHC.Prim.Int#
+ case {__pkg_ccall base ghc_wrapper_d2jn_fcntl
GHC.Prim.Int#
-> GHC.Prim.Int#
-> GHC.Prim.State#
GHC.Prim.RealWorld
@@ -494,7 +494,7 @@
GHC.Prim.RealWorld,
GHC.Prim.Int# #)}
GHC.Prim.realWorld# of wild6 { (#,#)
ds2 ds3 ->
- case {__pkg_ccall base
ghc_wrapper_d2ji_fcntl GHC.Prim.Int#
+ case {__pkg_ccall base
ghc_wrapper_d2jb_fcntl GHC.Prim.Int#
-> GHC.Prim.Int#
-> GHC.Prim.Int#
-> GHC.Prim.State#
@@ -530,7 +530,7 @@
GHC.Prim.RealWorld,
GHC.Prim.Int# #)}
GHC.Prim.realWorld# of wild6 { (#,#)
ds4 ds5 ->
- case {__pkg_ccall base
ghc_wrapper_d2ji_fcntl GHC.Prim.Int#
+ case {__pkg_ccall base
ghc_wrapper_d2jb_fcntl GHC.Prim.Int#
-> GHC.Prim.Int#
-> GHC.Prim.Int#
-> GHC.Prim.State#
@@ -751,7 +751,7 @@
((->)
(Sym (Foreign.C.Types.NTCo:CInt))
(GHC.Types.IO (Sym
(Foreign.C.Types.NTCo:CInt))))) -}
-285fd75770912c1d8f7839e3a5f7913c
+5f043b97e154508a95f4d6814442f737
c_fcntl_lock :: Foreign.C.Types.CInt
-> Foreign.C.Types.CInt
-> GHC.Ptr.Ptr System.Posix.Internals.CFLock
@@ -765,7 +765,7 @@
case ds1 of ds5 { GHC.Int.I32# ds6 ->
case ds2 of ds7 { GHC.Ptr.Ptr ds8 ->
(\ ds9 :: GHC.Prim.State# GHC.Prim.RealWorld ->
- case {__pkg_ccall base ghc_wrapper_d2j3_fcntl
GHC.Prim.Int#
+ case {__pkg_ccall base ghc_wrapper_d2iW_fcntl
GHC.Prim.Int#
->
GHC.Prim.Int#
->
GHC.Prim.Addr#
->
GHC.Prim.State#
@@ -788,7 +788,7 @@
((->)
(Refl (GHC.Ptr.Ptr
System.Posix.Internals.CFLock))
(GHC.Types.IO (Sym
(Foreign.C.Types.NTCo:CInt)))))) -}
-344994480e335140ee30d5da0c864863
+f98068efddbcdfb5e3350b8ad3fa7be6
c_fcntl_read :: Foreign.C.Types.CInt
-> Foreign.C.Types.CInt
-> GHC.Types.IO Foreign.C.Types.CInt
@@ -798,7 +798,7 @@
case ds of ds2 { GHC.Int.I32# ds3 ->
case ds1 of ds4 { GHC.Int.I32# ds5 ->
(\ ds6 :: GHC.Prim.State# GHC.Prim.RealWorld ->
- case {__pkg_ccall base ghc_wrapper_d2ju_fcntl
GHC.Prim.Int#
+ case {__pkg_ccall base ghc_wrapper_d2jn_fcntl
GHC.Prim.Int#
->
GHC.Prim.Int#
->
GHC.Prim.State#
GHC.Prim.RealWorld
@@ -817,7 +817,7 @@
((->)
(Sym (Foreign.C.Types.NTCo:CInt))
(GHC.Types.IO (Sym
(Foreign.C.Types.NTCo:CInt))))) -}
-6387e106fea1f6634ffe8fe759bd7748
+c8ec806642726c5ab7f4c951173d88ac
c_fcntl_write :: Foreign.C.Types.CInt
-> Foreign.C.Types.CInt
-> Foreign.C.Types.CLong
@@ -829,7 +829,7 @@
case ds1 of ds5 { GHC.Int.I32# ds6 ->
case ds2 of ds7 { GHC.Int.I64# ds8 ->
(\ ds9 :: GHC.Prim.State# GHC.Prim.RealWorld ->
- case {__pkg_ccall base ghc_wrapper_d2ji_fcntl
GHC.Prim.Int#
+ case {__pkg_ccall base ghc_wrapper_d2jb_fcntl
GHC.Prim.Int#
->
GHC.Prim.Int#
->
GHC.Prim.Int#
->
GHC.Prim.State#
@@ -1584,7 +1584,7 @@
((->)
(Refl (GHC.Ptr.Ptr Foreign.C.Types.CChar))
(GHC.Types.IO (Sym (Foreign.C.Types.NTCo:CInt))))
-}
-b6e75b90c0bc4bc5d2e2ae1b63b9846f
+236fe7b0bd958dd442a1f699d1345485
c_utime :: Foreign.C.String.CString
-> GHC.Ptr.Ptr System.Posix.Internals.CUtimbuf
-> GHC.Types.IO Foreign.C.Types.CInt
@@ -1595,7 +1595,7 @@
case ds of ds2 { GHC.Ptr.Ptr ds3 ->
case ds1 of ds4 { GHC.Ptr.Ptr ds5 ->
(\ ds6 :: GHC.Prim.State# GHC.Prim.RealWorld ->
- case {__pkg_ccall base ghc_wrapper_d2hj_utime
GHC.Prim.Addr#
+ case {__pkg_ccall base ghc_wrapper_d2hc_utime
GHC.Prim.Addr#
->
GHC.Prim.Addr#
->
GHC.Prim.State#
GHC.Prim.RealWorld
@@ -1931,7 +1931,7 @@
(Foreign.C.Types.NTCo:CInt) of wild {
GHC.Int.I32# a76 ->
case a76 of wild1 {
DEFAULT -> GHC.Types.False (-1) -> GHC.Types.True }
}) -}
/usr/lib/ghc/base-4.5.0.0/Control/Concurrent.hi
--- /dev/fd/63 2012-02-10 20:33:24.365677867 +0000
+++ /dev/fd/62 2012-02-10 20:33:24.365677867 +0000
@@ -5,11 +5,11 @@
Way: Wanted [],
got []
interface base:Control.Concurrent 7041
- interface hash: 859a60ba0f58963d0b32951e150a9384
- ABI hash: ae249f19a927403afe6459ced1ed82bd
+ interface hash: bbbd6db6b81349eeb98d6de1d9533e0e
+ ABI hash: a2da1fbff0edb4b1499650aa0180adeb
export-list hash: 43716dbfa877e75f4e9112114a6a1572
orphan hash: 693e9af84d3dfcc71e640e005bdc5e2e
- flag hash: 44b3db9df460d6cd34b4094fa836f3ef
+ flag hash: 9d38727ed6a9e7ba8d387df844cc1d1e
used TH splices: False
where
exports:
@@ -174,7 +174,7 @@
otherwise 82850e7a148d17e005ebe89173cad100
import -/ GHC.Conc 62a874d9e31bc9eb426ba181adbd36a1
exports: 7f1de5b156bcfc21b036b8be089d0862
-import -/ GHC.Conc.IO 9c0a53bd8477f330b48bd95ab54465be
+import -/ GHC.Conc.IO a46105f75fe740b6d84dba2a24195977
threadDelay 3f2ea80f962aa726a69f0a26c2cd72e8
threadWaitRead ee2b193ffe18e7cc4e8ed3b078e64f0c
threadWaitWrite 892414941939665c2ba67b0eb12ffb9b
@@ -238,6 +238,16 @@
import -/ ghc-prim:GHC.Classes 9f526208b19b2511259880485f6b7413
import -/ ghc-prim:GHC.Types d58bb266a5f6fd38ade7006bcfc6ede5
addDependentFile "libraries/base/dist-
install/build/autogen/cabal_macros.h"
+0909aa1928600224faf9e000c5f6b0e0
+ $fforkOS_entry_a1T0 :: GHC.Stable.StablePtr (GHC.Types.IO ())
+ -> GHC.Types.IO ()
+ {- Arity: 2, HasNoCafRefs, Strictness: U(L)L,
+ Unfolding: InlineRule (0, True, True)
+ Control.Concurrent.$fforkOS_entry_a1T1
+ `cast`
+ ((->)
+ (Refl (GHC.Stable.StablePtr (GHC.Types.IO ())))
+ (Sym (GHC.Types.NTCo:IO (Refl ())))) -}
3ec1a60cf71f47d982cf274d264b867d
$fforkOS_entry_a1T1 :: GHC.Stable.StablePtr (GHC.Types.IO ())
-> GHC.Prim.State# GHC.Prim.RealWorld
@@ -252,16 +262,6 @@
sp
eta of wild1 { (#,#) new_s a ->
a `cast` (GHC.Types.NTCo:IO (Refl ())) new_s } }) -}
-cf9f1b73372486eb748c4c2a9120bf5b
- $fforkOS_entry_a1T7 :: GHC.Stable.StablePtr (GHC.Types.IO ())
- -> GHC.Types.IO ()
- {- Arity: 2, HasNoCafRefs, Strictness: U(L)L,
- Unfolding: InlineRule (0, True, True)
- Control.Concurrent.$fforkOS_entry_a1T1
- `cast`
- ((->)
- (Refl (GHC.Stable.StablePtr (GHC.Types.IO ())))
- (Sym (GHC.Types.NTCo:IO (Refl ())))) -}
fcb1cef8d2a42a26479f83226cc08633
type Buffer a
= (GHC.MVar.MVar (GHC.MVar.MVar [a]), Control.Concurrent.QSem.QSem)
}}}
And similarly in /usr/lib/ghc/base-4.5.0.0/GHC/IO/Handle/Internals.hi:
{{{
@@ -2181,7 +2181,7 @@
{- Arity: 3, HasNoCafRefs, Strictness: SU(LLLLLL)L,
Inline: INLINE[0],
Unfolding: Worker(ext0: GHC.IO.Handle.Internals.$wa3 (arity 3) -}
-"SC:a_s31q0" [ALWAYS] forall @ dev
+"SC:a_s31j0" [ALWAYS] forall @ dev
@ enc_state
@ dec_state
sc :: GHC.IO.Device.IODevice dev
}}}
Maybe the hashes over the inlining expressions could be made independent
of the names, by applying some normalization before hashing the
expression?
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4012#comment:15>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs