
#9583: Simplifier ticks exhausted while compiling Cabal HEAD -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: bug | Status: new Priority: highest | Milestone: Component: Compiler | Version: 7.9 Resolution: | Keywords: Operating System: | Architecture: Unknown/Multiple Unknown/Multiple | Difficulty: Unknown Type of failure: Compile- | Blocked By: time crash | Related Tickets: Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by JohnWiegley): Simon and I had a look at this, and we found a few more data points: 1. Manually implementing {{{get}}} and {{{put}}} for the instance, even if just to copy the default definitions, causes the test case above to pass. 2. The following data type also reproduces the problem: {{{ data T = A T T T T T T T T T T T T | B T deriving (Data, Typeable, Generic) }}} 3. If you implement {{{get}}} for the instance, but not {{{put}}}, the error still occurs; but the converse works. 4. If you set {{{put = gdmput}}}, and then define it in its own module, marking it INLINE works, but INLINEABLE fails: {{{ gdmput :: (Generic t, GBinary (Rep t)) => t -> Put gdmput = gput . from {-# INLINABLE gdmput #-} }}} 5. Displaying inlining information with {{{-ddump-inlinings -ddump-rule- firings}}} shows that after the first few unfoldings, the following repeats continually up until the failure. Increasing the tick cause simply causes more of this occurrence to display: {{{ Rule fired: Class op gput Rule fired: Class op gput Rule fired: Class op gput Rule fired: Class op gput Inlining done: Data.Binary.Generic.unTagged Inlining done: Data.Binary.Generic.unTagged1 Inlining done: GHC.Base.id Inlining done: GHC.Word.$fOrdWord64_$c<= Inlining done: GHC.Word.$fNumWord64_$c- Inlining done: Data.Binary.Generic.$fSumSizeM1_$csumSize Inlining done: Data.Binary.Generic.$fSumSizeM1_$csumSize Rule fired: plusWord# Inlining done: GHC.Word.$fBitsWord64_$cfromInteger Rule fired: integerToWord Rule fired: minusWord# Rule fired: leWord# Rule fired: tagToEnum# Inlining done: GHC.Word.$fBitsWord8_$cfromInteger Rule fired: integerToWord Rule fired: narrow8Word# Inlining done: Data.Binary.Generic.$fSumSizeM1_$csumSize Inlining done: Data.Binary.Generic.$fSumSizeM1_$csumSize Rule fired: plusWord# Inlining done: GHC.Base.id Rule fired: narrow8Word# Inlining done: GHC.Word.$fBitsWord8_$cshiftR Rule fired: >=# Rule fired: tagToEnum# Rule fired: uncheckedShiftRL# Rule fired: Class op putSum Inlining done: Data.Binary.Put.$fApplicativePutM_$c*> Inlining done: Data.Binary.Put.$fApplicativePutM2 Rule fired: Class op put Inlining done: Data.Binary.Put.putWord8 Inlining done: GHC.Base.$ Inlining done: GHC.Base.returnIO Inlining done: GHC.Base.returnIO1 Inlining done: GHC.Base.bindIO Inlining done: GHC.Base.bindIO1 Inlining done: GHC.Base.flip Inlining done: Foreign.Storable.$fStorableWord8_$cpoke Inlining done: Foreign.Storable.$fStorableWord19 Rule fired: Class op gput Inlining done: GHC.Word.$fNumWord8_$c+ Rule fired: plusWord# Rule fired: narrow8Word# Inlining done: GHC.Word.$fNumWord8_$c- Rule fired: minusWord# Rule fired: narrow8Word# Rule fired: Class op putSum Inlining done: Data.Binary.Put.$fApplicativePutM_$c*> Inlining done: Data.Binary.Put.$fApplicativePutM2 Rule fired: Class op put Inlining done: Data.Binary.Put.putWord8 Inlining done: GHC.Base.$ Inlining done: GHC.Base.returnIO Inlining done: GHC.Base.returnIO1 Inlining done: GHC.Base.bindIO Inlining done: GHC.Base.bindIO1 Inlining done: GHC.Base.flip Inlining done: Foreign.Storable.$fStorableWord8_$cpoke Inlining done: Foreign.Storable.$fStorableWord19 }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9583#comment:6 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler