#5920: stack overflow in strict function depending on return type
---------------------------------+------------------------------------------
Reporter: ben0x539 | Owner:
Type: bug | Status: new
Priority: normal | Milestone: 7.6.1
Component: Compiler | Version: 7.4.1
Keywords: | Os: Unknown/Multiple
Architecture: Unknown/Multiple | Failure: Runtime crash
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: |
---------------------------------+------------------------------------------
Comment(by pcapriotti):
Here's my understanding of what is going on here:
* pattern-matching causes a join point to be generated
* a dummy RealWorld argument is added to the join point (see #3403)
* during w/w construction, the RealWorld argument is removed from the
worker, effectively undoing the previous step
* the resulting nested function doesn't have any value arguments, so it's
not CPR-transformed
* the final function is CPR'd, but its nested helper (the join point) is
not, resulting in non-tail recursive code.
A possible solution is to prevent removing absent RealWorld arguments from
workers (see attached patch). It doesn't seem necessary to remove them at
that stage, anyway, since they shouldn't have any impact on the generated
code.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5920#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs