#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