#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

Reply via email to