[GHC] #8572: Building an empty module with profiling requires profiling libraries for integer-gmp
GHC
ghc-devs at haskell.org
Thu Nov 28 19:06:30 UTC 2013
#8572: Building an empty module with profiling requires profiling libraries for
integer-gmp
-------------------------------------------+-------------------------------
Reporter: parcs | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type checker) | Version: 7.7
Keywords: | Operating System:
Architecture: Unknown/Multiple | Unknown/Multiple
Difficulty: Unknown | Type of failure:
Blocked By: | None/Unknown
Related Tickets: | Test Case:
| Blocking:
-------------------------------------------+-------------------------------
{{{
#!haskell
{-# LANGUAGE NoImplicitPrelude #-}
module A where
}}}
{{{
$ ghc-stage2 -prof -c A.hs
Top level:
Failed to load interface for ‛GHC.Integer.Type’
Perhaps you haven't installed the profiling libraries for package
‛integer-gmp’?
Use -v to see a list of the files searched for.
}}}
I can't built module `A` without profiling libraries for `integer-gmp`,
even though I don't use `integer-gmp` anywhere in the module.
This happens because the `Tidy Core` pass attempts to look up the
`mkInteger` name (in order to desugar integer literals) even when there
are no integer literals in the module.
The obvious fix is to lazily look up `mkInteger` in
`Coreprep.lookupMkIntegerName`:
{{{
#!diff
diff --git a/compiler/coreSyn/CorePrep.lhs b/compiler/coreSyn/CorePrep.lhs
index 5e0cd65..9836982 100644
--- a/compiler/coreSyn/CorePrep.lhs
+++ b/compiler/coreSyn/CorePrep.lhs
@@ -56,6 +56,7 @@ import Config
import Data.Bits
import Data.List ( mapAccumL )
import Control.Monad
+import System.IO.Unsafe ( unsafeInterleaveIO )
\end{code}
--
---------------------------------------------------------------------------
@@ -1119,6 +1120,7 @@ lookupMkIntegerName dflags hsc_env
else if thisPackage dflags == integerPackageId
then return $ panic "Can't use Integer in integer"
else liftM tyThingId
+ $ unsafeInterleaveIO
$ initTcForLookup hsc_env (tcLookupGlobal mkIntegerName)
mkInitialCorePrepEnv :: DynFlags -> HscEnv -> IO CorePrepEnv
}}}
This way, we don't attempt to look up `mkInteger` until we actually need
it, i.e. if there are integer literals that we must desugar.
Relevant commits are 2ef5cd26db27543ac8664a3d18f45550d0109a8b and
fdd552e0ecaa17300670a48562995040e1d6687e
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8572>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list