[GHC] #9176: GHC not generating dyn_hi files
GHC
ghc-devs at haskell.org
Thu Jul 3 23:31:13 UTC 2014
#9176: GHC not generating dyn_hi files
-----------------------------+----------------------------------
Reporter: heatsink | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.9
Resolution: | Keywords: dynamic
Operating System: MacOS X | Architecture: x86_64 (amd64)
Type of failure: Other | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-----------------------------+----------------------------------
Description changed by heatsink:
Old description:
> == Overview ==
>
> In dynamic-too compilation, a module is compiled the normal way, then the
> backend runs twice to generate normal (.o, .hi) and dynamic (.dyn_o,
> .dyn_hi) outputs. Compilation uses the .hi files of imported modules.
> Effectively, the compiler assumes that all the information it gets from a
> .hi file, used by the normal output, is also true of the corresponding
> .dyn_hi file, used by the dynamic output. GHC has a few checks to verify
> this, but they don’t always produce desirable results.
>
> When importing a module from a package in --make mode, GHC checks that
> the normal and dynamic interfaces match, in `checkBuildDynamicToo` in
> `findAndReadIface`. If they don’t match, GHC silently disables dynamic-
> too, so that no dynamic interface file is produced. No errors or
> warnings are reported.
>
> When importing a standalone module in --make mode, GHC does not examine
> the dynamic interface at all.
>
> Of the two cases described above, GHC uses the weaker checks when
> building a package and stricter checks when using the installed package.
> The weaker checks allow a package with mismatched normal and dynamic
> interface files to build and install without errors. After it's
> installed, the stronger checks suppress the creation of .dyn_hi files
> whenever the mismatched module is imported. Thus, a package installs
> fine, but causes problems when it's used.
>
> == Reproducing ==
>
> The attached code sets up an inconsistent pair of module interfaces and
> runs both kinds of imports. To compile the first two files, build the
> cabal package in `testcase9176/`. To compile the last file, install the
> package, then run the makefile in `user/`.
>
> * `Imported.hs` is compiled with different optimization flags, setting up
> a situation where the normal and dyamic module interfaces do not match.
>
> * `User.hs` importing directly `Imported.hs` loads only the static module
> interface. The dynamic interface is ignored.
>
> * `User.hs` importing from the installed package `Imported.hs` compares
> the static and dynamic interfaces, turns off dynamic-too compilation, and
> does not generate a .dyn_hi file. No errors or warnings are produced.
>
> == Details ==
>
> This bug appeared on my system in a Parsec module. Parsec installed with
> no apparent problems, but other modules importing from Parsec would not
> compile to .dyn_hi files.
>
> GHC was built from source, commit
> 9e10963e394680dbb1b964c66cb428a2aa03df09, compiled by GHC 7.6.3 with
> XCode 5.1.1 on OS X 10.9.3.
New description:
== Overview ==
In dynamic-too compilation, a module is compiled the normal way, then the
backend runs twice to generate normal (.o, .hi) and dynamic (.dyn_o,
.dyn_hi) outputs. Compilation uses the .hi files of imported modules.
Effectively, the compiler assumes that all the information it gets from a
.hi file, used by the normal output, is also true of the corresponding
.dyn_hi file, used by the dynamic output. GHC has a few checks to verify
this, but they don’t always produce desirable results.
When importing a module from a package in --make mode, GHC checks that the
normal and dynamic interfaces match, in `checkBuildDynamicToo` in
`findAndReadIface`. If they don’t match, GHC silently disables dynamic-
too, so that no dynamic interface file is produced. No errors or warnings
are reported.
When importing a standalone module in --make mode, GHC does not examine
the dynamic interface at all.
Of the two cases described above, GHC uses the weaker checks when building
a package and stricter checks when using the installed package. The
weaker checks allow a package with mismatched normal and dynamic interface
files to build and install without errors. After it's installed, the
stronger checks suppress the creation of .dyn_hi files whenever the
mismatched module is imported. Thus, a package installs fine, but causes
problems when it's used.
== Reproducing ==
The attached code sets up an inconsistent pair of module interfaces and
runs both kinds of imports. To compile the first two files, build the
cabal package in `testcase9176/`. To compile the last file, install the
package, then run the makefile in `user/`.
* `Imported.hs` is compiled with different optimization flags, setting up
a situation where the normal and dyamic module interfaces do not match.
* `User.hs` importing directly `Imported.hs` loads only the static module
interface. The dynamic interface is ignored.
* `User.hs` importing from the installed package `Imported.hs` compares
the static and dynamic interfaces, turns off dynamic-too compilation, and
does not generate a .dyn_hi file. No errors or warnings are produced.
This file is a copy of the other `User.hs`, just compiled differently.
== Details ==
This bug appeared on my system in a Parsec module. Parsec installed with
no apparent problems, but other modules importing from Parsec would not
compile to .dyn_hi files.
GHC was built from source, commit
9e10963e394680dbb1b964c66cb428a2aa03df09, compiled by GHC 7.6.3 with XCode
5.1.1 on OS X 10.9.3.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9176#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list