The problem was that when loading interface files in checkOldIface, we were not passing the If monad the mutable variable for use when looking up entities in the *current* module, with the result that the knots wouldn't be tied properly, and some instances of TyCons would be incorrectly abstract. This bug has subtle effects: for example, recompiling a module without making any changes might lead to a slightly different result (noticed due to the new interface-file fingerprints). The bug doesn't lead to any direct failures that we're aware of.
o Moved BlockId stuff to a new file to avoid module recursion o Defined stack areas for parameter-passing locations and spill slots o Part way through replacing copy in and copy out nodes - added movement instructions for stack pointer - added movement instructions for call and return parameters (but not with the proper calling conventions) o Inserting spills and reloads for proc points is now procpoint-aware (it was relying on the presence of a CopyIn node as a proxy for procpoint knowledge) o Changed ZipDataflow to expect AGraphs (instead of being polymorphic in the type of graph)
For clients that forget to do hs_add_root()
Several changes in this patch, partially bug fixes, partially new code: o bug fixes in ZipDataflow - added some checks to verify that facts converge - removed some erroneous checks of convergence on entry nodes - added some missing applications of transfer functions o changed dataflow clients to use ZipDataflow, making ZipDataflow0 obsolete o eliminated DFA monad (no need for separate analysis and rewriting monads with ZipDataflow) o started stack layout changes - no longer generating CopyIn and CopyOut nodes (not yet fully expunged though) - still not using proper calling conventions o simple new optimizations: - common block elimination -- have not yet tried to move the Adams opt out of CmmProcPointZ - block concatenation o piped optimization fuel up to the HscEnv - can be limited by a command-line flag - not tested, and probably not yet properly used by clients o added unique supply to FuelMonad, also lifted unique supply to DFMonad
This is a much more robust way to do recompilation checking. The idea is to create a fingerprint of the ABI of an interface, and track dependencies by recording the fingerprints of ABIs that a module depends on. If any of those ABIs have changed, then we need to recompile. In bug #1372 we weren't recording dependencies on package modules, this patch fixes that by recording fingerprints of package modules that we depend on. Within a package there is still fine-grained recompilation avoidance as before. We currently use MD5 for fingerprints, being a good compromise between efficiency and security. We're not worried about attackers, but we are worried about accidental collisions. All the MD5 sums do make interface files a bit bigger, but compile times on the whole are about the same as before. Recompilation avoidance should be a bit more accurate than in 6.8.2 due to fixing #1959, especially when using -O.
Now you just add them to SUBDIRS_BUILD instead of SUBDIRS.
You need to use the build.* rules rather than the make.* rules, though.
- When compiling with -mmacos-deployment-target=10.4, we need --no-builtin-fprintf, as the use of GCC's builtin function optimisation for fprintf together with #include "PosixSource" in the RTS leads to the use of fwrite$UNIX2003 (with GCC 4.0.1 on Mac OS X 10.5.2).
This fixes a segfault in #1657
In an instance declaration, omitted methods get a definition that uses the default method. We used to generate source code and feed it to the type checker. But tc199 shows that is a bad idea -- see Note [Default methods in instances] in TcClassDcl. So this patch refactors to insteadl all us to generate the *post* typechecked code directly for default methods.
Refactoring reduces code and improves error messages
Now we use <prog>.hp and <prog>.prof consistently.
This bug allowed, for example f = let x = ( 1#, 'x' ) in x which is ill-typed because you can't put an unboxed value in a tuple. Core Lint fails on this program. The patch makes the program be rejcted up-front.
as discussed in this thread: http://www.haskell.org/pipermail/glasgow-haskell-users/2008-April/014614.html