
#13720: INLINE pragma semantics changed since 8.0.2 -------------------------------------+------------------------------------- Reporter: mpickering | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): BTW, there's a warning you get when compiling `A`: {{{ A.hs:9:11: warning: [-Winline-rule-shadowing] Rule "h x" may never fire because ‘h’ might inline first Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘h’ | 9 | {-# RULES "h x" forall x . h x = error "REWRITE" #-} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ }}} If you follow GHC's advice: {{{#!hs module A where {-# INLINE f #-} f x = h x {-# INLINE[0] h #-} h x = x {-# RULES "h x" forall x . h x = error "REWRITE" #- }}} Then you get back the pre-8.2 behavior: {{{ $ /opt/ghc/8.2.1/bin/ghc B.hs -O2 -fforce-recomp -ddump-simpl | grep qux -A5 qux :: Integer [GblId, Str=x] qux = error .... }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13720#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler