Commit 777b8c4b authored by Simon Peyton Jones's avatar Simon Peyton Jones

Don't allow specialisation of class methods (fixes Trac #5001)

It doesn't make sense to specialise class methods -- their
code is simply a record selector.  Moreover, such methods
don't (currently) have an inl_sat field in their InlinePragma
which made DsBinds.makeCoreArity bleat.

This patch just ignores such pragmas, with a warning.
parent 5c4a4c4b
......@@ -493,6 +493,15 @@ dsSpec :: Maybe CoreExpr -- Just rhs => RULE is for a local binding
-> Located TcSpecPrag
-> DsM (Maybe (OrdList (Id,CoreExpr), CoreRule))
dsSpec mb_poly_rhs (L loc (SpecPrag poly_id spec_co spec_inl))
| isJust (isClassOpId_maybe poly_id)
= putSrcSpanDs loc $
do { warnDs (ptext (sLit "Ignoring useless SPECIALISE pragma for class method selector")
<+> quotes (ppr poly_id))
; return Nothing } -- There is no point in trying to specialise a class op
-- Moreover, classops don't (currently) have an inl_sat arity set
-- (it would be Just 0) and that in turn makes makeCorePair bleat
| otherwise
= putSrcSpanDs loc $
do { let poly_name = idName poly_id
; spec_name <- newLocalName poly_name
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment