GHC API dependency analysis is broken
Sometimes, when a module fails to compile, GHC API invalidates other modules that do not depend on it (the attached example shows that) and sometimes the opposite --- it does not invalidate modules it should (I haven't created a standalone example with that so far). The problem is deterministic, but depends on the order in which targets are added using addSingle.
Generally, it seems if module B imports A, it correctly assumes A does not depend on B, but if B does not import A, it sometimes assumes A must depend on B, even if neither mentions the other. See comments in the example.
To reproduce, compile the example with
ghc --make typecheck-dir.hs -package ghc-7.4.2
create directory ./tmp and run typecheck-dir. You should see that module XXX is needlessly recompiled.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.4.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | GHC API |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |