dynCompileExpr, #656
Simon Marlow
simonmarhaskell at gmail.com
Thu Aug 24 08:22:49 EDT 2006
All applied, thanks.
Here's what I think the status of your patches is, correct me if I missed anything:
- patch for #656, not applied yet (I'll look at it)
- patch for #814, not applied yet (would you like to apply?)
- timeout patch for the testsuite: I'll test it and apply
Cheers,
Simon
Esa Ilari Vuokko wrote:
> Hi,
>
> Here's my first try at implementing dynCompileExpr, request in
> #656 [1]. Is the setting and restoring context done right, or
> is there some other, cleaner, way? Other probs? I tested with
> [2] and tried that stage1 compiler still builds.
>
> I'm not sure how to generalise this for runStmt. I think I'd
> create dynRunIO for expr :: (Typeable a) => IO a to complement
> dynCompileExpr.
>
>
> [1] http://hackage.haskell.org/trac/ghc/ticket/656
> [2]
> module Main where
> import Data.Dynamic
> import GHC
> import PackageConfig
>
> main = do
> GHC.init (Just "d:/source/ghc/ghc-6.5/ghc/")
> session <- newSession Interactive
> setSessionDynFlags session =<< initPackages =<< getSessionDynFlags session
> setContext session []
> [ mkModule (stringToPackageId "base") (mkModuleName "Prelude")
> ]
> (Just v) <- dynCompileExpr session "3"
> let (Just v') = fromDynamic v
> print (v'::Int)
> return ()
>
> Best regards,
> --Esa
>
>
>
> ------------------------------------------------------------------------
>
>
> New patches:
>
> [Add dynCompileExpr
> Esa Ilari Vuokko <ei at vuokko.info>**20060823221828] {
> hunk ./compiler/main/GHC.hs 81
> - compileExpr, HValue,
> + compileExpr, HValue, dynCompileExpr,
> hunk ./compiler/main/GHC.hs 178
> +import Data.Dynamic ( Dynamic )
> hunk ./compiler/main/GHC.hs 234
> -import PackageConfig ( PackageId )
> +import PackageConfig ( PackageId, stringToPackageId )
> hunk ./compiler/main/GHC.hs 2024
> +-- -----------------------------------------------------------------------------
> +-- Compile an expression into a dynamic
> +
> +dynCompileExpr :: Session -> String -> IO (Maybe Dynamic)
> +dynCompileExpr ses expr = do
> + (full,exports) <- getContext ses
> + setContext ses full $
> + (mkModule
> + (stringToPackageId "base") (mkModuleName "Data.Dynamic")
> + ):exports
> + let stmt = "let __dynCompileExpr = Data.Dynamic.toDyn (" ++ expr ++ ")"
> + res <- withSession ses (flip hscStmt stmt)
> + setContext ses full exports
> + case res of
> + Nothing -> return Nothing
> + Just (_, names, hvals) -> do
> + vals <- (unsafeCoerce# hvals :: IO [Dynamic])
> + case (names,vals) of
> + (_:[], v:[]) -> return (Just v)
> + _ -> panic "dynCompileExpr"
> +
> }
>
> Context:
>
> [Clean up coding style
> Esa Ilari Vuokko <ei at vuokko.info>**20060823075822]
> [Use stgMallc and stgFree instead of malloc/free
> Esa Ilari Vuokko <ei at vuokko.info>**20060823002902]
> [Remove wrong VirtualAlloc MEM_DECOMMITs on cleanup
> Esa Ilari Vuokko <ei at vuokko.info>**20060821180332]
> [Remove few format-warnings by adding casts
> Esa Ilari Vuokko <ei at vuokko.info>**20060813111029]
> [Remove warning: Correct includes for mingw
> Esa Ilari Vuokko <ei at vuokko.info>**20060813002216]
> [Add few more guesses where to find bits of mingw-gcc
> Esa Ilari Vuokko <ei at vuokko.info>**20060812020901]
> [in the GHCi prompt, print ModuleNames not Modules
> Simon Marlow <simonmar at microsoft.com>**20060823095258]
> [In the Compiling/Skipping message, print ModuleNames not Modules
> Simon Marlow <simonmar at microsoft.com>**20060823095225
> These modules are always home modules, by definition, so the package
> name is redundant.
>
> ]
> [Fix typo
> Ian Lynagh <igloo at earth.li>**20060822163300]
> [Fix typo
> Ian Lynagh <igloo at earth.li>**20060822163212]
> [FastString and StringBuffer need -funbox-strict-fields too
> Simon Marlow <simonmar at microsoft.com>**20060822143337
> For the benefit of old GHCs that don't understand {-# UNPACK #-}
> ]
> [minor fix to the clashing export error message
> Simon Marlow <simonmar at microsoft.com>**20060822112518
> The ordering of items in the parsed export list is now correct, so we
> have to compensate to get the right output again.
> ]
> [findModule: add a fallthrough error case
> Simon Marlow <simonmar at microsoft.com>**20060822112409]
> [notes about which versions of GHC can be used to bootstrap
> Simon Marlow <simonmar at microsoft.com>**20060822093554]
> [disable .ident generation on darwin_TARGET_OS
> Simon Marlow <simonmar at microsoft.com>**20060822090349]
> [fix typo
> Simon Marlow <simonmar at microsoft.com>**20060822073731]
> [fixes to PPC version of cas(), from David Kirkman <dkirkman at gmail.com>
> Simon Marlow <simonmar at microsoft.com>**20060821153136
>
> From David's email:
> The problem is that the inline assembler code was placing the result
> of an operation in a register that is used as input later in the code.
> At the bottom of this message I've extracted a short short code
> fragment that you can run through gcc (on a powerpc machine) to see
> the generated assembly output.
>
> The changes to fix the problem are fairly simple. The first adds an
> ampersand to the output list of the assembly fragment ("=r" (result)
> --> "=&r" (result)) The ampersand just tells gcc that result can not
> be placed in a register used for any of the input parameters (o, n, or
> p). Otherwise, it feels free to place output parameters in the same
> registers used by the inputs -- but because of the flow of control
> here we need everything in a distinct register. This change fixes the
> TVar program above.
>
> The second change adds a clobber list (the :"cc", "memory"). This
> tells gcc that the condition code (due to the compare) and memory (due
> to the store) might be changed during the asm execution. The lack of
> a clobber list did not seem to be causing any trouble, but without it
> gcc is free to assume that no state is changed during the execution.
> ]
> [Always use -funbox-strict-fields for Binary
> Simon Marlow <simonmar at microsoft.com>**20060821152111
> For some reason this was only enabled when $(bootstrapped)=YES. This
> would be one reason why the stage1 compiler is slow. I guess we'll
> find out if anything goes wrong.
> ]
> [disable automagic building of GHCi in stage1
> Simon Marlow <simonmar at microsoft.com>**20060821151957]
> [remove ancient file with incorrect information
> Simon Marlow <simonmar at microsoft.com>**20060821141946]
> [new option -a (append) for hasktags
> Martin Grabmueller <magr at cs.tu-berlin.de>**20060816091427]
> [ugly hack to cause ghc_boot_platform.h to be built before primops.txt
> Simon Marlow <simonmar at microsoft.com>**20060821120630]
> [add libraries/cgi and libraries/xhtml
> Simon Marlow <simonmar at microsoft.com>**20060821102908]
> [(temp) #814 - More flexible memory allocation in Windows
> Esa Ilari Vuokko <ei at vuokko.info>**20060820150720]
> [fix export/import list parsing (allow (,)), and remove unnecessary reverses
> Simon Marlow <simonmar at microsoft.com>**20060821102633]
> [comply with Haskell 98 by not allowing extra commas in import/export lists
> Simon Marlow <simonmar at microsoft.com>**20060821095912]
> [Missing stage1's in hc-build
> Ian Lynagh <igloo at earth.li>**20060821092226
> Add mising stage1/ directories to object files touched by hc-build, and
> give stage=1 as an argument to make install.
> ]
> [remove spurious commas in imports
> Ross Paterson <ross at soi.city.ac.uk>**20060819173423]
> [whitespace cleanup only
> Ross Paterson <ross at soi.city.ac.uk>**20060818224014]
> [remove gcj libs from bin dist
> sof at galois.com**20060818214155]
> [I don't thing we want to add a call-context here; it just clutters the output
> simonpj at microsoft.com**20060818160729]
> [Avoid duplicate "In type ..." in error messages
> simonpj at microsoft.com**20060818160611]
> [Better pretty-printing for TvSubst
> simonpj at microsoft.com**20060818160551]
> [Fall over more gracefully when there's a Template Haskell error
> simonpj at microsoft.com**20060818110702
>
> For a long time, Template Haskell has fallen over in a very un-graceful
> way (i.e. panic) even when it encounters a programmer error. In particular,
> when DsMeta converts HsSyn to TH syntax, it may find Haskell code that
> TH does not understand. This should be reported as a normal programmer
> error, not with a compiler panic!
>
> Originally the desugarer was supposed to never generate error
> messages, but this TH desugaring thing does make it do so. And in
> fact, for other reasons, the desugarer now uses the TcRnIf monad, the
> common monad used by the renamer, typechecker, interface checker, and
> desugarer.
>
> This patch completes the job, by
> - allowing the desugarer to generate errors
> - re-plumbing the error handling to take account of this
> - making DsMeta use the new facilities to report error gracefully
>
> Quite a few lines of code are touched, but nothing deep is going on.
>
> Fixes Trac# 760.
>
> ]
> [Fix typo (fst --> head) in docs on implicit parameters
> simonpj at microsoft.com**20060818075937]
> [One last hs-boot update
> simonpj at microsoft.com**20060817134216]
> [Missing import for stage 2
> simonpj at microsoft.com**20060817133247]
> [One more hs-boot file
> simonpj at microsoft.com**20060817133220]
> [Refactoring for valid rule checking
> simonpj at microsoft.com**20060817130141]
> [Do not CSE in INLINE and NOINLINE things
> simonpj at microsoft.com**20060817130005
>
> See extensive comments with Note [INLINE and NOINLINE] in this file.
>
> ]
> [Update lhs-boot files
> simonpj at microsoft.com**20060817132003
>
> A consequence of my recent meddling with hs-boot files is that GHC is
> more picky about the correpondence between the hs-boot file and the hs file.
> In particular, you must use the same type synonyms.
>
> This patche fixes up GHC's own hs-boot files to match the restriction.
>
> ]
> [Add ad-hoc typing checks for tagToEnum#
> simonpj at microsoft.com**20060816203156
>
> The problem with tagToEnum# is that it is not overloaded (in the
> Haskell sense) but you are only supposed to apply it to a TyCon
> that is an enumeration (isEnumerationTyCon).
>
> The Real Way to do this is to have some special kind of type constraint
> for the purpose, but that is wild overkill. So this patch adds a small
> rather ad-hoc check to TcExpr.instFun. Crude, simple, but it works fine.
>
> Fixes Trac #786
> Test is tcfail164
>
> ]
> [Get dead-ness right in knownCon
> simonpj at microsoft.com**20060816164216]
> [Tuning for argToPat
> simonpj at microsoft.com**20060816164103
>
> argToPat is a crucial function for SpecConstr, because it decides
> what patterns are worth specialising. I was being much too gung-ho about
> constants. This patch makes it much better.
>
> ]
> [Re-factor mkAtomicArgs and completeNonRecX
> simonpj at microsoft.com**20060816163645
>
> This refactoring ensures that when mkAtomicArgs adds new bindings,
> it does so using completeNonRecX, which adds unfoldings etc. More
> modular, and saves passes too.
>
> (This was important when getting rules to work right. We want tob
> fire a rule as soon as possible, taking into account all inlinings,
> else a less-good rule applies. That's what I found when doing
> stream fusion anyway.)
>
> Regardless, this is an improvement.
>
> ]
> [Another try at the continuation-swapping stuff
> simonpj at microsoft.com**20060816105042
>
> I have spent altogether too long on my attempt to avoid case-of-case
> in situations where it is a Bad Thing. All the action is in the
> case for mkDupableAlt that handles cases with a single alternative.
>
> I've added rather extensive comments, and it finally seems to be working
> more or less right. If you compile (say) GHC/Real.o you'll see quite a
> few case-of-cases remain (which didn't happen before), and they mostly look
> pretty sensible to me.
>
> ]
> [Don't build unnecessary lets in knownCon
> simonpj at microsoft.com**20060816104831
>
> Faced with
> case x of y { (a,b) -> rhs }
>
> where x is bound to (c,d), we were generating
>
> let y = (c,d) in rhs
>
> and thenn hoping to get rid of the y binding by CSE or some such. It's
> better simply not to build it in the first place, by generating
>
> let y = x in rhs
>
> This patch does the job.
>
> ]
> [Comments only
> simonpj at microsoft.com**20060816104817]
> [Refactoring, plus record recursive-function *components* as RecArg too
> simonpj at microsoft.com**20060816085809]
> [Record constructor arg occs correctly (bug-fix)
> simonpj at microsoft.com**20060816085628
>
> I was forgetting the non-pattern-matched type args of a constructor.
>
> ]
> [Disable form-checking for rule LHSs
> simonpj at microsoft.com**20060816085612
>
> Previously we checked the form of the arguments of a RULE lhs, to
> ensure that they were simple applications. There was no good reason
> for that, save to prevent you writing LHSs that were unlikely to match.
>
> And Don Stewart found he wanted to do something we didn't allow (a section,
> I think). So I have just disabled the check.
>
> ]
> [Allow class and instance decls in hs-boot files
> simonpj at microsoft.com**20060815123402
>
> For some reason, in 6.5 the manual said you could put a class decl in
> an interface file, but not an instance decl; whereas the implementation
> was exactly the othe way round.
>
> This patch makes it possible to put *both* class and instance decls
> in an interface file.
>
> I also did a bit of re-factoring; comparing the declarations in the
> hs-boot and hs file is now done by converting to IfaceSyn, because we
> have good comparison operations for IfaceSyn already implemented.
> This fixed a bug that previously let through an inconsistent declaration
> of a data type.
>
> The remaining infelicity concerns "abstract" TyCons. They are a bit
> of a hack anyway; and Classes are not handled in the same way. Need
> to think about this, but I think it's probably ok as it stands.
>
>
> ]
> [Reject derivable type classes with higher-rank methods
> simonpj at microsoft.com**20060815075928
>
> Trac #864 suggested a derivable type class with a higher-rank method.
>
> In principle this is quite do-able, but in practice the mechanism works
> by generating source code and then doing type inference. To make this work
> with higher-rank types would require impredicative polymorphism. And we
> do have that, so it could probably be made to work by generating (source-level)
> type annotations. But it's real work, so I'm settling for generating a
> decent error message rather than crashing.
>
>
> ]
> [SpecConstr now specialises on constants and lambdas
> simonpj at microsoft.com**20060815162605
>
> Roman inspired me to beef up SpecConstr to deal with
> a) constant arguments
> b) lambda arguments
>
> This is described in elaborate comments in the file:
> Note [Specialising for constant parameters]
> Note [Specialising for lambda parameters]
>
> I also took the opportunity to fix the usage analysis done by
> SpecConstr, which was only handling the top-level correctly.
> Now it does nesting too.
>
>
> ]
> [Fix two bugs in rule-matching
> simonpj at microsoft.com**20060815162030
>
> These two typo-like bugs have been there for a long time!
>
> One concerns the selection of overlapping rules,
> which was back to front
>
> The other was name-lining-up bug in the Case case of matching
>
> This patch also arranges to export matchN.
> (Not a good name, but still!)
>
>
> ]
> [Moving list-length code from one place in the file to another
> simonpj at microsoft.com**20060815161947]
> [Make UniqSM into a proper monad
> simonpj at microsoft.com**20060815161829]
> [Typo in patch that dealt with duplicating continuations in Simplify
> simonpj at microsoft.com**20060815070246]
> [Be more conservative about duplicating continuations
> simonpj at microsoft.com**20060814165424
>
> Roman found that GHC was duplicating continuations that arose (essentially)
> from uses of 'seq', or strict constructors. This fixes the problem;
> see the comments mkDupableCont (the Select case with a single alternative).
>
> I'm a little concerned that this may also miss useful case-of-case
> tranformations, so I'd like to know if anyone finds that this patch
> makes performance worse.
>
> To make it a bit more gung-ho, one could check for all the binders
> being dead, before choosing this new, conservative alternative.
>
>
> ]
> [Inline into tail-called constructor args
> simonpj at microsoft.com**20060814165127
>
> Consider
> x = case y of { True -> (p,q); ... }
>
> The occurrence analyser was marking p,q as 'Many', because they args
> of a constructor in an RhsCtxt. But actually they aren't in a RhsCtxt,
> and in this case it's better to inline.
>
> ]
> [Improve exprIsCheap
> simonpj at microsoft.com**20060814165043
>
> exprIsCheap is meant to return True iff it's ok to push the expression
> inside a lambda. But the previous version would return True of a nested
> construtor application like (1:2:3:[]), which isn't right.
>
> This patch re-factors the code somewhat, and fixes the bug.
>
> ]
> [Added xhtml and cgi as default libraries.
> bringert at cs.chalmers.se**20060814113242]
> [Improve error message in TcHsType
> simonpj at microsoft.com**20060814095617
>
> Fixes Trac #863.
> Test is tcfail162
>
> ]
> [Warning police: Removed overlapped pattern warnings
> sven.panne at aedion.de**20060811151353]
> [Complete -fmono-pat-binds patch
> simonpj at microsoft.com**20060811142842
>
> When adding the experimental -fmono-pat-binds, I forgot to check
> for type signatures of the now-monomorphic patterns. This patch
> completes the job.
>
> I documented the design too:
> http://haskell.galois.com/cgi-bin/haskell-prime/trac.cgi/wiki/MonomorphicPatternBindings
>
> ]
> [Avoid warning about overlapped pattern for Linux target
> sven.panne at aedion.de**20060811140512]
> [Improve error message layouts
> simonpj at microsoft.com**20060811133317]
> [Add type signature
> simonpj at microsoft.com**20060811133302]
> [Improve the "could not find module" error message
> Simon Marlow <simonmar at microsoft.com>**20060811132135
> In particular, if we're searching for the profiling version of a
> module in another package, then suggest that perhaps it might not have
> been installed.
> ]
> [On FreeBSD, use -lthr instead of -pthread for now (see comments)
> Simon Marlow <simonmar at microsoft.com>**20060811113453]
> [Two more error message indendations
> simonpj at microsoft.com**20060811110435]
> [Go back to calling type veriables t
> simonpj at microsoft.com**20060811110412]
> [Indent an error message
> simonpj at microsoft.com**20060811110347]
> [Improve error message (imported from Prelude at Implicit import declaration)
> simonpj at microsoft.com**20060811110301]
> [don't qualify module name for importedSrcLoc
> Simon Marlow <simonmar at microsoft.com>**20060811101327]
> [use "Defined in" rather than "Imported from" when printing ImportedSrcLoc
> Simon Marlow <simonmar at microsoft.com>**20060811101159]
> [Now that we have an "html" package, put the Haddock docs somewhere else
> sven.panne at aedion.de**20060811092609]
> [Nuked hschooks.h in favour of cutils.h, which has the prototypes we need
> sven.panne at aedion.de**20060810154225]
> [Match format strings and arguments for printf-like functions
> sven.panne at aedion.de**20060810153624]
> [Warning police: Make prototype for LDV_recordDead_FILL_SLOP_DYNAMIC visible
> sven.panne at aedion.de**20060810144837]
> [Warning police: Make strlen and friends known
> sven.panne at aedion.de**20060810144729]
> [Tweak GCC's inlining parameters to get thread_obj inlined
> sven.panne at aedion.de**20060810144505]
> [Add an IAmDead case to postInlineUnconditionally, and comments
> simonpj at microsoft.com**20060810142034]
> [Do not repeatedly simplify an argument more than once
> simonpj at microsoft.com**20060810141526
>
> A very important invariant of the simplifier is that we do not simplify
> an arbitrarily large expression more than once in a single pass. If this
> can happen, then we can get exponential behaviour, when the large expression
> itself has a large sub-expression which is simplified twice, and so on.
>
> GHC has a long-standing bug which allows this repeated simplification to
> happen. It shows up when we have a function like this
>
> f d BIG
> where f's unfolding looks like
> \x -> case x of (a,b) -> a
> Of course this is v common for overloaded functions.
>
> Before this patch we simplified all the args (d and BIG) before
> deciding to unfold f. Then we push back the simplified BIG onto the
> continuation stack, inline f, so now we have
> (case d of (a,b) -> a) BIG
> After we reduce the case a bit, we'll simplify BIG a second time. And
> that's the problem.
>
> The quick-and-dirty solution is to keep a flag in the ApplyTo continuation
> to say whather the arg has already been simplified. An alternative would
> be to simplify it when first encountered, but that's a bigger change.
>
>
> ]
> [Do not call preInlineUnconditionally in simplNonRecX
> simonpj at microsoft.com**20060810141340
>
> This looks to me like a long-standing bug. simplNonRecX was calling
> preInlineUnconditionally, even though it was given an already-simplified
> expression. Exponential behaviour beckons.
>
> ]
> [Make postInlineUnconditaionally more conservative
> simonpj at microsoft.com**20060810141145
>
> I'm being more paranoid about repeatedly simplifying things (to avoid
> exponential behaviour.) postInlineUnconditionally looks as if it
> could repeated simplify the same expression; this patch stops it doing
> so.
>
> The extra lines are all comments!
>
>
> ]
> [Control.Exception.unblock wasn't unblocking exceptions
> Simon Marlow <simonmar at microsoft.com>**20060810132307]
> [remove out of date comment
> Simon Marlow <simonmar at microsoft.com>**20060810130154]
> [move html before network, for now
> Simon Marlow <simonmar at microsoft.com>**20060810121930]
> [add html package
> Simon Marlow <simonmar at microsoft.com>**20060810113719]
> [Egregious bug in tcLHsConResTy
> simonpj at microsoft.com**20060810120828
>
> This terrible bug in tcLHsConTy is pretty much guaranteed to show up
> on an program involving a GADT with more than one type parameter.
>
> This bug isn't present in the STABLE branch.
>
> Manuel: it is *not* necesary to merge this patch into the FC branch;
> just ignore it.
>
> ]
> [Comments about improvements to SpecConstr
> simonpj at microsoft.com**20060810120759]
> [Remove HasBounds-instance and implement MArray.getBounds instead
> Esa Ilari Vuokko <ei at vuokko.info>**20060809163012]
> [Fix Array imports
> Esa Ilari Vuokko <ei at vuokko.info>**20060809161341]
> [Where we use $(GhcHcOpts), also add $(GhcStage1HcOpts)
> Simon Marlow <simonmar at microsoft.com>**20060809144845
> This fixes building the compiler with -prof in $(GhcStage1HcOpts)
> ]
> [fixes to the stage2 build following removal of old FFI syntax
> Simon Marlow <simonmar at microsoft.com>**20060809143153]
> [fix bug in task freeing
> Simon Marlow <simonmar at microsoft.com>**20060809141225]
> [add some more options to stage 2
> Simon Marlow <simonmar at microsoft.com>**20060809141058]
> [remove debugging code accidentally left in
> Simon Marlow <simonmar at microsoft.com>**20060809102936]
> [remember that old FFI syntax has been dropped
> Simon Marlow <simonmar at microsoft.com>**20060809101655]
> [only define GHCI if $(GhcWithInterpreter)=YES, also add -threaded
> Simon Marlow <simonmar at microsoft.com>**20060809101634]
> [move altzone test to base package
> Ross Paterson <ross at soi.city.ac.uk>**20060809124215]
> [remove unused FPTOOLS_CHECK_HTYPE macro
> Ross Paterson <ross at soi.city.ac.uk>**20060809124036]
> [Remove the artifical cap on the number of workers
> Simon Marlow <simonmar at microsoft.com>**20060809095908
> See #805. This was here to catch bugs that resulted in an infinite
> number of worker threads being created. However, we can't put a
> reasonable bound on the number of worker threads, because legitimate
> programs may need to create large numbers of (probably blocked) worker
> threads. Furthermore, the OS probably has a bound on the number of
> threads that a process can create in any case.
>
>
>
> ]
> [Remove old FFI syntax
> Simon Marlow <simonmar at microsoft.com>**20060809095201
> See #815
> ]
> [make exit() overridable, for use in DLLs
> Simon Marlow <simonmar at microsoft.com>**20060809092439
> See #753
> ]
> [More fixes to pre-matching and pre-subsumption
> simonpj at microsoft.com**20060808224924
>
> Actually this patch fixes two errors. one was a trivial typo in
> tha last patch (b_ty should be b_tau), which led to an infinite loop
> when compiling Data.Generic.Twins.
>
> Fixing that revealed a more serious error in the same function.
> I was sloppy about dealing robsutly with name-capture for nested
> quantifiers in pre-subsumption and pre-matching; and sure enough
> I got bitten. Sigh. I think it is right now.
>
> ]
> [Group exports so that all length functions are together; no semantic change
> simonpj at microsoft.com**20060808224808]
> [Check that lazy patterns are for lifted types
> simonpj at microsoft.com**20060808135910
>
> A lazy pattern match must be for a lifted type. This is illegal:
>
> f x = case g x of
> ~(# x,y #) -> ...
>
> This commit fixes the problem. Trac #845, test is tcfail159
>
> ]
> [Spelling in a comment
> simonpj at microsoft.com**20060808123514]
> [Remove srcSpanStartLine/srcSpanEndLine crash
> simonpj at microsoft.com**20060808123211
>
> srcSpanStartLine/srcSpanEndLine panic on UnhelpfulLoc. They should not
> really be exported by SrcLoc at all, but unfortunately they are used in
> Lexer.x, which knows enough to avoid the panic.
>
> However the call in RnEnv didn't know, and the panic was triggered
> by Template Haskell spliced code. This patch fixes it by exporting
> the predicate RnEnv wanted, namely isOneLineSpan.
>
> ]
> [Replace deprecated AC_TRY_COMPILE macro with the reccomended replcament
> Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060706114902
> See: http://www.gnu.org/software/autoconf/manual/html_node/Obsolete-Macros.html
> ]
> [Add ghc and version number in .ident directive in NCG
> Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060706114712
> Just because we can and because every other compiler does,
> lets stick in an identifier directive: .ident "GHC x.y.z"
> into the assembly output of the NCG.
> ]
> [Support the GNU non-exec stack annotation system
> Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060706114331
> On recent GNU ELF systems one can mark an object file as not
> requiring an executable stack. If all objects- linked into a
> program have this note then the program will not use an executable
> stack, which is good for security (and some distros have it as a
> QA policy). GHC generated code does not need an executable stack
> so add the note to the assembly output of the native code
> generator (conditional on a configure test).
> ]
> [Complain more loudly if any of the hsc2hs phases fail
> Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060703234356
> previously hsc2hs just exits with a non-zero exit code, now if any of
> the compilation, linking or runing phases fail then we get a message
> saying so and the failing command is printed.
> ]
> [Remember to free() memory on exit
> Simon Marlow <simonmar at microsoft.com>**20060808103110
> Patch mostly from Lennart Augustsson in #803, with additions to
> Task.c by me.
> ]
> [Fix pre-subsumption and pre-matching
> simonpj at microsoft.com**20060808091108
>
> The pre-subsuption and pre-matching functions should NEVER make bogus
> bindings of type variables, although they are free to bale out and make
> too few bindings.
>
> I hadn't been thiking carefully enough about this, and there were two
> separate bugs.
>
> - Firstly, in pre-subsumption we must ignore the 'theta'
> part of any overloaded type.
>
> - Second, in pre-matching, we must return the empty subustition
> on a mis-match, rather than returning the substitution so far.
>
> This bug showed up when compiling Data.Generics.Schemes.hs, and is
> imortalised in test tc206
>
> ]
> [Improve error message
> simonpj at microsoft.com**20060808080255
>
> Improve a little-used error message. Given
> f :: a -> a
> f x y = e
> the error says
>
> The equations for f have two arguments
> but its type `a -> a' has only one
>
> (Before, it said "its type `a' has only one" which is bogus.
>
> ]
> [Pull out common removal code, and detect does-not-exist correctly
> Ian Lynagh <igloo at earth.li>**20060710214308]
> [Create our own directory in the temporary directory to avoid various races
> Ian Lynagh <igloo at earth.li>**20060710204424]
> [Merge SysTools import declarations
> Ian Lynagh <igloo at earth.li>**20060709183850]
> [Don't freeze the dynamic flags used for filename generation before the pipeline starts
> Ian Lynagh <igloo at earth.li>**20060709145101]
> [#807: Removed double fclose of prof_file
> Ian Lynagh <igloo at earth.li>**20060708152424
> prof_file was being fclose'd in both gen_XML_logfile and hs_exit, leading
> to glibc complaining of a double free.
> ]
> [Add -fextended-default-rules and -fmono-pat-binds
> simonpj at microsoft.com**20060807112107
>
> Add -fextended-deafult-rules (in response to Don Stewart's message below),
> and document them.
>
> Also doucument -fmono-pat-binds/-fno-mono-pat-binds, which has been in
> GHC a few weeks now.
>
> (The two are in one patch because the diffs were so close together
> that Darcs combined them.)
>
> Simon
>
>
> From: Donald Bruce Stewart [mailto:dons at cse.unsw.edu.au]
> Sent: 07 August 2006 10:52
>
> While we're thinking about defaulting, I have a question..
>
> ghci uses an extended defaulting system, to allow things like:
> Prelude> reverse []
> []
> to work, and to have the right instance of Show found. The manual says:
>
> "..it is tiresome for the user to have to specify the type, so GHCi extends
> Haskell's type-defaulting rules (Section 4.3.4 of the Haskell 98 Report
> (Revised)) as follows. If the expression yields a set of type constraints
> that are all from standard classes (Num, Eq etc.), and at least one is
> either a numeric class or the Show, Eq, or Ord class, GHCi will try to use
> one of the default types, just as described in the Report. The standard
> defaulting rules require that one of the classes is numeric; the difference
> here is that defaulting is also triggered at least one is Show, Eq, or Ord."
>
> Currently, there is no way to get at this "extended" defaulting for compiled
> modules. However, I have a use case for in fact doing this.
>
> With runtime evaluated Haskell, embedding 'interpreters' (over hs-plugins) is
> easy. lambdabot, for example, implements a sandboxed haskell eval system. But
> it doesn't have access to the defaulting mechanism of ghci, so we have:
>
> dons:: > reverse []
> lambdabot:: Add a type signature
> dons:: > reverse [] :: [()]
> lambdabot:: []
>
> Which is annoying -- newbies wonder why they have to add these extra
> constraints to get a Show instance.
>
> I'm wondering, since the extended defaulting mechanisms are already
> implemented, could they be made available to compiled modules as well,
> perhaps using a flag, -fextended-defaulting?
>
> ]
> [add a comment
> Simon Marlow <simonmar at microsoft.com>**20060807143102]
> [Do pre-subsumption in the main subsumption check
> simonpj at microsoft.com**20060804214942
>
> This patch improves the subsumption check (in TcUnify.tc_sub) so that
> it does pre-subsumption first. The key code is in the case with
> guard (isSigmaTy actual_ty); note the new call to preSubType.
>
> Shorn of details, the question is this. Should this hold?
>
> forall a. a->a <= Int -> (forall b. Int)
>
> Really, it should; just instantiate 'a' to Int. This is just what
> the pre-subsumption phase (which used in function applications),
> will do.
>
> I did a bit of refactoring to achieve this.
>
> Fixes Trac #821. Test tc205 tests.
>
> ]
> [Make unification robust to a boxy type variable meeting itself
> simonpj at microsoft.com**20060801214302
>
> Previously, the implicit assumption in unification is that a boxy
> type variable could never occur on both sides of the unification,
> so that we'd never find
> bx5 :=: bx5
>
> But the pre-subsumption stuff really means that the same variable
> can occur on both sides. Consider
> forall a. a->Int <= bx5->Int
> Then pre-subumption will find a->bx5; and the full subsumption step
> will find bx5:=bx5.
>
> However, I think there is still no possiblity of a full occurs-check
> failure; that is,
> bx5 :=: Tree bx5
> Although I can't quite see how to prove it! So I've added a
> DEBUG test in uMetaVar to check for this case.
>
> ]
> [Added cabal-setup
> sven.panne at aedion.de**20060804142149]
> [Don't include the package name in a cost centre's module name
> Simon Marlow <simonmar at microsoft.com>**20060803093337
> This is mainly to restore the old behaviour, but also we shouldn't
> normally need the package name in a cost centre because only the
> "main" package normally has cost centres.
> ]
> [Add a new section "Getting the Source" to both HACKING and README. But what about win32 users?
> shae at ScannedInAvian.com**20060720152929]
> [savingOldConfig: add Exception.block for extra paranoia
> Simon Marlow <simonmar at microsoft.com>**20060801131027
>
> ]
> [Refactor ghc-pkg
> Ian Lynagh <igloo at earth.li>**20060729192946
> This patch fixes a couple of issues with the
> Be lazier in user config creation, and don't fail on missing configs.
> patch. It puts the createDirectoryIfMissing back in and removes assumptions
> that the package.conf file already exists.
> ]
> [No functionality changes
> Ian Lynagh <igloo at earth.li>**20060730105256
> Consistently used spaces rather than tabs.
> Removed trailing whitespace.
> Wrapped comments to fit in a standard terminal.
> ]
> [Add notes about unsafeCoerce
> simonpj at microsoft.com**20060731080922]
> [.hi-boot-5 is obsolete; the earliest GHC we support uses .hi-boot-6
> Simon Marlow <simonmar at microsoft.com>**20060728140809
>
>
> ]
> [update to match .lhs-boot
> Simon Marlow <simonmar at microsoft.com>**20060728140607]
> [get ReadP from the right place.
> Simon Marlow <simonmar at microsoft.com>**20060728140444
>
> ]
> [Improve error message for deriving
> simonpj at microsoft.com**20060727160832]
> [Lazy patterns are like wild-cards for overlap warnings
> simonpj at microsoft.com**20060727155009
>
> MERGE TO STABLE
>
> Fixes Trac #827
> Test is should_compiler/ds058
>
> ]
> [fix some problems with wired-in packages
> Simon Marlow <simonmar at microsoft.com>**20060727153802]
> [oops, remove old packages when updating
> Simon Marlow <simonmar at microsoft.com>**20060727150650]
> [fix symbols for GHC.PrimopWrappers
> Simon Marlow <simonmar at microsoft.com>**20060727134755]
> [a couple more symbols need package names
> Simon Marlow <simonmar at microsoft.com>**20060727102129]
> [Add missing import
> simonpj at microsoft.com**20060727085605]
> [Make -fcontext-stack into a dynamic flag
> simonpj at microsoft.com**20060727080422
>
> This allows you to put -fcontext-stack into an options pragma,
> as requested by Trac #829
>
> While I was at it, I added OptIntPrefix to the forms allowed
> in CmdLineParser.
>
> ]
> [Deal correctly with infix type constructors in GADT decls
> simonpj at microsoft.com**20060726225304]
> [Improve pretty printing of ConDecl
> simonpj at microsoft.com**20060726225223]
> [fix parse error (merge-o, I think)
> Simon Marlow <simonmar at microsoft.com>**20060726103526]
> [fix DEBUG build
> Simon Marlow <simonmar at microsoft.com>**20060726103433]
> [missed one symbol that needs a package name
> Simon Marlow <simonmar at microsoft.com>**20060726085844]
> [change wired-in Haskell symbols to include the package name
> Simon Marlow <simonmar at microsoft.com>**20060726084659]
> [Unbox the Unique stored in a Name
> Simon Marlow <simonmar at microsoft.com>**20060725141747
> I measured that this makes the comiler allocate a bit more, but it
> might also make it faster and reduce residency. The extra allocation
> is probably just because we're not inlining enough somewhere, so I
> think this change is a step in the right direction.
> ]
> [optimisations to newUnique
> Simon Marlow <simonmar at microsoft.com>**20060725140816
>
> It turned out that newUnique was wasting one node of the splittable
> uniq supply per invocation: it took the current supply, split it, used
> the unique from one half and stored the other half in the monad. In
> other words, the unique in the supply stored in the monad was never
> used.
>
> This optimisation fixes that and adds a bit of strictness, which
> together lead to small reduction in allocations by the compiler, and
> possibly an improvement in residency (hard to tell for sure when GCs
> move around).
> ]
> [tiny bit of extra strictness
> Simon Marlow <simonmar at microsoft.com>**20060725131201]
> [Make a SplitUniqSupply contain an Int# rather than an Int
> Simon Marlow <simonmar at microsoft.com>**20060725120252
> The I# constructor is always removed when we make a unique later
> anyway, so this just saves a bit of time and allocation.
> ]
> [Use -package-name rather than -ignore-package
> Simon Marlow <simonmar at microsoft.com>**20060725130913]
> [Remove most of the conflict checking and auto-hiding
> Simon Marlow <simonmar at microsoft.com>**20060725130850
> Now that the module restriction has been lifted, the auto-hiding is
> mostly not required. GHC itself automatically hides old versions of a
> package.
> ]
> [Generalise Package Support
> Simon Marlow <simonmar at microsoft.com>**20060725130154
>
> This patch pushes through one fundamental change: a module is now
> identified by the pair of its package and module name, whereas
> previously it was identified by its module name alone. This means
> that now a program can contain multiple modules with the same name, as
> long as they belong to different packages.
>
> This is a language change - the Haskell report says nothing about
> packages, but it is now necessary to understand packages in order to
> understand GHC's module system. For example, a type T from module M
> in package P is different from a type T from module M in package Q.
> Previously this wasn't an issue because there could only be a single
> module M in the program.
>
> The "module restriction" on combining packages has therefore been
> lifted, and a program can contain multiple versions of the same
> package.
>
> Note that none of the proposed syntax changes have yet been
> implemented, but the architecture is geared towards supporting import
> declarations qualified by package name, and that is probably the next
> step.
>
> It is now necessary to specify the package name when compiling a
> package, using the -package-name flag (which has been un-deprecated).
> Fortunately Cabal still uses -package-name.
>
> Certain packages are "wired in". Currently the wired-in packages are:
> base, haskell98, template-haskell and rts, and are always referred to
> by these versionless names. Other packages are referred to with full
> package IDs (eg. "network-1.0"). This is because the compiler needs
> to refer to entities in the wired-in packages, and we didn't want to
> bake the version of these packages into the comiler. It's conceivable
> that someone might want to upgrade the base package independently of
> GHC.
>
> Internal changes:
>
> - There are two module-related types:
>
> ModuleName just a FastString, the name of a module
> Module a pair of a PackageId and ModuleName
>
> A mapping from ModuleName can be a UniqFM, but a mapping from Module
> must be a FiniteMap (we provide it as ModuleEnv).
>
> - The "HomeModules" type that was passed around the compiler is now
> gone, replaced in most cases by the current package name which is
> contained in DynFlags. We can tell whether a Module comes from the
> current package by comparing its package name against the current
> package.
>
> - While I was here, I changed PrintUnqual to be a little more useful:
> it now returns the ModuleName that the identifier should be qualified
> with according to the current scope, rather than its original
> module. Also, PrintUnqual tells whether to qualify module names with
> package names (currently unused).
>
> Docs to follow.
> ]
> [comment formatting
> Simon Marlow <simonmar at microsoft.com>**20060725110519
>
> ]
> [unused import
> Simon Marlow <simonmar at microsoft.com>**20060706141349]
> [unused import
> Simon Marlow <simonmar at microsoft.com>**20060706141205]
> [remove more Addr bits
> Simon Marlow <simonmar at microsoft.com>**20060704151217]
> [unused import
> Simon Marlow <simonmar at microsoft.com>**20060704141319]
> [add default cases
> Simon Marlow <simonmar at microsoft.com>**20060704135444]
> [redundant import
> Simon Marlow <simonmar at microsoft.com>**20060704135435]
> [unused imports
> Simon Marlow <simonmar at microsoft.com>**20060704135117]
> [unused import
> Simon Marlow <simonmar at microsoft.com>**20060704134557]
> [remove unused bits, mostly to do with the Addr type
> Simon Marlow <simonmar at microsoft.com>**20060704124912]
> [In interface files, store FastStrings rather than OccNames where possible
> Simon Marlow <simonmar at microsoft.com>**20060724154826
> In all cases the namespace is known from the context, so this saves 1
> byte per variable binding/occurrence (a few percent per iface file).
> ]
> [Add -fmono-pat-binds, and make it the default
> simonpj at microsoft.com**20060722102245
>
> In Haskell 98, pattern bindings are generalised. Thus in
> (f,g) = (\x->x, \y->y)
> both f and g will get polymorphic types. I have become convinced
> that generalisation for pattern-bound variables is just a bridge
> toof far. It is (I claim) almost never needed, and it adds significant
> complication. (All the more so if we add bang patterns.)
>
> So the flag -fmono-pat-binds switches off generalisation for pattern
> bindings. (A single variable is treated as a degnerate funtction
> binding.)
>
> Furthremore, as an experiment, I'm making it the default. I want
> to see how many progarms fail with monomorphic pattern bindings.
>
> You can recover the standard behaviour with -fno-mono-pa-binds.
>
> ]
> [Fix RULES lossage
> simonpj at microsoft.com**20060722101756
>
> Don Stewart and Duncan Coutts encountered the following situation.
> f = <rhs>
> {-# RULES f ... #-}
> where f is not exported, but appears in the inlinings of other
> functions that are exported. Then what happened was that the desugarer
> produced this:
> M.f = f
> f = <rhs>
> where the rules get attached to the M.f. But since M.f's RHS is trivial
> (just f) it was unconditionally inlinined at all its call sites,
> thereby losing the RULES attached to it.
>
> This *is* a fragile aspect of rules. However this fix solves the
> problem by instead generating
> f = M.f
> M.f = <rhs>
>
> A pretty small chanage to the desugarer does the job. It still feels
> a little fragile, bt it's certainly more robust than before.
>
> ]
> [Fix broken regex
> Simon Marlow <simonmar at microsoft.com>**20060721111144
> Don't know how I managed to use this before... maybe a different regex
> library.
> ]
> [fix bug in sample code
> Simon Marlow <simonmar at microsoft.com>**20060721083200]
> [fix eran error message by reordering a couple of tests
> simonmar at microsoft.com**20060719111638]
> [Use a recursive error handler in case the exception causes more exceptions.
> Lemmih <lemmih at gmail.com>**20060717232553]
> [Check for overlap-flag differences in hi files
> simonpj at microsoft.com**20060714163843
>
> MERGE TO STABLE
>
> I'd forgotten to compare the per-instance overlap flag when
> comparing interface files, and that meant that consequential
> recompilations weren't being triggered when the only change
> was to add -fallow-overlapping-instances
>
> Fixes Trac bug #824
>
>
> ]
> [Add a clarification about overlapping instances in the manual
> simonpj at microsoft.com**20060714143220]
> [Comments and import trimming
> simonpj at microsoft.com**20060712153306]
> [Experimental flag -fdicts-cheap
> simonpj at microsoft.com**20060712153204
>
> This experimental flag, -fdicts-cheap, makes a let-binding that bind a
> value of dictionary type look cheap. That in turn leads to more
> eta expansion. Instead of
> f = /\a. \(d1:Ord a). let d2:Ord [a] = dfOrd a d1 in
> \(x:a). <stuff>
> which has arity 1, you get
> f = /\a. \(d1:Ord a). \(x:a).
> let d2:Ord [a] = dfOrd a d1 in <stuff>
> Now f has arity 2.
>
> This can cretainly waste dictionary-construction work, if f is
> partially applied to its dictionary argument. However it has knock-on
> effects. Because f has arity 2, we won't float (f Int d) out of
> \x. h (f Int d)
> Floating f out of this lambda makes it impossible for an h/f fusion
> rule to fire; and this unexpected loss of RULE application was the
> immediate reason for implementing this flag. (Roman Leshchinskiy came
> across this when working on array fusion.)
>
>
> I've implemented the change only in CoreUtils.arityType, which
> only affects eta expansion. I thought of putting the change in
> exprIsCheap, which is a more systematic place (the former calls
> the latter) but
>
> a) I wanted this under flag control, and the flags
> are not readily available to all callers of exprIsCheap
>
> b) I'm not 100% convinced that this change is a good
> idea, so it's reasonable to do the narrowest change
> that solves the immediate problem.
> ]
> [document that -fglasgow-exts is needed for RULES to work
> Malcolm.Wallace at cs.york.ac.uk**20060712093907]
> [do a better job of ignoring unrecognised pragmas
> Simon Marlow <simonmar at microsoft.com>**20060712083550]
> [Don't z-encode module names in external-core output
> Jan Rochel <jan.rochel at stud.uka.de>**20060706131109]
> [re-add -fvia-C
> Simon Marlow <simonmar at microsoft.com>**20060710081522
> There are still some fixes required to get the threaded RTS compilable
> with the NCG, and apparently there are problems on 32-bit archs too.
>
> ]
> [Be lazier in user config creation, and don't fail on missing configs.
> Ian Lynagh <igloo at earth.li>**20060624230800]
> [Z-Encode external-core output
> Jan Rochel <jan.rochel at stud.uka.de>**20060702214438
>
> HEAD doesn't z-encode external-core output (unlike 6.4). I suppose, that
> this is unwanted behaviour. It probably results from this patch:
>
> ========================================================================
> Fri Jan 6 17:30:19 CET 2006 simonmar
> * [project @ 2006-01-06 16:30:17 by simonmar]
> Add support for UTF-8 source files
>
> [...]
>
> Z-encoding has been moved right to the back end. Previously we
> used to Z-encode every identifier on the way in for simplicity,
> and only decode when we needed to show something to the user.
> Instead, we now keep every string in its UTF-8 encoding, and
> Z-encode right before printing it out.
>
> [...]
> ========================================================================
>
> Greetings
> Jan
> ]
> [Add %local-tag to external core output
> Jan Rochel <jan.rochel at stud.uka.de>**20060702204559
>
> Hello, this is my first patch contributed to GHC. If there are any
> inadequacies about it (maybe like this introductory disclaimer), please
> let me know about it.
>
> So, the need for this patch arose, while I was involved with processing
> hcr files (external core output) and I noticed, that the output didn't
> fully conform to the specification [1].
> No %local-tags were used, which turned out to be a real nuisance as it
> was not possible to determine which VDEFs can be erased in a further
> optimization process and which ones are exported by the module.
>
> Since the specification does not define the meaning of the %local-tag, I
> assume, it makes sense, that it tags all functions, that are not
> exported by the module.
>
> The patch does not fully comply to the specification, as in my
> implementation a local tag may appear before a VDEF but not before a
> VDEFG.
>
> [1] An External Representation for the GHC Core Language
> (DRAFT for GHC5.02), page 3, line 1
>
> Greetings
> Jan
> ]
> [Remove bashisms from darcs-all
> Alec Berryman <alec at thened.net>**20060703012911
>
> darcs-all may now be run with any POSIX-compatible /bin/sh.
> ]
> [Fix for warning message (bug #812)
> Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060704163413
> say "{-# SOURCE #-}" rather than "{- SOURCE -}" in warning message.
> Fixes http://hackage.haskell.org/trac/ghc/ticket/812
> ]
> [The dict-bindings in an IPBinds need not be in dependency order
> simonpj at microsoft.com**20060703151517
>
> This appears to be a long-standing bug, discovered by BlueSpec
> (ravi at bluespec.com), Trac bug #795
>
> The problem was that in an IP binding group, the dict bindings
> aren't necessarily in dependency order; and if they aren't
> we get a core-lint error.
>
> Test tc203 checks this case. (Though whether it shows up at
> all depends a bit on accidental factors of binding ordering.)
>
> ]
> [x86 needs -fno-unit-at-a-time too
> Simon Marlow <simonmar at microsoft.com>**20060704083308
> Fixes #809
> ]
> [x86-64: fix a problem exposed by negative offsets in vector tables
> Simon Marlow <simonmar at microsoft.com>**20060629140608
> static relative offsets (eg .long l1-l2) are restricted to 32 bits on
> x86-64 due to lack of support in the linker. The codegen, NCG and
> runtime work around this, using 32-bit offsets instead of 64.
> However, we were missing a workaround for vector tables, and it
> happened to work by accident because the offsets were always positive
> and resolved by the assembler. The bug was exposed by using the NCG
> to compile the RTS, where the offsets became negative, again by
> accident.
> ]
> [No longer force -fvia-C for the RTS, it can now be compiled with the NCG
> Simon Marlow <simonmar at microsoft.com>**20060629135836]
> [Replace inline C functions with C-- macros in .cmm code
> Simon Marlow <simonmar at microsoft.com>**20060629134726
> So that we can build the RTS with the NCG.
> ]
> [remove conditionals from definition of StgRegTable
> Simon Marlow <simonmar at microsoft.com>**20060629134405
> so that we can calculate deterministic offsets to some of the fields
> of Capability.
> ]
> [mpz_foo() functions are really called __gmpz_foo() in GMP
> Simon Marlow <simonmar at microsoft.com>**20060629122217
> gmp.h #defines mpz_foo to __gmpz_foo, so the real ABI is __gmpz_foo,
> so that is what we must invoke in order to be portable here.
> Similarly for mpn --> __gmpn.
> ]
> [use the new "prim %write_barrier()" in .cmm instead of calls to wb()
> Simon Marlow <simonmar at microsoft.com>**20060629120526]
> [fix some problems with the fixup block code
> Simon Marlow <simonmar at microsoft.com>**20060629120210
> We weren't handling InBoth properly. InBoth needs to be expanded to
> appropriate InReg/InMem locations *before* building the interference
> graph, otherwise an InBoth will not be seen to conflict with other
> InReg/InMem locations.
> ]
> [small optimisation: eliminate more register-to-register moves
> Simon Marlow <simonmar at microsoft.com>**20060629120029]
> [new syntax: "prim %OP (args)" for using CallishMachOps in .cmm
> Simon Marlow <simonmar at microsoft.com>**20060629115949
>
>
> ]
> [add MO_WriteBarrier to CallishMachOps
> Simon Marlow <simonmar at microsoft.com>**20060629115837
> This will let us express write barriers in C--
> ]
> [Use -fno-strict-aliasing for *all* C files in the runtime
> Simon Marlow <simonmar at microsoft.com>**20060629082902
> as a precautionary measure. It is definitely required for GC.c,
> but it may well become necessary for other files in the future due to
> our (mis-)use of the C "type system".
> ]
> [the unlifted kind
> Simon Marlow <simonmar at microsoft.com>**20060623152626]
> [fix a lint-o
> Simon Marlow <simonmar at microsoft.com>**20060620151901]
> [fix sloppy conditionals
> Simon Marlow <simonmar at microsoft.com>**20060620151758]
> [fix sloppy conditionals
> Simon Marlow <simonmar at microsoft.com>**20060620151039]
> [fix a few sloppy conditionals caught by new test in CmmLint
> Simon Marlow <simonmar at microsoft.com>**20060620150618]
> [flattenCgStmts: fix a case of empty code blocks being generated
> Simon Marlow <simonmar at microsoft.com>**20060620150520]
> [improve a panic message
> Simon Marlow <simonmar at microsoft.com>**20060620141219]
> [check that the argument to CmmCondBranch is really a conditional
> Simon Marlow <simonmar at microsoft.com>**20060620141204]
> [Generate a new unique for each label
> Simon Marlow <simonmar at microsoft.com>**20060620140106]
> [Remove long-redundant FieldLabel.lhs
> simonpj at microsoft.com**20060629105321]
> [Add comments to SpecConstr
> simonpj at microsoft.com**20060627161520]
> [fix up slop-overwriting for THUNK_SELECTORS in DEBUG mode
> Simon Marlow <simonmar at microsoft.com>**20060627123951]
> [Make SpecConstr work better for nested functions
> simonpj at microsoft.com**20060627094742
>
> In SpecConstr.scBind, we should pass the optimised body (body') to
> specialise, not the un-optimised one. In this way we'll benefit from
> specialising any nested functions inside body.
>
> Discovered by Roman.
>
> ]
> [More SpecConstr tuning
> simonpj at microsoft.com**20060626201709
>
> For some reason, SpecConstr wasn't taking account of let-bound constructors:
> let v = Just 4
> in ...(f v)...
>
> Now it does. An easy fix fortunately.
>
> ]
> [Improve consistency checking for derived instances
> simonpj at microsoft.com**20060626100034
>
> This patch arranges that derived instances use the same instance-decl
> checking code as user-defined instances. That gives greater consistency
> in error messages.
>
> Furthermore, the error description if this consistency check fails is now
> much more explicit. For example, drvfail003 now says
> Variable occurs more often in a constraint than in the instance head
> in the constraint: Show (v (v a))
> (Use -fallow-undecidable-instances to permit this)
> In the derived instance
> instance (Show (v (v a))) => Show (Square_ v w a)
>
> ]
> [Slight improvement in TH error reporting
> simonpj at microsoft.com**20060626095952]
> [Improve location info when typechecking interface fiels
> simonpj at microsoft.com**20060614114813]
> [Fix a bug in the pretty printing of class declarations
> davve at dtek.chalmers.se**20060625160826]
> [Improve RULE matching a bit more
> simonpj at microsoft.com**20060624160421
>
> Consider this example (provided by Roman)
>
> foo :: Int -> Maybe Int -> Int
> foo 0 (Just n) = n
> foo m (Just n) = foo (m-n) (Just n)
>
> SpecConstr sees this fragment:
>
> case w_smT of wild_Xf [Just A] {
> Data.Maybe.Nothing -> lvl_smf;
> Data.Maybe.Just n_acT [Just S(L)] ->
> case n_acT of wild1_ams [Just A] { GHC.Base.I# y_amr [Just L] ->
> $wfoo_smW (GHC.Prim.-# ds_Xmb y_amr) wild_Xf
> }};
>
> and correctly generates the rule
>
> RULES: "SC:$wfoo1" [0] __forall {y_amr [Just L] :: GHC.Prim.Int#
> sc_snn :: GHC.Prim.Int#}
> $wfoo_smW sc_snn (Data.Maybe.Just @ GHC.Base.Int (GHC.Base.I# y_amr))
> = $s$wfoo_sno y_amr sc_snn ;]
>
> BUT we must ensure that this rule matches in the original function!
> Note that the call to $wfoo is
> $wfoo_smW (GHC.Prim.-# ds_Xmb y_amr) wild_Xf
>
> During matching we expand wild_Xf to (Just n_acT). But then we must also
> expand n_acT to (I# y_amr). And we can only do that if we look up n_acT
> in the in-scope set, because in wild_Xf's unfolding it won't have an unfolding
> at all.
>
> Happily, fixing the bug is easy: add a call to 'lookupRnInScope' in the
> (Var v2) case of 'match'.
>
> ]
> [--enable-src-tree-haddock and friends are no longer required
> Simon Marlow <simonmar at microsoft.com>**20060623113303
> Happy, Alex and Haddock are built separately using Cabal now.
> ]
> [fix a couple of bugs in markSparkQueue (#799)
> Simon Marlow <simonmar at microsoft.com>**20060623092044]
> [pull in STABLE(!) tweaks
> sof at galois.com**20060622202734]
> [fix for when path to GHC contains spaces, from #695
> Simon Marlow <simonmar at microsoft.com>**20060622131700]
> [Comment only
> simonpj at microsoft.com**20060621223940]
> [Transfer INLINE to specialised functions
> simonpj at microsoft.com**20060621223637
>
> When the Specialise pass generates a specialised copy of a function,
> it should transfer the INLINE information to the specialised function.
> Otherwise, whether or not the INLNE happens can depend on whether
> specialisation happens, which seems wrong. See Note [Inline specialisation]
> in Specialise.lhs
>
> Here's the example Roman reported
>
> primWriteMU :: UAE e => MUArr e s -> Int -> e -> ST s ()
> {-# INLINE primWriteMU #-}
> primWriteMU = writeMBU . unMUAPrim
> ------
>
> The problem is that primWriteMU doesn't get inlined *sometimes*, which
> results in code like
>
> case Data.Array.Parallel.Unlifted.Flat.UArr.$sprimWriteMU
> @ s11_X1nJ
> marr_s25s
> (GHC.Base.I# sc_s27F)
> GHC.Base.False
> new_s_a1Db
> of wild3_a1Dd { (# new_s1_X1F9, r_a1Dc #) -> ...
>
> Note the fact that we have a call to the *specialised* $sprimWriteMU.
>
> ]
> [Arity and eta-expansion tuning
> simonpj at microsoft.com**20060621205855
>
> Roman found that
> loop :: STRef s a -> Int -> ST s Int
> loop ref n = case n of
> 0 -> return n
> n -> loop ref (n-1)
> wasn't eta-expanding nicely, despite the 'state hack'
> (see Id.isStateHackType). The reason was two-fold:
>
> a) a bug in CoreUtils.arityType (the Var case)
>
> b) the arity of a recursive function was not being
> exposed in its RHS (see commments with
> SimplEnv.addLetIdInfo
>
> The commit fixes both.
>
> ]
> [documentation for TH w/ profiling
> Simon Marlow <simonmar at microsoft.com>**20060621112523]
> [Allow Template Haskell to be used with -prof
> Simon Marlow <simonmar at microsoft.com>**20060621110436
>
> In order for this to work, you need to build the program first in the
> normal way (without -prof), and then again with -prof and a suitable
> -osuf (eg. -osuf p_o). The compiler will pick up the object files
> from the normal way for running TH expressions, when it sees -prof
> together with -osuf. If you omit the -osuf, you get an error message:
>
> TH_genEx.hs:12:2:
> Dynamic linking required, but this is a non-standard build (eg. prof).
> You need to build the program twice: once the normal way, and then
> in the desired way using -osuf to set the object file suffix.
>
> If you use -osuf, but haven't built the program the normal way first,
> then you see:
>
> TH_genEx.hs:12:2:
> cannot find normal object file `TH_genExLib.o'
> while linking an interpreted expression
>
> Documentation to follow.
>
> Fixes: #651
> ]
> [add decl for stg_block_throwto_ret
> Simon Marlow <simonmar at microsoft.com>**20060620083410]
> [comment out a non-true assertion
> Simon Marlow <simonmar at microsoft.com>**20060616140750]
> [make compilation a little less noisy
> Simon Marlow <simonmar at microsoft.com>**20060616140652]
> [allow the max number of workers to scale with +RTS -N
> Simon Marlow <simonmar at microsoft.com>**20060616140633]
> [fix one-character error in stack check
> Simon Marlow <simonmar at microsoft.com>**20060616135621]
> [add STM support to the new throwTo mechanism
> Simon Marlow <simonmar at microsoft.com>**20060616111937]
> [remove duplicate way names (-debug -debug didn't work)
> Simon Marlow <simonmar at microsoft.com>**20060616110258]
> [Asynchronous exception support for SMP
> Simon Marlow <simonmar at microsoft.com>**20060616103342
>
> This patch makes throwTo work with -threaded, and also refactors large
> parts of the concurrency support in the RTS to clean things up. We
> have some new files:
>
> RaiseAsync.{c,h} asynchronous exception support
> Threads.{c,h} general threading-related utils
>
> Some of the contents of these new files used to be in Schedule.c,
> which is smaller and cleaner as a result of the split.
>
> Asynchronous exception support in the presence of multiple running
> Haskell threads is rather tricky. In fact, to my annoyance there are
> still one or two bugs to track down, but the majority of the tests run
> now.
> ]
> [make rmp_tmp_w an StgWord instead of StgInt
> Simon Marlow <simonmar at microsoft.com>**20060616102311]
> [__compat_long_path_size(): have proto and defn agree on return type
> sof at galois.com**20060614164650]
> [call wakeUpRts() in the correct place
> Simon Marlow <simonmar at microsoft.com>**20060614134728]
> [readerProc: split up text output using host's line termination convention
> sof at galois.com**20060613232605]
> [Improve pretty-printing for bags
> simonpj at microsoft.com**20060612114020]
> [Make scoped type variables work for default methods
> simonpj at microsoft.com**20060612113855
>
> Consider
> class C a where
> op :: forall b. a -> b -> b
> op = <rhs>
>
> Then 'b' should be in scope in <rhs>. I had omitted this case.
> This patch fixes it.
>
> ]
> [And move 'Chasing ...' messages into verbosity 2 as well
> Don Stewart <dons at cse.unsw.edu.au>**20060612084656]
> [Emit 'linking not required' messages only with -v 2 or above.
> Don Stewart <dons at cse.unsw.edu.au>**20060611071041
>
> Similar in philosophy to the 'Skipping' patch, this is another case of
> printing noisy messages when no work is being done. This patch makes the
> building-when-nothing-to-do case smoother.
>
> ]
> [Don't emit 'Skipping' messages unless -v2 or higher is on
> Don Stewart <dons at cse.unsw.edu.au>**20060610145713
>
> Following GNU make, this patch makes GHC not emit messages about modules
> its skipping. This makes builds much quieter, and its a lot easier to
> work out what effects a change had on the code.
>
> The current behaviour can be recovered with -v2
>
> ]
> [fix the stage3 build
> Simon Marlow <simonmar at microsoft.com>**20060612084114]
> [oops, undo accidental commit of version number
> Simon Marlow <simonmar at microsoft.com>**20060612083520]
> [Move readline configuration into the readline package
> Simon Marlow <simonmar at microsoft.com>**20060609135840]
> [fix possible ^C problems
> Simon Marlow <simonmar at microsoft.com>**20060608144457
> Calling prodAllCapabilities() from interruptStgRts() was wrong, for
> the same reasons that we stopped doing it in handle_tick(). We now
> use the same mechanism (send a byte down the pipe to the IO manager
> thread), but abstract it in a wakeUpRts() function in the scheduler.
> ]
> [New tracing interface
> Simon Marlow <simonmar at microsoft.com>**20060608144210
> A simple interface for generating trace messages with timestamps and
> thread IDs attached to them. Most debugging output goes through this
> interface now, so it is straightforward to get timestamped debugging
> traces with +RTS -vt. Also, we plan to use this to generate
> parallelism profiles from the trace output.
> ]
> [fix warnings
> Simon Marlow <simonmar at microsoft.com>**20060608143635]
> [fix warnings
> Simon Marlow <simonmar at microsoft.com>**20060608143520]
> [Make it so that StgWord/StgInt are longs
> Simon Marlow <simonmar at microsoft.com>**20060608143438
> This means we can use a %ld format specifier for StgWord/StgInt with
> printf and not get shouted at by gcc.
> ]
> [more warning fixage
> Simon Marlow <simonmar at microsoft.com>**20060608142844]
> [fix a warning
> Simon Marlow <simonmar at microsoft.com>**20060608141903]
> [fix some warnings
> Simon Marlow <simonmar at microsoft.com>**20060608140201]
> [Add new RTS flags for tracing:
> Simon Marlow <simonmar at microsoft.com>**20060608130101
>
> -vs Trace scheduler events (see also -Ds with -debug)
> -vt Time-stamp trace messages
>
> the intention is that we will pipe the -vs output into a
> profile-generating tool. This commit includes the flags only,
> functionality to follow.
> ]
> [codegen debug flag (+RTS -Dc) was unused; remove it
> Simon Marlow <simonmar at microsoft.com>**20060607145848]
> [add 'const' modifiers to types where appropriate
> Simon Marlow <simonmar at microsoft.com>**20060607145800]
> [rearrange casts to avoid gcc warnings
> Simon Marlow <simonmar at microsoft.com>**20060607145626]
> [warning fix
> Simon Marlow <simonmar at microsoft.com>**20060607141013]
> [remove //@ stuff
> Simon Marlow <simonmar at microsoft.com>**20060607134553]
> [Gather timing stats for a Task when it completes.
> Simon Marlow <simonmar at microsoft.com>**20060607124407
> Previously we did this just for workers, now we do it for the main
> thread and for forkOS threads too.
> ]
> [Remove unnecessary SCHED_INTERRUPTED scheduler state
> Simon Marlow <simonmar at microsoft.com>**20060607115105
>
> ]
> [fix a warning
> Simon Marlow <simonmar at microsoft.com>**20060427130048]
> [re-enable time package on Windows
> simonmar at microsoft.com**20060606124656]
> [fix a case of "naughty I386 byte reg"
> Simon Marlow <simonmar at microsoft.com>**20060606112357
> The fix is a little hacky, because we don't have support for register
> classes in general, but it's an improvement.
> ]
> [A better icon for GHCi
> Neil Mitchell <http://www.cs.york.ac.uk/~ndm/>**20060602145913]
> [markSignalHandlers(): implementation was unnecessary, and had a bug
> simonmar at microsoft.com**20060606085805
>
> There's no need to mark the signal handler here, because it is stored
> in a StablePtr and hence is a root anyway. Furthermore, the call to
> evac() was passing the address of a local variable, which turned out
> to be harmless for copying GC, but fatal for compacting GC: compacting
> GC assumes that the addresses of the roots are the same each time.
>
> Fixes: possibly #783, possibly #776, definitely #787
> ]
> [disable time package on mingw to unblock builds.
> sof at galois.com**20060605165125]
> [Remove one more IfaceInlineCall
> simonpj at microsoft.com**20060605154305]
> [Remove InlinePlease and add inline function and RULE
> simonpj at microsoft.com**20060605114900
>
> For a long time GHC has had some internal mechanism designed to support
> a call-site inline directive, thus
> inline f xs
> makes f be inlined at the call site even if f is big.
>
> However, the surface syntax seems to have gone, and in any case it
> can be done more neatly using a RULE.
>
> This commit:
> * Removes the InlineCall constructor for Note
> and InlinePlease for SimplCont
>
> * Adds a new known-key Id called 'inline', whose definition in
> GHC.Base is just the identity function
>
> * Adds a built-in RULE in PrelRules that rewrites (inline f) to
> the body of f, if possible
>
> * Adds documentation
>
> NOTE: I have not tested this (aeroplane work). Give it a try!
>
> ]
> [Fix typo
> simonpj at microsoft.com**20060605114719]
> [fix type of allocateExec
> Simon Marlow <simonmar at microsoft.com>**20060601125406]
> [stgMallocBytesRWX --> allocateExec
> Simon Marlow <simonmar at microsoft.com>**20060601123314]
> [fix non-Windows build
> Simon Marlow <simonmar at microsoft.com>**20060601121435]
> [Win32: set up the console code pages
> simonmar at microsoft.com**20060601115423
> This may help with entering non-ASCII characters at the GHCi prompt,
> but as usual with Unicode there's no simple solution that just works.
> See commentary in InteractiveUI.hs for more details.
> ]
> [add a type signature
> simonmar at microsoft.com**20060601115335]
> [improvements to lexical error reporting
> simonmar at microsoft.com**20060601115306]
> [commented-out debugging code
> simonmar at microsoft.com**20060601115247]
> [understand Latin-1 symbols
> simonmar at microsoft.com**20060601115149]
> [stgMallocBytesRWX --> allocateExec
> Simon Marlow <simonmar at microsoft.com>**20060531091202
> Not sure how I left this out of the previous patch, oh well.
> ]
> ['time' depends on 'Win32' when Windows=YES; mirror that
> sof at galois.com**20060530223009
> when setting up SUBDIRS.
> ]
> [Win32: add _imp__tzname
> simonmar at microsoft.com**20060530101452]
> [fix Win32 build
> simonmar at microsoft.com**20060530101418]
> [replace stgMallocBytesRWX() with our own allocator
> Simon Marlow <simonmar at microsoft.com>**20060530100211
>
> See bug #738
>
> Allocating executable memory is getting more difficult these days. In
> particular, the default SELinux policy on Fedora Core 5 disallows
> making the heap (i.e. malloc()'d memory) executable, although it does
> apparently allow mmap()'ing anonymous executable memory by default.
>
> Previously, stgMallocBytesRWX() used malloc() underneath, and then
> tried to make the page holding the memory executable. This was rather
> hacky and fails with Fedora Core 5.
>
> This patch adds a mini-allocator for executable memory, based on the
> block allocator. We grab page-sized blocks and make them executable,
> then allocate small objects from the page. There's a simple free
> function, that will free whole pages back to the system when they are
> empty.
>
> ]
> [add time subdir
> Simon Marlow <simonmar at microsoft.com>**20060530070721]
> [Make rule-matching robust to lets
> simonpj at microsoft.com**20060525154447
>
> Consider a RULE like
> forall arr. splitD (joinD arr) = arr
>
> Until now, this rule would not match code of form
> splitD (let { d = ... } in joinD (...d...))
> because the 'let' got in the way.
>
> This patch makes the rule-matcher robust to lets. See comments with
> the Let case of Rules.match.
>
> This improvement is highly desirable in the fusion rules for NDP
> stuff that Roman is working on, where we are doing fusion of *overloaded*
> functions (which may look lazy). The let expression that Roman tripped
> up on was a dictioary binding.
>
> ]
> [Improve error reporting in interface typechecking
> simonpj at microsoft.com**20060525094545]
> [Fix egregious and long-standing tidying bug
> simonpj at microsoft.com**20060525094300
>
> A typo in tidyAlt meant that we could get shadowing of occurrence names
> in the output of tidying. (Specifically, of existentially bound type
> variables.) That in turn meant that an IfaceExpr could have shadowing, so
> when the IfaceExpr was read in, it meant something different.
> That in turn led to an obscure crash like:
> Panic: tcIfaceTyVar
>
> Anyway, this fixes it. MERGE into 6.4.3.
>
>
> ]
> [Prune imports
> simonpj at microsoft.com**20060525094251]
> [performGC_(): don't use the existing Task, always grab a new one
> Simon Marlow <simonmar at microsoft.com>**20060525090035]
> [Better control of the IO manager thread; improvements to deadlock checking
> Simon Marlow <simonmar at microsoft.com>**20060524122839
>
> In the threaded RTS on *nix platforms:
>
> - we now start the IO manager thread eagerly at startup time
> (previously was started on demand).
>
> - we now ask the IO manager thread to stop at shutdown
>
> - In Timer.c:handle_tick, if it looks like we might be in a
> deadlock, instead of calling prodOneCapability() which was known to be
> wrong, we now send a byte down the IO manager's pipe to wake it up.
>
> This also avoids a case of double-acquisition of a mutex, which
> happened if prodOneCapability() was called while the current thread
> was holding a mutex.
> ]
> [TARGET_OS ==> HOST_OS
> Simon Marlow <simonmar at microsoft.com>**20060524122103]
> [fix a _TARGET_ARCH that should be _HOST_ARCH
> Simon Marlow <simonmar at microsoft.com>**20060524122022]
> [we don't need OutOfHeapHook(), and the version in the RTS has a better message
> Simon Marlow <simonmar at microsoft.com>**20060524112007]
> [Bug-fix to patch "Run simplifier before SpecConstr"
> simonpj at microsoft.com**20060523130022]
> [Run simplifier before SpecConstr
> simonpj at microsoft.com**20060523085546
>
> Arrange to run the simplifier before SpecConstr, to (almost entirely)
> eliminate shadowing.
>
> Reason: otherwise SpecConstr can generate a RULE that never
> files; and LiberateCase specifically *does* generate lots of shadowing.
>
> See Note [Shadowing] in SpecConstr.lhs
>
>
> ]
> [Prune imports
> simonpj at microsoft.com**20060522192532]
> [Add deShadowBinds
> simonpj at microsoft.com**20060522192404
>
> Add CoreSubst.deShadowBinds, which removes shadowing from
> a Core term. I thought we wanted it for SpecConstr, but in
> fact decided not to use it. Nevertheless, it's a useful sort
> of function to have around, and it has a particularly simple
> definition!
>
> ]
> [Inline in a call argument if the caller has RULES
> simonpj at microsoft.com**20060522163255
>
> This is an experimental change suggested by Roman. Consider
>
> {-# INLINE f #-}
> f x y = ...
>
> ....(g (f a b))...
>
> where g has RULES. Then we'd like to inline f, even though the context of
> the call is otherwise 100% boring -- g is lazy and we know nothing about
> x and y.
>
> This patch just records in the continuation that f has rules. And does so
> somewhat recursively...e.g.
>
> ...(g (h (f a b)))...
>
> where g has rules.
>
>
> ]
> [Add idHasRules
> simonpj at microsoft.com**20060522163109
>
> Add Id.idHasRules :: Id -> Bool, with the obvious semantics.
> This patch makes sense by itself, but it's just a tidy-up.
>
>
> ]
> [Transmit inline pragmas faithfully
> simonpj at microsoft.com**20060522110256
>
> *** WARNING: you will need to recompile your libraries
> *** when you pull this patch (make clean; make)
>
> The inline pragma on wrapper-functions was being lost; this patch
> makes it be transmitted faithfully.
>
> The reason is that we don't write the full inlining for a wrapper into
> an interface file, because it's generated algorithmically from its strictness
> info. But previously the inline pragma as being written out only when we
> wrote out an unfolding, and hence it was lost for a wrapper.
>
> This makes a particular difference when a function has a NOINLINE[k] pragma.
> Then it may be w/w'd, and we must retain the pragma. It's the only consistent
> thing to do really.
>
> The change does change the binary format of interface files, slightly.
> So you need to recompile all your libraries.
>
> ]
> [Improved RULE lhs typechecking; less dictionary sharing
> simonpj at microsoft.com**20060519103433
>
> See long comment with Simplify.tcSimplifyRuleLhs.
>
> Here's the key example:
>
> RULE "g" forall x y z. g (x == y) (y == z) = ...
>
> Here, the two dictionaries are *identical*, but we do NOT WANT to
> generate the rule
>
> RULE forall x::a, y::a, z::a, d1::Eq a
> f ((==) d1 x y) ((>) d1 y z) = ...
>
> Instead we want
>
> RULE forall x::a, y::a, z::a, d1::Eq a, d2:Eq a
> f ((==) d1 x y) ((>) d2 y z) = ...
>
> ]
> [Bug-fix for infix function definitions (parse/rename)
> simonpj at microsoft.com**20060519095022
>
> Fix a crash provoked by
>
> x `op` y = x
> op = True
>
> The trouble was that there is currently a single 'infix' flag for the
> whole group; and RnTypes.checkPrecMatch was therefore expecting the
> second eqn to have two args.
>
> This fixes the crash, and also or-s the infix flags for the various
> eqns together; previously it was just taken from the first eqn, which
> was wrong.
>
>
> ]
> [Remove misleading comments
> simonpj at microsoft.com**20060519094936]
> [Fix a nasty continuation-duplication bug
> simonpj at microsoft.com**20060518163617
>
> For a long-time mkDupableCont has had a bug that allows it to duplicate
> an arbitrary continuation, which it should not do, of course.
>
> The bug was that in the Select case of mkDupableCont we were calling
> prepareCaseCont, which did not duplicate the continuation if there is
> but a single alternative. This is quite right in the case of the call
> in rebuildCase, but quite wrong in mkDupableCont.
>
> The bug manifest as follows. In the expression
> f (case ... of { ..several alts.. })
> (when f is strict), we should transform to
> f (...transformed arg...)
> The application of f should not be pushed down (see notes with the
> ArgOf case of mkDupableCont. But that was not happening in an example
> like this (see how the call to f is pushed inwards).
>
> f (a `div` abs (b::Int))
> --->
> case b_afT of wild_aHa { GHC.Base.I# x_aHc ->
> let {
> $j_sIe :: GHC.Prim.Int# -> GHC.Base.Int
> []
> $j_sIe =
> \ (ds1_aHr [Nothing OneShot] :: GHC.Prim.Int#) ->
> Foo7.f
> (case ds1_aHr of ds2_aHq {
> __DEFAULT ->
> case a_afS of wild1_aHM { GHC.Base.I# x_aHO ->
> GHC.Base.I# (GHC.Base.divInt# x_aHO ds2_aHq)
> };
> 0 -> GHC.Err.divZeroError @ GHC.Base.Int
> })
> } in
> case GHC.Prim.>=# x_aHc 0 of wild1_aHe [Dead Nothing] {
> GHC.Base.False ->
> let {
> ds1_aHr :: GHC.Prim.Int#
> []
> ds1_aHr = GHC.Prim.negateInt# x_aHc
> } in $j_sIe ds1_aHr;
> GHC.Base.True -> $j_sIe x_aHc
> }
> }
>
>
> ]
> [Make simplifier report which phase it is doing in -ddump output
> simonpj at microsoft.com**20060518163448]
> [Comments only
> simonpj at microsoft.com**20060518163425]
> [take parsec out of $(GhcBootLibs)
> Simon Marlow <simonmar at microsoft.com>**20060518131506]
> [Improve documentation of INLINE pragmas
> simonpj at microsoft.com**20060518113212]
> [a couple of additions
> Simon Marlow <simonmar at microsoft.com>**20060518104025]
> [#define _REENTRANT 1 (needed to get the right errno on some OSs)
> Simon Marlow <simonmar at microsoft.com>**20060518103715
> Partial fix for hanging problems on Solaris and possibly *BSD.
> A similar fix is also required to libraries/base/includes/HsBase.h.
> ]
> [Declare this file to be POSIX
> Simon Marlow <simonmar at microsoft.com>**20060518102858
> This is simpler than using _POSIX_THREAD_SEMANTICS on Solaris to get
> the right version of ctime_r().
> ]
> [somewhere to keep track of release notes for 6.6
> Simon Marlow <simonmar at microsoft.com>**20060518074415]
> [Newtype data constructors get a compulsory unfolding
> simonpj at microsoft.com**20060517155009
>
> With this change, newtype data constructors get a "compulsory" unfolding,
> which means that they *must* be inlined, and no top-level definition of
> the constructor is provided at all. Since these constructors are no-ops,
> I'm not sure why this wasn't the case all along.
>
> ]
> [White space only
> simonpj at microsoft.com**20060517154936]
> [Retain InlinePragInfo on wrappers
> simonpj at microsoft.com**20060517154725
>
> For some reason, when doing the worker/wrapper split, we transferred the
> InlinePragInfo from the original function, but expunging it from the wrapper.
> This meant, for example, that a NOINLINE function would have its wrapper
> inlined, which isn't sensible.
>
> For a change, fixing a bug involves only deleting code!
>
> ]
> [Spelling correction
> simonpj at microsoft.com**20060517154710]
> [Retain INLINE pragma information during indirection-shorting
> simonpj at microsoft.com**20060517154449
>
> During indirection-shorting, we were dropping the InlinePragInfo,
> although were were carefully retaining strictness info etc.
> I think this is a long-standing bug.
>
> ]
> [Improve pretty-printing
> simonpj at microsoft.com**20060517154349]
> [Comments only
> simonpj at microsoft.com**20060517154304]
> [Improve pretty-printing slightly
> simonpj at microsoft.com**20060517154204]
> [Let GHCi work with with Sparc32+/V8+ .o files
> Duncan Coutts <duncan.coutts at worc.ox.ac.uk>**20060516090430
> Currently the GHCi linker looks exclusively for V7 ABI .o files.
>
> You can generate V8+ ABI .o files using flags to gcc such as:
> -optc-mcpu=ultrasparc -opta-mcpu=ultrasparc
>
> Note that this allows gcc to generate hardware integer division and
> hardware floating point instructions rather than using software emulation.
> All recent sparc hardware is V8+ or later. Perhaps we should check for the
> cpu generation in configure and use the later ABI if possible.
>
> Tested briefly on a SunBlade 100 (TI UltraSparc IIe) sparc-unknown-linux
> ]
> [match up more closely with compiler/main/DynFlags.hs:machdepCCOpts
> Simon Marlow <simonmar at microsoft.com>**20060515090031
> In particular, add -fno-builtin to x86 and x86_64, which was missing.
> ]
> [set $(GhcVersion) and $(GhcPatchLevel) correctly when $(UseStage1)==YES
> Simon Marlow <simonmar at microsoft.com>**20060510124621]
> [.raw_s and .s live in $(odir), not the source dir
> Simon Marlow <simonmar at microsoft.com>**20060510121524]
> [additions from Reilly Hayes
> Simon Marlow <simonmar at microsoft.com>**20060510120000]
> [some tweaks to the HC bootstrapping instructions
> Simon Marlow <simonmar at microsoft.com>**20060510115236]
> [Ignore unboxed values in breakpoints.
> Lemmih <lemmih at gmail.com>**20060510072722]
> [Don't read ~/.ghci on breakpoints.
> Lemmih <lemmih at gmail.com>**20060509223455]
> [make it possible to define an alias for :quit
> Simon Marlow <simonmar at microsoft.com>**20060509083124]
> [Do not put wired-in things in interface files
> simonpj at microsoft.com**20060508142946
>
> There is no need for wired-in things to go into interface files; the compiler
> knows about them anyway. Worse, it turns ou that if they are in an interface
> file, they may get read in with not-quite-right type info (e.g. GHC.Err.error),
> and the not-quite-right thing gets into the type envt. Than it gets used
> instead of the wired in thing.
>
> Best all round never to put them into interface files. This is the way
> it used to be, but it looks as if it rotted away some time ago.
>
> (I noticed this when fixing unsafePerformIO stuff, becuase 'lazy' was getting
> an unfolding when it shouldn't.)
>
> ]
> [Remove NOINLINE strictness hack
> simonpj at microsoft.com**20060508142834
>
> The stricteness analyser used to have a HACK which ensured that NOINLNE things
> were not strictness-analysed. The reason was unsafePerformIO. Left to itself,
> the strictness analyser would discover this strictness for unsafePerformIO:
> unsafePerformIO: C(U(AV))
> But then consider this sub-expression
> unsafePerformIO (\s -> let r = f x in
> case writeIORef v r s of (# s1, _ #) ->
> (# s1, r #)
> The strictness analyser will now find that r is sure to be eval'd,
> and may then hoist it out. This makes tests/lib/should_run/memo002
> deadlock.
>
> Solving this by making all NOINLINE things have no strictness info is overkill.
> In particular, it's overkill for runST, which is perfectly respectable.
> Consider
> f x = runST (return x)
> This should be strict in x.
>
> So the new plan is to define unsafePerformIO using the 'lazy' combinator:
>
> unsafePerformIO (IO m) = lazy (case m realWorld# of (# _, r #) -> r)
>
> Remember, 'lazy' is a wired-in identity-function Id, of type a->a, which is
> magically NON-STRICT, and is inlined after strictness analysis. So
> unsafePerformIO will look non-strict, and that's what we want.
>
> Now we don't need the hack in the strictness analyser.
>
> ]
> [Trim imports
> simonpj at microsoft.com**20060508141804]
> [Trim imports
> simonpj at microsoft.com**20060508141713]
> [GHC_MANGLER-->MANGLER
> Simon Marlow <simonmar at microsoft.com>**20060508111206]
> [Fix bug #763: Breakpoint mechanism crashes when there's a type error.
> Lemmih <lemmih at gmail.com>**20060505232158]
> [breakpointCond
> Lemmih <lemmih at gmail.com>**20060502174340]
> [Preserve type variable names during type inference
> simonpj at microsoft.com**20060505153753
>
> During unification we attempt to preserve the print-names of type variables,
> so that type error messages tend to mention type variables using the
> programmer's vocabulary.
>
> This had bit-rotted a bit when I added impredicative polymorphism; especially
> when unBoxing a boxy type variable we should not gratuitously lose its name.
>
> ]
> [Trim imports
> simonpj at microsoft.com**20060505150506]
> [fixup for new source tree layout
> Simon Marlow <simonmar at microsoft.com>**20060505114100]
> [FPTOOLS_TOP-->GHC_TOP, and remove some references to "fptools"
> Simon Marlow <simonmar at microsoft.com>**20060505110520]
> [$(FPTOOLS_TOP) is now known as $(GHC_TOP)
> Simon Marlow <simonmar at microsoft.com>**20060505110127
> I kept $(FPTOOLS_TOP) as an alias for $(GHC_TOP) while we switch
> ]
> [update the build system documentation
> Simon Marlow <simonmar at microsoft.com>**20060505105843]
> [update for new source tree layout
> Simon Marlow <simonmar at microsoft.com>**20060505102903]
> [partial update for new source tree layout
> Simon Marlow <simonmar at microsoft.com>**20060505030218]
> [update for new source tree layout (untested)
> Simon Marlow <simonmar at microsoft.com>**20060505081549]
> [Print a more helpful error for find_thing
> simonpj at microsoft.com**20060504153337]
> [Fix a bug in rule matching
> simonpj at microsoft.com**20060504112430
>
> The rule matcher uses a "rough-match" pre-filter, which was being too
> aggressive. The case looked like this:
>
> rule: f True
> expr: case e of x { True -> f x }
>
> Jues because x doesn't immediately look like True, we shouldn't say
> "can't match", but that is exactly what ruleCantMatch was doing.
>
>
> ]
> [Fix constructor-specialisation bug
> simonpj at microsoft.com**20060504112131
>
> The constructor-specialisation optimisation was not dealing with the case
> of
> (letrec ... in f) a1 a2
>
> We need to apply constructor specialisation in the letrec; previously
> we were leaving it untouched on the grounds that the function part of
> an application is almost always a variable.
>
> But in fact, float-in immediately precedes SpecConstr, so we can get
> these odd-looking applications.
>
>
> ]
> [Fix precedence for records in derived Read
> simonpj at microsoft.com**20060504111804
>
> The derived instance for Read of records wasn't quite right.
> Consider
> data T = T1 T | T2 { x::Int }
>
> The string "T1 T2 { x=2 }" should parse correctly as
> T1 (T2 {x=2})
> because of Haskell's odd precedence rules (record construction binds
> even more tightly than application), but the derived Read didn't take
> account of that.
>
> drvrun020 is the regression test
>
>
> ]
> [Make rules available in RHS
> simonpj at microsoft.com**20060504111500
>
> After some earlier re-factoring, the code that was carefully trying
> to make RULES available in a function's own RHS was plain wrong.
>
> This commit fixes it. Some programs should go faster!
>
> ]
> [Pretty printing instance for Unfolding
> simonpj at microsoft.com**20060504111429]
> [small clarification
> Simon Marlow <simonmar at microsoft.com>**20060504103414]
> [small fix to booting instructions from #762
> Simon Marlow <simonmar at microsoft.com>**20060504083104]
> [$(ProjectNameShort) => ghc
> Simon Marlow <simonmar at microsoft.com>**20060503102419]
> [only pass -fno-unit-at-a-time to gcc if it is supported
> Simon Marlow <simonmar at microsoft.com>**20060503093614]
> [Arrange that -fth is no longer implied by -fglasgow-exts
> simonpj at microsoft.com**20060426182114
>
> Messages involving Template Haskell are deeply puzzling
> if you don't know about TH, so it seems better to make
> -fth an explicit flag. It is no longer switched on
> by -fglasgow-exts.
>
> ]
> [remove code not required in the new source tree layout
> Simon Marlow <simonmar at microsoft.com>**20060502114235]
> [move "compat" earlier in the build for .hc bootstrapping
> Simon Marlow <simonmar at microsoft.com>**20060502112001]
> [fix ctime_r problem on Solaris (I hope)
> Simon Marlow <simonmar at microsoft.com>**20060502111231]
> [fix whitespace problem that shows up on Solaris (x86)
> Simon Marlow <simonmar at microsoft.com>**20060502110001]
> [libraries/time is boring
> Simon Marlow <simonmar at microsoft.com>**20060502105524]
> [add time package to libraries Makefile
> Ashley Yakeley <ashley at semantic.org>**20060501092241]
> [add time package to default-packages
> Ashley Yakeley <ashley at semantic.org>**20060426070445]
> [Fix stage2 segfault on openbsd.
> dons at cse.unsw.edu.au**20060428074811
>
> Somewhere along the 6.5 branch, gcc started compiling the rts such that
> it triggers the stack smash handler, causing stage2 to by kill'd
> immediately. This turns off the stack protector, which will do for now.
>
> ]
> [fix quoting around ${FPTOOLS_TOP_ABS} (fixes #749)
> Simon Marlow <simonmar at microsoft.com>**20060428085252]
> [Fix bug shown in the mod77 test.
> Lemmih <lemmih at gmail.com>**20060427113313]
> [Don't init root pointers if they aren't gonna be used.
> Lemmih <lemmih at gmail.com>**20060426111143]
> [Fix recompilation checking.
> Simon Marlow <simonmar at microsoft.com>**20060425140932
> One-shot compilation was throwing away the old iface read by
> checkOldIface, with the result that version numbers were never being
> incremented. Fixes the recomp001 test too.
> ]
> [Solaris needs -lrt for the threaded RTS
> Simon Marlow <simonmar at microsoft.com>**20060425082823]
> [fix problem with binary-dist docs
> Simon Marlow <simonmar at microsoft.com>**20060424090159]
> [Enable breakpoint support.
> Lemmih <lemmih at gmail.com>**20060421113112]
> [Fixing some lexer errors with extcore
> Josef Svenningsson <josef.svenningsson at gmail.com>**20060420222625]
> [Extcore can now handle data types without constructors
> Josef Svenningsson <josef.svenningsson at gmail.com>**20060420213622]
> [Comments only
> Josef Svenningsson <josef.svenningsson at gmail.com>**20060420213555]
> [Resurrect ProjectName
> sven.panne at aedion.de**20060421085125]
> [Remove the section on platform support, link to the wiki page
> Simon Marlow <simonmar at microsoft.com>**20060420125555
> The section in the building guide was becoming out of date, a wiki
> page is much more likely to be kept fresh.
> ]
> [Fix workaround for a GHC 6.4 bug
> rl at cse.unsw.edu.au**20060420044223]
> [hslibs is dead, Jim...
> sven.panne at aedion.de**20060419144609]
> [Synched .spec file with reality
> sven.panne at aedion.de**20060419143138]
> [Add .spec file to source distribution
> sven.panne at aedion.de**20060419103725]
> [remove paragraph about mutable objects that doesn't apply now
> Simon Marlow <simonmar at microsoft.com>**20060419082038]
> [HsBool should be HsInt, not StgBool
> Simon Marlow <simonmar at microsoft.com>**20060418144214
> StgBool is mapped to C's int type. GHC doesn't currently know the
> size of a C int on the target arch, it's easier to use StgInt instead.
> I guess nobody ever uses Bool arguments to foreign imports/exports.
> ]
> [handle Bool arg to foreign import "wrapper"
> Simon Marlow <simonmar at microsoft.com>**20060418143936
> Fixes #746
> ]
> [update commentry for foreign import "wrapper" handling
> Simon Marlow <simonmar at microsoft.com>**20060418143714]
> [remove vestiges of ByteArray and MutableByteArray, which are no more
> Simon Marlow <simonmar at microsoft.com>**20060418143641]
> [Comment only
> simonpj at microsoft.com**20060418125624]
> [Fix rank-validity testing
> simonpj at microsoft.com**20060418125350
>
> GHC does not now do "hoisting" as it used to. Instead, it allows
> foralls to the right of fuction arrows, as well as to the left.
>
> But the type-validity tester hadn't caught up. This commit fixes
> it. The test is tc203.
>
> Incidentally, GHC still doesn't let you write
> forall a. Eq a => forall b. b -> b
> because we get a zillion reduce/reduce errors if we allow that. I'm
> sure it's fixable. But meanwhile you have to use an auxiliary type
> synonym, which is a bit stupid.
>
>
> ]
> [Make the initial rdr and type scope available in the ghc-api.
> Lemmih <lemmih at gmail.com>**20060418023606]
> [Fix minor bug in Linker.withExtendedLinkEnv
> Lemmih <lemmih at gmail.com>**20060418023518]
> [Export 'insertSymbol' and 'insertStableSymbol'.
> Lemmih <lemmih at gmail.com>**20060418021806
>
> 'insertStableSymbol' is used for exporting closures that are affected by the GC.
>
> ]
> [Allow $x, as well as $(x), at top level in TH
> simonpj at microsoft.com**20060414121907
>
> Bulat pointed out that in Template Haskell
> $x
> is allowed instead of
> $(x)
> in expressions, but not at the top level of modules.
>
> This commit fixes the omission. Now you can say
>
> f x = x
> $h
> data T = T
>
> and the $h will run Template Haskell just as you'd expect.
>
> ]
> [Fix TH erorr recovery (test is TH_recover)
> simonpj at microsoft.com**20060414120411]
> [Comments only
> simonpj at microsoft.com**20060414120359]
> [Recover gracefully from a Template Haskell programmers error
> simonpj at microsoft.com**20060414115831
>
> If a TH programmer uses a type constructor as a data constructor,
> GHC simply crashed. This commit makes it report the error in a
> graceful way.
>
> ]
> [Document newtype-unwrapping for IO in FFI
> simonpj at microsoft.com**20060414105212]
> [Cosmetics in SpecConstr
> simonpj at microsoft.com**20060412152721
>
> SpecConstr currently uses substExpr for tiresome reasons to do with
> GADTs. Unfortunately the substExpr generates some WARNINGS (when DEBUG)
> is on, because we aren't adding all the in-scope Ids to the in-scope
> set of the substitution.
>
> When we move to FC these substExprs will go away, so I'm not going to
> worry about this now.
>
> ]
> [Improve pruning of case alternatives to account for GADTs
> simonpj at microsoft.com**20060412152327
>
> Consider
>
> data T a where
> T1 :: T Int
> T2 :: T Bool
> T3 :: T Char
>
> f :: T Bool -> Int
> f x = case x of
> DEFAULT -> ...
> T2 -> 3
>
> Here the DEFAULT case covers multiple constructors (T1,T3), but none
> of them can match a scrutinee of type (T Bool). So we can prune away
> the default case altogether.
>
> In implementing this, I re-factored this bit of the simplifier, elminiating
> prepareAlts from SimplUtils, and putting all the work into simplAlts in
> Simplify
>
> The proximate cause was a program written by Manuel using PArrays
>
> ]
> [Fix a bug in optimising division to shift right
> Simon Marlow <simonmar at microsoft.com>**20060412144247
> Division by an integral log2 can't be directly optimised to a shift
> right, because shift right behaves like a division that rounds to
> negative infinity, whereas we want one that rounds to zero. Fix this
> by adding (divisor-1) to the dividend when it is negative before
> shifting. We do this without jumps, generating very slightly worse
> code than gcc, which uses conditional moves on CPUs that support it.
> ]
> [Omit lndir on Windows, as it used to be
> simonpj at microsoft.com**20060411135334]
> [remove a trace
> Simon Marlow <simonmar at microsoft.com>**20060411131531]
> [Allow IO to be wrapped in a newtype in foreign import/export
> simonpj at microsoft.com**20060411120441
>
> Up to now, the silent unwrapping of newtypes in foreign import/export
> has been limited to data values. But it's useful for the IO monad
> itself:
>
> newtype MyIO a = MIO (IO a)
>
> foreign import foo :: Int -> MyIO Int
>
> This patch allows the IO monad to be
> wrapped too. This applies to foreign import "dynamic" and "wrapper",
> thus
> foreign import "wrapper" foo :: MyIO () -> HisIO (FunPtr (MyIO ()))
>
> Warning: I did on the plane, and I'm no longer sure if its 100%
> complete, so needs more testing. In particular the wrapper/dynamic bit.
>
> ]
> [Improve newtype deriving
> simonpj at microsoft.com**20060402215911
>
> Ross Paterson pointed out a useful generalisation of GHC's
> newtype-deriving mechanism. This implements it. The idea
> is to allow
> newtype Wrap m a = Wrap (m a) deriving (Monad, Eq)
> where the representation type doesn't start with a type
> constructor.
>
> Actually GHC already *did* implement this, but the eta-ok
> check in TcDeriv missed a case, so there was a lurking bug.
>
> This patches fixes the documentation too. drvrun019 tests.
>
>
> ]
> [add take to the list of functions deforestable
> Simon Marlow <simonmar at microsoft.com>**20060411090131]
> [avoid versionitis in Numeric.showHex (should fix tcrun007)
> Simon Marlow <simonmar at microsoft.com>**20060411085009]
> [add a note about full-laziness
> Simon Marlow <simonmar at microsoft.com>**20060410093824]
> [robustify the test for the top of the tree a little
> Simon Marlow <simonmar at microsoft.com>**20060410082224]
> [Make darcs-all work without a ghc toplevel directory
> Josef Svenningsson <josef.svenningsson at gmail.com>**20060407161738]
> [Fix typo in darcsall warning
> Josef Svenningsson <josef.svenningsson at gmail.com>**20060407161335]
> [fix source dists
> Simon Marlow <simonmar at microsoft.com>**20060407150045]
> [add a README for binary dists
> Simon Marlow <simonmar at microsoft.com>**20060407143832]
> [fix binary dists
> Simon Marlow <simonmar at microsoft.com>**20060407143822]
> [remove the last bits of the ghc/ subdir
> Simon Marlow <simonmar at microsoft.com>**20060407085219]
> [TAG 07.04.06
> Lemmih <lemmih at gmail.com>**20060407130411]
> Patch bundle hash:
> ac61d27949716304359d440c1b317cab140514ed
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Cvs-ghc mailing list
> Cvs-ghc at haskell.org
> http://www.haskell.org/mailman/listinfo/cvs-ghc
More information about the Cvs-ghc
mailing list