#4346: Behaviour of INLINABLE depends on whether the modules included are
already
compiled.
---------------------------------+------------------------------------------
Reporter: milan | Owner:
Type: bug | Status: new
Priority: normal | Component: Compiler
Version: 7.1 | Keywords:
Testcase: | Blockedby:
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: None/Unknown
---------------------------------+------------------------------------------
When investigating containers performance, I came across the following
problem:
My Data.Map annotates nearly every method as INLINABLE. My main module
Main.hs is trivial:
{{{
import Data.Map as M
main = print $ M.lookup 5 $ foldr (\x -> insert x x) empty [1..100]
}}}
Suppose my tree contains only .hs files, no .hi or .o. I can compile
either by
- {{{ghc --make -c -O Main.hs}}}, which compiles Data/Map.hs
automatically, or
- {{{ghc --make -c -O Data/Map.hs && ghc --make -c -O Main.hs}}}, which
compiles Data/Map.hs explicitely with the same arguments first.
Expected result of both compilations: Main.o is the same.
Actual result: in the first case, {{{Data.Map.lookup}}} method does not
get inlined in Main.o, but in the second case the {{{Data.Map.lookup}}}
method gets inlined in Main.o.
If affects both ghc-7.0 and ghc-head branches.
I am not sure this is a bug, but I would definitely expect both of the
compilation methods to yield the same file.
The self-contained source tree is attached.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4346>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs