
#12433: GHCi produces incorrect results when evaluating with compiled code -------------------------------------+------------------------------------- Reporter: diatchki | Owner: Type: bug | Status: new Priority: highest | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: ghci, dynamic | linking, compiled code Operating System: Linux | Architecture: x86_64 Type of failure: Incorrect result | (amd64) at runtime | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by rwbarton): So, if the heap check should happen to fail, the R1 that is passed to `stg_gc_unbx_r1` is not actually the value returned by `$wcclass`, but rather some other value (the offset from the jump table start to the branch that was taken). Then when the GC finishes and returns to `c2s5`, it looks as though `$wcclass` returned that value, which causes the error you saw. I haven't looked at the code yet to determine who is at fault--maybe liveness calculation does not flow through `switch` statements properly, or maybe the NCG is clobbering registers that it isn't entitled to clobber. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12433#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler