Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information