[GHC] #12632: Inline and Noinline pragmas ignored for instance functions
GHC
ghc-devs at haskell.org
Wed Sep 28 12:59:42 UTC 2016
#12632: Inline and Noinline pragmas ignored for instance functions
-------------------------------------+-------------------------------------
Reporter: jeremy-list | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: Incorrect | Unknown/Multiple
warning at compile-time | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by jeremy-list):
Compiling this code with "-O2 -ddump-rule-firings":
{{{
class Inv a where
inv :: a -> a
instance Inv Bool where
{-# NOINLINE inv #-}
inv = not
{-# RULES "force-inline" forall (a :: Bool) . inv a = not a #-}
main = print (inv True)
}}}
The output from GHC is:
{{{
[1 of 1] Compiling Main ( sample1.hs, sample1.o )
sample1.hs:8:11: warning: [-Winline-rule-shadowing]
Rule "force-inline" may never fire because ‘inv’ might inline first
Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘inv’
Rule fired: force-inline
Rule fired: Class op show
Linking sample1 ...
}}}
Here the warning is incorrect because it ignores the NOINLINE pragma, but
the rule is fired because the function isn't actually inlined.
If the NOINLINE pragma is changed to INLINE the output from GHC is
identical: the warning is emitted and the rule is fired. This is incorrect
because the rule shouldn't fire if the function is inlined.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12632#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list