Skip to content

Add flag to control whether self-recompilation information is written to interface

Matthew Pickering requested to merge wip/22188 into master

This patch adds the flag -fwrite-self-recomp-info which controls whether interface files contain the information necessary to answer the question:

Do I need to recompile myself or is this current interface file suitable?

Why? Most packages are only built once either by a distribution or cabal and then placed into an immutable store, after which we will never ask this question. Therefore we can derive two benefits from omitting this information.

  • Primary motivation: It vastly reduces the surface area for creating non-deterministic interface files. See issue #10424 which motivated a proper fix to that issue. Distributions have long contained versions of GHC which just have broken self-recompilation checking (in order to get deterministic interface files).

  • Secondary motivation: This reduces the size of interface files slightly.. the mi_usages field can be quite big but probably this isn't such a great benefit.

  • Third motivation: Conceptually clarity about which parts of an interface file are used in order to communicate with subsequent packages about the interface for a module. And which parts are used to self-communicate during recompilation checking.

In addition to this, the change alerted me to the incorrect implemenation of the reifyModule function. See #8489 for more discussion about how to fix this if anyone was so inclined. For now I just added a warning -Wreify-module-missing-info which triggers if the module you are trying to reify doesn't have a suitable interface. Interfaces which are unsuitable include:

  • The GHC.Prim interface, which is a fake interface
  • Interfaces compiled with -fno-write-self-recomp-info

The main tracking issue is #22188 but fixes issues such as #10424 in a proper way.

Merge request reports