[GHC] #9245: In absence of recursive imports, hs-boot files not checked for consistency
GHC
ghc-devs at haskell.org
Sat Jun 28 10:39:45 UTC 2014
#9245: In absence of recursive imports, hs-boot files not checked for consistency
-----------------------------------+---------------------------------------
Reporter: ezyang | Owner: ezyang
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.9
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Compile-time crash
Unknown/Multiple | Test Case:
Difficulty: Unknown | Blocking:
Blocked By: |
Related Tickets: |
-----------------------------------+---------------------------------------
Example:
B.hs-boot
{{{
module B where
b :: Bool
}}}
A.hs
{{{
module A where
import {-# SOURCE #-} B
a = b
}}}
B.hs
{{{
module B where
}}}
Main.hs
{{{
import A
main = print a
}}}
Compilation:
{{{
ghc -c B.hs-boot
ghc -c A.hs
ghc -c B.hs
ghc -c Main.hs
ghc -o main A.o B.o Main.o
}}}
Error:
{{{A.o:(.text+0x79): undefined reference to `B_b_closure'
A.o: In function `A_a_srt':
(.data+0x0): undefined reference to `B_b_closure'
collect2: error: ld returned 1 exit status
}}}
The culprit seems to be this code:
{{{
-- OK, so we're in one-shot mode.
-- In that case, we're read all the direct imports by now,
-- so eps_is_boot will record if any of our imports mention us by
-- way of hi-boot file
{ eps <- getEps
; case lookupUFM (eps_is_boot eps) (moduleName mod) of {
Nothing -> return emptyModDetails ; -- The typical case
Just (_, False) -> failWithTc moduleLoop ;
-- Someone below us imported us!
-- This is a loop with no hi-boot in the way
Just (_mod, True) -> -- There's a hi-boot interface
below us
}}}
but I am not 100% sure what the correct new logic is yet.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9245>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list