
#8635: GHC optimisation flag ignored when importing a local module with derived type classes -------------------------------------+------------------------------------ Reporter: NeilMitchell | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Unknown/Multiple Type of failure: None/Unknown | Difficulty: Unknown Test Case: | Blocked By: Blocking: | Related Tickets: -------------------------------------+------------------------------------ Comment (by simonpj): I agree this is strange behaviour. Here's why it happens. * With `--make` GHC reads each library interface file only once, e.g. that defining equality for `Int`. * Without `-O` (i.e. with `-O0`), GHC sets `-fignore-interface-pragmas`. * When reading an interface file with `-fignore-interface-pragmas`, GHC skips all the unfoldings and other inessential info. * Without the `deriving` stuff, there's no reason to read the crucial interface file when compiling `Foo`. So it's read when compiling `Bar`, and hence when `-O` is set. * With the `deriving` clause, the crucial interface file is read when compiling `Foo`, but the unfoldings are skipped, and hence are unavailable when compiling `Bar`. You can get the behaviour you want by adding `-fno-ignore-interface- pragmas`. Maybe this should be the case with `--make`? But that choice would have the following downside: with `-fno-ignore-interface-pragamas` all unfoldings are read in, and may subsequently get used even by the modest optimisation done with `-O0`. Mind you, that ''might'' conceivably be a win. Maybe compile time and binary size would only increase marginally, but execution time would fall significantly? Would someone like to try the effect on compile times, binary size, and execution time, of using `-fno-ignore-interface-pragmas` with `-O0`? Simon -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8635#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler