GHC doesn't restore split objects
While working on the new Shake-based build system I came across an annoying problem related to missing split objects ([#note see note]).
I still don't fully understand the reasons behind the problem, but I found that GHC doesn't restore missing split objects, as explained in the example below. I think this is a bug, but maybe this is actually a missing feature. I think it shouldn't be difficult to fix.
module Test (test) where
test :: Int
test = 0
I compile the above with ghc -split-objs Test.hs
and get two split object files in Test_o_split
. Then if I delete any of these files, or even the whole folder, and rerun ghc -split-objs Test.hs
the compiler doesn't bother to restore split objects, pretending that everything is up-to-date. However, if I delete Test.o
all object files are restored.
Another related issue reported by Neil Mitchell (which may be worth a separate ticket) is that even if we corrupt Test.o
and rerun ghc -split-objs Test.hs
, the compiler doesn't restore the object file (nor missing split objects) to the consistent state.
[=#note Note:] The problem I have is described here: https://github.com/snowleopard/shaking-up-ghc/issues/30. It's not necessary to follow the link to understand this ticket, however I'd appreciate any insight you might have about the reasons behind the problem and/or a possible solution.
Trac metadata
Trac field | Value |
---|---|
Version | 7.10.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | NeilMitchell, ezyang |
Operating system | |
Architecture |