Remove bogus assertion in getCallMethod
authorKirsten Chevalier <chevalier@alum.wellesley.edu>
Thu, 11 Jan 2007 17:25:01 +0000 (17:25 +0000)
committerKirsten Chevalier <chevalier@alum.wellesley.edu>
Thu, 11 Jan 2007 17:25:01 +0000 (17:25 +0000)
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.

compiler/codeGen/ClosureInfo.lhs

index e631989..27aed3a 100644 (file)
@@ -594,7 +594,13 @@ getCallMethod this_pkg name (LFThunk _ _ updatable std_form_info is_fun) n_args
         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 )