[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