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