#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 Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs