On 06/07/2014 12:25, Christopher Rodrigues wrote:
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.
This does sound wrong.
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.
This might be OK if we have already compiled all the modules in this
compilation pass. If some were compiled previously, then it is possible
that we have some non-matching .hi files, and in that case I think we
should probably just consider the module out of date and recompile it,
generating both dynamic and non-dynamic .hi files, which will be
guaranteed to have the same hash.
Cheers,
Simon
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs