With my as-yet-uncommitted changes to the demand analyzer, code got
generated for some programs that caused this assertion to fail. The
transformation I was doing was correct; it was the assertion that
wasn't. So, the assertion is removed.
This is actually Simon PJ's patch rather than mine, but I noticed that
it wasn't checked in and it seems completely safe to do so.
if we enter the same thunk multiple times, so the optimisation
of jumping directly to the entry code is still valid. --SDM
-}
if we enter the same thunk multiple times, so the optimisation
of jumping directly to the entry code is still valid. --SDM
-}
- = ASSERT2( n_args == 0, ppr name ) EnterIt
+ = EnterIt
+ -- We used to have ASSERT( n_args == 0 ), but actually it is
+ -- possible for the optimiser to generate
+ -- let bot :: Int = error Int "urk"
+ -- in (bot `cast` unsafeCoerce Int (Int -> Int)) 3
+ -- This happens as a result of the case-of-error transformation
+ -- So the right thing to do is just to enter the thing
| otherwise -- Jump direct to code for single-entry thunks
= ASSERT( n_args == 0 )
| otherwise -- Jump direct to code for single-entry thunks
= ASSERT( n_args == 0 )