content: -- Test #3118
  
  -- The test is quite delicate.  It aims to get 'f' to look like
  --   f y = case x of
  --             Red -> (y, y)
  --             _ -> let v = case x of
  --                             Green -> 2
  --                             Blue  -> 3
  --                  in (v, 5)
  --
  -- And now float the inner case to top level
  -- so that it's not so obvious that the Red case
  -- cannot occur.  This crashed GHC 6.10.
  --
  -- It's delicate to make the bug show up
  --  (a) because it relies on not "seeing" that
  --      x = Red until later.
  --  (b) because dropping the Red case must happen
  --      before float-out, which itself happens v early
  
  -- In the original report, the x=Red was concealed by profiling
  
  module T3118 where
  
  data Colour = Red | Green | Blue
  
  
  {-# NOINLINE [0] f #-}
  g x = Red
  
  x = g True
  
  f :: Int -> (Int,Int)
  f y = case x of
           Red -> (y, y)
           xx -> let v = case xx of
                            Red -> 1
                            Green -> 2
                            Blue  -> 3
                   in (v, 5)
  