Skip to content

GHC panic with parallel make

Consider the following modules:

-- F.hs

module F () where
-- F.hs-boot

module F where

import O (O)

newtype F = F ()
instance O F where
-- O.hs

module O (O) where

class O a where
-- V.hs

module V () where

import {-# SOURCE #-} F ()
-- V.hs-boot
module V where

If I try to compile this with

ghc -j2 F O V

I get

[1 of 4] Compiling O                ( O.hs, O.o )
[2 of 4] Compiling F[boot]          ( F.hs-boot, F.o-boot )
[3 of 4] Compiling F                ( F.hs, F.o )

<no location info>: error:
    ghc-stage2: panic! (the 'impossible' happened)
  (GHC version 8.2.0.20170720 for x86_64-unknown-linux):
	tcIfaceGlobal (local): not found
  You are in a maze of twisty little passages, all alike.
  While forcing the thunk for TyThing F
  which was lazily initialized by initIfaceCheck typecheckLoop,
  I tried to tie the knot, but I couldn't find F
  in the current type environment.
  If you are developing GHC, please read Note [Tying the knot]
  and Note [Type-checking inside the knot].
  Consider rebuilding GHC with profiling for a better stack trace.
  Contents of current type environment:
    [r1hL :-> Identifier ‘$trModule’]
  Call stack:
      CallStack (from HasCallStack):
        prettyCurrentCallStack, called at compiler/utils/Outputable.hs:1133:58 in ghc:Outputable
        callStackDoc, called at compiler/utils/Outputable.hs:1137:37 in ghc:Outputable
        pprPanic, called at compiler/iface/TcIface.hs:1696:23 in ghc:TcIface

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

On the other hand

ghc -j1 F O V

works just fine, and gives the expected

[2 of 5] Compiling O                ( O.hs, O.o )
[3 of 5] Compiling F[boot]          ( F.hs-boot, F.o-boot )
[4 of 5] Compiling F                ( F.hs, F.o )

F.hs-boot:7:1: error:
    ‘F.F’ is exported by the hs-boot file, but not exported by the module
  |
7 | newtype F = F ()
  | ^^^^^^^^^^^^^^^^

F.hs:1:1: error:
    instance O.O F.F -- Defined at F.hs-boot:8:10
      is defined in the hs-boot file, but not in the module itself
  |
1 | -- F.hs
  | ^

The example is a little bit sick, in that the original code is not expected to compile. I run into this by accident when trying to construct a minimal example of the issue reported in #13803 (closed) (note that that bug is marked as closed, but the original issue reported there remains unfixed, I am trying to construct a minimal testcase for the original issue there).

Trac metadata
Trac field Value
Version 8.2.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information