[GHC] #3591: A working program reports <<loop>> when compiled with -O
GHC
cvs-ghc at haskell.org
Tue Apr 3 18:14:53 CEST 2012
#3591: A working program reports <<loop>> when compiled with -O
-----------------------------------------+----------------------------------
Reporter: blamario | Owner: igloo
Type: merge | Status: closed
Priority: normal | Milestone: 6.12.1
Component: Compiler | Version: 6.10.4
Resolution: fixed | Keywords:
Os: Linux | Architecture: x86_64 (amd64)
Failure: None/Unknown | Difficulty: Unknown
Testcase: simplCore/should_run/T3591 | Blockedby:
Blocking: | Related:
-----------------------------------------+----------------------------------
Comment(by dimitris):
I know it's a closed ticket but I managed to break it somehow working on a
new constraint solver branch. The problem is that I have no clue about
what we should expect to see as output for this program. Currently the
expected output is:
{{{
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
liftOut
fmap Either
fmap RightF
fmap await
bounce start
bounce end
liftOut
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
liftOut
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
fmap yield
fmap yield
bounce start
bounce end
bounce start
bounce end
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
fmap await
fmap await
liftOut
fmap Either
fmap RightF
fmap await
bounce start
bounce end
bounce start
bounce end
liftOut
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
fmap yield
fmap yield
bounce start
bounce end
bounce start
bounce end
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
fmap await
fmap await
liftOut
bounce start
bounce end
bounce start
bounce end
liftOut
bounce start
bounce end
liftOut
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
fmap yield
fmap yield
bounce start
bounce end
bounce start
bounce end
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
fmap await
fmap await
bounce start
bounce end
bounce start
bounce end
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
}}}
And I am getting:
{{{
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap await
fmap await
bounce start
bounce end
liftOut
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
liftOut
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
fmap yield
fmap yield
bounce start
bounce end
bounce start
bounce end
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
fmap await
fmap await
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap await
fmap await
bounce start
bounce end
bounce start
bounce end
liftOut
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
fmap yield
fmap yield
bounce start
bounce end
bounce start
bounce end
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
fmap await
fmap await
liftOut
bounce start
bounce end
bounce start
bounce end
liftOut
bounce start
bounce end
liftOut
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
fmap yield
fmap yield
bounce start
bounce end
bounce start
bounce end
liftOut
inject suspend
fmap Either
fmap LeftF
fmap Either
fmap Either
liftFunctor other
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap RightF
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
fmap await
fmap await
bounce start
bounce end
bounce start
bounce end
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap LeftF
fmap LeftF
fmap LeftF
fmap yield
fmap yield
fmap yield
bounce start
bounce end
liftOut
inject suspend
liftFunctor id
calling fmap
fmap Either
poking a
fmap RightF
fmap Either
fmap RightF
fmap Either
fmap Either
fmap Either
fmap RightF
fmap RightF
fmap RightF
fmap await
fmap await
fmap await
bounce start
bounce end
liftOut
}}}
How can we tell if something broke? Should we be expecting an identical
'trace'? The documented problem of this bug <<loop>> does not happen but
the traces are not identical. Any help from the original submitter?
Thanks!
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3591#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list