Add some NOINLINE pragmas to satisfy the (correct) "RULE may not fire" warning
authorSimon Peyton Jones <simonpj@microsoft.com>
Mon, 23 Jul 2012 08:15:37 +0000 (09:15 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Mon, 23 Jul 2012 08:15:37 +0000 (09:15 +0100)
testsuite/tests/driver/T7060.hs
testsuite/tests/gadt/T3638.hs
testsuite/tests/indexed-types/should_compile/Rules1.hs
testsuite/tests/indexed-types/should_compile/T2291.hs
testsuite/tests/safeHaskell/safeInfered/UnsafeInfered05_A.hs
testsuite/tests/safeHaskell/safeInfered/UnsafeInfered11_A.hs
testsuite/tests/simplCore/should_compile/simpl011.hs
testsuite/tests/typecheck/should_compile/T2494-2.hs
testsuite/tests/typecheck/should_compile/T2497.hs
testsuite/tests/typecheck/should_compile/T2497.stderr
testsuite/tests/typecheck/should_compile/tc111.hs

index 45dac51..885a9bc 100644 (file)
@@ -1,4 +1,8 @@
 main :: IO ()
-main = print (3 + 4 :: Int)
+main = print (f (3 + 4 :: Int))
 
-{-# RULES "rule"  forall xs . map id xs = xs #-}
+f :: Int -> Int
+f x = x
+{-# NOINLINE [1] f #-}
+
+{-# RULES "rule" forall x. f x = 8 #-}
index abb6a86..c299fa9 100644 (file)
@@ -5,6 +5,7 @@ module T3638 where
 data T a where TInt :: T Int
 
 foo :: T Int -> Int
+{-# NOINLINE [1] foo #-}
 foo TInt = 0
 
 {-# RULES "foo"  forall x. foo x = case x of { TInt -> 0 } #-}
index 497c5bb..b936349 100644 (file)
@@ -12,6 +12,7 @@ mapT :: (C a, C b) => (a -> b) -> T a -> T b
 mapT = undefined
 
 zipT :: (C a, C b) => T a -> T b -> T (a,b)
+{-# NOINLINE [1] zipT #-}
 zipT = undefined
 
 {-# RULES
index a6832b6..e9aa877 100644 (file)
@@ -10,6 +10,6 @@ class CoCCC k where
 
 {-# RULES
 "cocurry coapply"               cocurry coapply = id
-"cocurry . uncocurry"           cocurry . uncocurry = id
-"uncocurry . cocurry"           uncocurry . cocurry = id
+"cocurry . uncocurry"           forall x. cocurry (uncocurry x) = x
+"uncocurry . cocurry"           forall x. uncocurry (cocurry x) = x
  #-}
index 4d14771..e0cabff 100644 (file)
@@ -5,6 +5,7 @@
 module UnsafeInfered05_A where
 
 {-# RULES "f" f = undefined #-}
+{-# NOINLINE [1] f #-}
 f :: Int
 f = 1
 
index 9d1d2ec..d209dcf 100644 (file)
@@ -15,6 +15,8 @@ lookupx ((t,a):xs) t' | t == t'   = Just a
                       | otherwise = lookupx xs t'
 
 {-# RULES "lookupx/T" lookupx = tLookup #-}
+{-# NOINLINE [1] lookupx #-}
+
 tLookup :: [(T,a)] -> T -> Maybe a
 tLookup [] _                      = Nothing
 tLookup ((t,a):xs) t' | t /= t'   = Just a
index c660394..63d1ad9 100644 (file)
@@ -49,6 +49,7 @@ updateST= update'
 
 update  :: (MutHash arr ref m)
         => HashTable key val arr ref m -> key -> val -> m Bool
+{-# NOINLINE [1] update #-}
 update  = update'
 
 update' :: (MutHash arr ref m)
index 7e3bfc1..b672cb0 100644 (file)
@@ -5,6 +5,7 @@
 module Foo where
 
 foo :: (forall m. Monad m => Maybe (m a) -> Maybe (m a)) -> Maybe a -> Maybe a
+{-# NOINLINE [1] foo #-}
 foo _ x = x
 
 {-# RULES
index 0e6ab4e..24933e0 100644 (file)
@@ -2,9 +2,12 @@
 
 module ShouldCompile() where
 
+foo x = x
+{-# NOINLINE [1] foo #-}
+
 -- Trac #2497; test should compile without language
 --            pragmas to swith on the forall
-{-# RULES "id" forall (x :: a). id x = x #-}
+{-# RULES "id" forall (x :: a). foo x = x #-}
 
 
 
index 81b8fbc..de6ca48 100644 (file)
@@ -1,2 +1,2 @@
 
-T2497.hs:15:1: Warning: Defined but not used: `beq'
+T2497.hs:18:1: Warning: Defined but not used: `beq'
index 26eb942..f1636bf 100644 (file)
@@ -7,6 +7,7 @@ module ShouldCompile where
 -- The reason was that foobar is monomorphic, so the RULE 
 -- should not generalise over it.
 
+{-# NOINLINE [1] foo #-}
 foo 1 = 2
 bar 0 = 1