Commit 1bf40a4b authored by Simon Peyton Jones's avatar Simon Peyton Jones
Browse files

Fix the SPECIALISE error in the haddock invocation of validate

Specifically
 - Turn the error
       "You cannot SPECIALISE f because it is not INLINEABLE"
   into a warning

 - More importantly, suppress it altogether when
     HscTarget = HscNothing or HscInterpreted
   because then we aren't going to be generating unfoldings
parent a8defd8a
......@@ -559,22 +559,29 @@ tcImpPrags :: [LSig Name] -> TcM [LTcSpecPrag]
tcImpPrags prags
= do { this_mod <- getModule
; dflags <- getDOpts
; if not (dopt Opt_Specialise dflags) then
return [] -- Ignore SPECIALISE pragmas for imported things
-- when -O is not on; otherwise we get bogus
-- complaints about lack of INLINABLE pragmas
-- in the imported module (also compiled without -O)
-- Notably, when Haddocking the base library
; if (not_specialising dflags) then
return []
else
mapAndRecoverM (wrapLocM tcImpSpec)
[L loc (name,prag) | (L loc prag@(SpecSig (L _ name) _ _)) <- prags
, not (nameIsLocalOrFrom this_mod name) ] }
where
-- Ignore SPECIALISE pragmas for imported things
-- when we aren't specialising, or when we aren't generating
-- code. The latter happens when Haddocking the base library;
-- we don't wnat complaints about lack of INLINABLE pragmas
not_specialising dflags
| not (dopt Opt_Specialise dflags) = True
| otherwise = case hscTarget dflags of
HscNothing -> True
HscInterpreted -> True
_other -> False
tcImpSpec :: (Name, Sig Name) -> TcM TcSpecPrag
tcImpSpec (name, prag)
= do { id <- tcLookupId name
; checkTc (isAnyInlinePragma (idInlinePragma id))
(impSpecErr name)
; unless (isAnyInlinePragma (idInlinePragma id))
(addWarnTc (impSpecErr name))
; tcSpec id prag }
impSpecErr :: Name -> SDoc
......
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