#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

Reply via email to