[GHC] #14521: Infinite loop at runtime when either : a given function is not marked INLINE, or functions are stored in strict field (was: Infinite loop at runtime when a given function is not marked INLINE)

GHC ghc-devs at haskell.org
Fri Nov 24 12:07:36 UTC 2017


#14521: Infinite loop at runtime when either : a given function is not marked
INLINE, or functions are stored in strict field
-------------------------------------+-------------------------------------
        Reporter:  OlivierSohn       |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.2
      Resolution:                    |             Keywords:
Operating System:  MacOS X           |         Architecture:
 Type of failure:  Incorrect result  |  Unknown/Multiple
  at runtime                         |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by OlivierSohn:

Old description:

> Hello,
>
> in https://github.com/OlivierSohn/hamazed/issues/1 I describe the
> following issue:
>
> When compiling on OSX with optimizations (`stack clean && stack build`
> with resolver `lts-9.12` (ghc 8.0.2)), the program loops infinitely (400%
> CPU, and execution is blocked) when an animation is triggered, if the
> function `Animation.animate'` is not inlined.
>
> The bug is visible at this commit :
> https://github.com/OlivierSohn/hamazed/commit/9f25223ef0502f91cd9633654bdb172f714c3920
> (to reproduce, shoot at a number in the game)
>
> The fix is the commit that follows :
> https://github.com/OlivierSohn/hamazed/commit/597619bb14974d2bbacfb284a9e276a7cf2d2f52
>
> stack version: `1.3.2, Git revision
> 3f675146590da4f3edf768b89355f798229da2a5 (4395 commits) x86_64
> hpack-0.15.0`
>
> Could this be a compiler bug?
>
> The code is available at https://github.com/OlivierSohn/hamazed
>
> I could try to create another program that reproduces the issue more
> easily (without having to play the game), just let me know if you need
> it.
>
> Thank you,
> Olivier

New description:

 Hello,

 in https://github.com/OlivierSohn/hamazed/issues/1 I describe the
 following issue:

 When compiling on OSX with optimizations (`stack clean && stack build`
 with resolver `lts-9.12` (ghc 8.0.2)), the program loops infinitely (400%
 CPU, and execution is blocked) when an animation is triggered, if the
 function `Animation.animate'` is not inlined.

 The bug is visible at this commit :
 https://github.com/OlivierSohn/hamazed/commit/9f25223ef0502f91cd9633654bdb172f714c3920
 (to reproduce, shoot at a number in the game)

 I originally fixed this behaviour by declaring the function that consumes
 the Animator record INLINE :
 https://github.com/OlivierSohn/hamazed/commit/597619bb14974d2bbacfb284a9e276a7cf2d2f52

 And later, I found that another way to fix the behaviour is to remove the
 strict annotation on the fields of the record "Animator", ie changing

 `
 data Animator a = Animator {
     _animatorPure :: !(Iteration -> (Coords -> Location) -> Tree -> Tree)
   , _animatorIO   :: !(Tree -> StepType -> Animation -> (Coords ->
 Location) -> RenderState -> IO (Maybe Animation))
   , _animatorColorFromFrame :: !(Frame -> Color8Code)
 }
 `

 to:

 `
 data Animator a = Animator {
     _animatorPure :: (Iteration -> (Coords -> Location) -> Tree -> Tree)
   , _animatorIO   :: (Tree -> StepType -> Animation -> (Coords ->
 Location) -> RenderState -> IO (Maybe Animation))
   , _animatorColorFromFrame :: (Frame -> Color8Code)
 }

 Also, here is my stack version if it matters:
 `
 stack version: `1.3.2, Git revision
 3f675146590da4f3edf768b89355f798229da2a5 (4395 commits) x86_64
 hpack-0.15.0`

 Could this be a compiler bug?

 The code is available at https://github.com/OlivierSohn/hamazed

 I could try to create another program that reproduces the issue more
 easily (without having to play the game), just let me know if you need it.

 Thank you,
 Olivier

--

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


More information about the ghc-tickets mailing list