[GHC] #16305: When should -Wmissed-specializations fire?
GHC
ghc-devs at haskell.org
Mon Feb 11 18:43:56 UTC 2019
#16305: When should -Wmissed-specializations fire?
-------------------------------------+-------------------------------------
Reporter: crockeea | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.7
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Poor/confusing
Unknown/Multiple | error message
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
While working on a fix for #16282, I noticed:
1. that `-Wmissed-specializations` doesn't fire when the docs say it
should
2. that the "probable fix" suggested when a warning does fire is highly
suspect
{{{
import Data.Map
main :: IO ()
main = do
let m = [] :: [Map String Bool]
mapM_ print m
}}}
With GHC 8.4.3, 8.6.3, and HEAD:
`ghc -O2 -Wmissed-specializations Main.hs` does *not* issue any warnings.
However, `ghc -O2 -Wall-missed-specializations Main.hs` *does* create a
warning:
{{{
Main.hs: warning: [-Wall-missed-specialisations]
Could not specialise imported function
‘Data.Map.Internal.$w$cshowsPrec’
when specialising ‘Data.Map.Internal.$fShowMap_$cshowsPrec’
Probable fix: add INLINABLE pragma on
‘Data.Map.Internal.$w$cshowsPrec’
}}}
The docs for `-Wmissed-specializations` say, "warn when specialisation of
an imported, overloaded function fails." Since `showsPrec` is an imported
function, it seems that a warning should have been issued with `-Wmissed-
specs`. My reading of the docs is that `-Wall-missed-specs` should output
everything `-Wmissed-specs` does, along with any *local* overloaded and
unspecialized functions.
Moreover, the "Probable fix" is suspect. A warning recommending an
`INLINABLE` pragma is issued depending on the output of `warnMissedSpec`
in specialise/Specialise.hs. For `-Wall-missed-specs`, `warnMissedSpec`
doesn't check if an INLINABLE pragma is already present, so the fix could
be redundant. For `-Wmissed-specs`, `warnMissedSpecs` *only* issues a
warning if there *is* any inline pragma (of one sort of another) on all
the callers, making the `probable fix` definitely redundant.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/16305>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list