
Investigating #9176 further, GHC does at least three different things with imported modules under -dynamic-too compilation. It probably should be changed to handle imports uniformly. It looks like dynamic-too support was bolted on to a system designed for one-pass compilation, and I'm not clear on how to restructure it. Guidance would be appreciated, as it would cut down the time I need to figure out how the driver works. Here are the three things that can happen: 1. When compiling in one-shot mode, with -c, GHC will do what Igloo described. If normal and dynamic interface hashes don't match, it will compile the normal way, then compile again the dynamic way. 2. When compiling with --make and importing from a package, if normal and dynamic interface hashes don't match, GHC will disable dynamic-too, but it will not restart the pipeline. Only the normal .hi file is produced. 3. When compiling with --make and importing from a non-package module, GHC will not check interface hashes. It will proceed as if normal and dynamic interface hashes match. -Chris