#1904: strictness analyser should be smarter
-------------------------+--------------------------------------------------
    Reporter:  igloo     |       Owner:         
        Type:  bug       |      Status:  new    
    Priority:  normal    |   Milestone:  _|_    
   Component:  Compiler  |     Version:  6.8.1  
    Severity:  normal    |    Keywords:         
  Difficulty:  Unknown   |    Testcase:         
Architecture:  Unknown   |          Os:  Unknown
-------------------------+--------------------------------------------------
 This module:
 {{{
 module Q (foo) where
 foo :: String -> [String] -> Bool
 #ifdef FIRST
 foo x _ | x `seq` x == "." = True
 #else
 foo x _ |         x == "." = True
 #endif
 foo x xs = x `seq` any (x ==) xs
 }}}
 should be compiled to the same code regardless of whether or not FIRST is
 defined. However, this is not the case; there is an extra case when FIRST
 is not defined:
 {{{
 $ ghc --version
 The Glorious Glasgow Haskell Compilation System, version 6.8.1
 $ ghc -fforce-recomp -ddump-simpl -cpp -O -c Q.hs -DFIRST > 1
 $ ghc -fforce-recomp -ddump-simpl -cpp -O -c Q.hs > 2
 $ diff -U 1000 1 2
 --- 1   2007-11-17 21:02:37.000000000 +0000
 +++ 2   2007-11-17 21:02:39.000000000 +0000
 @@ -1,33 +1,35 @@

  ==================== Tidy Core ====================
  Q.a :: GHC.Base.Char
  [GlobalId]
  [NoCafRefs
   Str: DmdType m]
  Q.a = GHC.Base.C# '.'

  Q.lvl :: [GHC.Base.Char]
  [GlobalId]
  [NoCafRefs
   Str: DmdType]
  Q.lvl = GHC.Base.: @ GHC.Base.Char Q.a (GHC.Base.[] @ GHC.Base.Char)

  Q.foo :: GHC.Base.String -> [GHC.Base.String] -> GHC.Base.Bool
  [GlobalId]
  [Arity 2
   NoCafRefs
   Str: DmdType SL]
  Q.foo =
 -  \ (x_a5D :: GHC.Base.String) (ds_d6y :: [GHC.Base.String]) ->
 -    case GHC.Base.eqString x_a5D Q.lvl of wild_Xc {
 +  \ (x_a5D :: GHC.Base.String) (ds_d6w :: [GHC.Base.String]) ->
 +    case GHC.Base.eqString x_a5D Q.lvl of wild_B1 {
        GHC.Base.False ->
 -       GHC.List.any @ GHC.Base.String (GHC.Base.eqString x_a5D) ds_d6y;
 +       case x_a5D of tpl_Xd { __DEFAULT ->
 +       GHC.List.any @ GHC.Base.String (GHC.Base.eqString tpl_Xd) ds_d6w
 +       };
        GHC.Base.True -> GHC.Base.True
      }




  ==================== Tidy Core Rules ====================


 $
 }}}

 There is a little discussion in the thread where this was first reported:
 http://www.haskell.org/pipermail/glasgow-haskell-
 users/2004-June/006862.html

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1904>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to