[GHC] #8198: One-shot mode is buggy w.r.t. hs-boot files

GHC ghc-devs at haskell.org
Fri Nov 8 14:40:25 UTC 2013


#8198: One-shot mode is buggy w.r.t. hs-boot files
-------------------------------------------------+-------------------------
        Reporter:  parcs                         |            Owner:  parcs
            Type:  bug                           |           Status:  new
        Priority:  normal                        |        Milestone:  7.8.1
       Component:  Driver                        |          Version:  7.7
      Resolution:                                |         Keywords:
Operating System:  Unknown/Multiple              |     Architecture:
 Type of failure:  Incorrect warning at          |  Unknown/Multiple
  compile-time                                   |       Difficulty:
       Test Case:                                |  Unknown
        Blocking:                                |       Blocked By:
                                                 |  Related Tickets:
-------------------------------------------------+-------------------------

Comment (by parcs):

 Sorry, I meant the finder cache and mod location cache.  I agree now --
 there is no reason to assume that the source module exists in the same
 directory as the boot module.  Does this patch look OK?

 {{{
 #!diff
 diff --git a/compiler/main/DriverPipeline.hs
 b/compiler/main/DriverPipeline.hs
 index 337778e..0ecb5eb 100644
 --- a/compiler/main/DriverPipeline.hs
 +++ b/compiler/main/DriverPipeline.hs
 @@ -928,7 +928,19 @@ runPhase (RealPhase (Hsc src_flavour)) input_fn
 dflags0
          PipeState{hsc_env=hsc_env'} <- getPipeState

    -- Tell the finder cache about this module
 -        mod <- liftIO $ addHomeModuleToFinder hsc_env' mod_name location
 +        mod <- do
 +            -- We pass in HsSrcFile unconditionally, even if we're
 compiling a
 +            -- boot module, because every location in the finder cache
 +            -- corresponds to a module's source files only.
 +            src_location0 <- getLocation HsSrcFile mod_name
 +
 +            -- However, if we're compiling a boot module then don't make
 any
 +            -- assumptions about the location of the source module.  It
 could
 +            -- be in a different directory than the boot module.
 +            let src_location1
 +                  | isHsBoot src_flavour = src_location0 { ml_hs_file =
 Nothing }
 +                  | otherwise            = src_location0
 +            liftIO $ addHomeModuleToFinder hsc_env' mod_name
 src_location1

    -- Make the ModSummary to hand to hscMain
          let
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8198#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list