
#11487: stg_ap_pp_fast doesn't pass the argument in the arity=1 case -----------------------------------+--------------------------------- Reporter: rwbarton | Owner: gmainland Type: bug | Status: new Priority: highest | Milestone: 8.0.1 Component: Runtime System | Version: 8.0.1-rc1 Resolution: | Keywords: Operating System: Linux | Architecture: arm Type of failure: Runtime crash | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -----------------------------------+--------------------------------- Comment (by rwbarton): I think the reason that I only saw this bug with `-debug` is that the debug version of `stg_ap_ppp_fast` has extra code to print logging information when some debug flags are activated. This created enough register pressure that LLVM decided to rearrange some registers including `r8`, the ARM register that holds R2. Because `stg_ap_ppp_fast` invokes the function it calls with the R2 argument `undef`, once `r8` was clobbered, the invoked function saw the wrong value for R2, and a crash was inevitable. So here is a plan for testing for this bug, and others like it. * Add a flag `-fllvm-fill-undef-with-garbage`, and pass it when running validate. * In `Llvm.Types.ppLit`, if this flag is enabled, output `0xbbbbbbbb...` (of whatever size is needed) rather than `undef`. Then all LLVM builds should catch issues like this one. I can implement this if it sounds reasonable. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11487#comment:15 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler