Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/2f08f709cfdace23a4e32d80a57af349f7cc785a

>---------------------------------------------------------------

commit 2f08f709cfdace23a4e32d80a57af349f7cc785a
Author: Simon Peyton Jones <[email protected]>
Date:   Thu Aug 23 16:35:55 2012 +0100

    Don't specialise on implicit-parameter arguments in Specalise
    
    This is a fix for Trac #7101

>---------------------------------------------------------------

 compiler/specialise/Specialise.lhs |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/compiler/specialise/Specialise.lhs 
b/compiler/specialise/Specialise.lhs
index 6892c9c..4307ff7 100644
--- a/compiler/specialise/Specialise.lhs
+++ b/compiler/specialise/Specialise.lhs
@@ -1573,10 +1573,7 @@ mkCallUDs :: Id -> [CoreExpr] -> UsageDetails
 mkCallUDs f args
   | not (want_calls_for f)  -- Imported from elsewhere
   || null theta             -- Not overloaded
-  || not (all isClassPred theta)
-        -- Only specialise if all overloading is on class params.
-        -- In ptic, with implicit params, the type args
-        --  *don't* say what the value of the implicit param is!
+  || not (all type_determines_value theta)
   || not (spec_tys `lengthIs` n_tyvars)
   || not ( dicts   `lengthIs` n_dicts)
   || not (any interestingDict dicts)    -- Note [Interesting dictionary 
arguments]
@@ -1603,6 +1600,13 @@ mkCallUDs f args
         | otherwise                             = Nothing
 
     want_calls_for f = isLocalId f || isInlinablePragma (idInlinePragma f)
+
+    type_determines_value pred = isClassPred pred && not (isIPPred pred)
+        -- Only specialise if all overloading is on non-IP *class* params,
+        -- because these are the ones whose *type* determines their *value*.
+        -- In ptic, with implicit params, the type args
+        --  *don't* say what the value of the implicit param is!
+        -- See Trac #7101
 \end{code}
 
 Note [Interesting dictionary arguments]



_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to