SPECIALISE pragma generates wrong activations
It seems that in the current HEAD, the SPECIALISE
pragma generates a rule with the same activation as the function that is being specialised which is utterly wrong. A small example:
foo :: Num a => a -> a
{-# NOINLINE foo #-}
foo x = x+1
{-# SPECIALISE foo :: Int -> Int #-}
The HEAD generates this rule which never fires:
"SPEC T.foo" [NEVER] forall $dNum :: GHC.Num.Num GHC.Types.Int
T.foo @ GHC.Types.Int $dNum = T.foo_foo
If I change the NOINLINE
pragma to INLINE [0]
, the rule will get the activation [0]
. 7.2.2 behaves as expected:
"SPEC T.foo" [ALWAYS] forall $dNum :: GHC.Num.Num GHC.Types.Int
T.foo @ GHC.Types.Int $dNum = T.foo_foo
I haven't checked 7.4 but if this happens there, too, then fixing it before the release would be great. I assume it's just a typo somewhere.
Trac metadata
Trac field | Value |
---|---|
Version | 7.5 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |