On Tue, 2006-08-08 at 12:51 +0100, Simon Marlow wrote: > Committed. Duncan, do you plan to push this further so we can close #703?
Yes we do. Chris: where did we get with the mangler patches? You had something as part of your alpha mangler patches to let the .note.GNU-stack stuff through the mangler rather than stripping it out. Can we separate just that feature out of the other alpha mangler changes and send it in? Duncan > Duncan Coutts wrote: > > This relates to bug #703 http://hackage.haskell.org/trac/ghc/ticket/703 > > The first patch implements the fix described in the bug report, namely > > to add .section .note.GNU-stack,"",@progbits to the assembly produced by > > the NCG. It also adds a configure test since this feature is GNU-specific. > > > > This does not deal with the -fvia-C route yet, that needs a mangler patch > > which is still in the works. It also does not deal with split-objs. > > > > The second patch is just because it was easy and in the same bit of code. > > > > The last patch tidies up an autoconf macro so that the existing related > > test matches the style of the new test added in the first patch. > > > > Duncan > > > > Thu Jul 6 12:43:31 BST 2006 Duncan Coutts <[EMAIL PROTECTED]> > > * Support the GNU non-exec stack annotation system > > 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). > > > > Thu Jul 6 12:47:12 BST 2006 Duncan Coutts <[EMAIL PROTECTED]> > > * Add ghc and version number in .ident directive in NCG > > 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. > > > > Thu Jul 6 12:49:02 BST 2006 Duncan Coutts <[EMAIL PROTECTED]> > > * Replace deprecated AC_TRY_COMPILE macro with the reccomended replcament > > See: > > http://www.gnu.org/software/autoconf/manual/html_node/Obsolete-Macros.html > > > > > > > > ------------------------------------------------------------------------ > > > > > > New patches: > > > > [Support the GNU non-exec stack annotation system > > Duncan Coutts <[EMAIL PROTECTED]>**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). > > ] { > > hunk ./compiler/nativeGen/AsmCodeGen.lhs 133 > > +#endif > > +#if HAVE_GNU_NONEXEC_STACK > > + -- 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. GHC generated code does not need an executable > > + -- stack so add the note in: > > + Pretty.$$ Pretty.text ".section .note.GNU-stack,\"\",@progbits" > > hunk ./configure.ac 1145 > > + > > +dnl *** check for GNU non-executable stack note support (ELF only) > > +dnl (.section .note.GNU-stack,"",@progbits) > > + > > +AC_MSG_CHECKING(for GNU non-executable stack support) > > +AC_COMPILE_IFELSE( > > + [AC_LANG_PROGRAM([__asm__ (".section > > .note.GNU-stack,\"\",@progbits");], [0])], > > + [AC_MSG_RESULT(yes) > > + AC_DEFINE([HAVE_GNU_NONEXEC_STACK],[1], > > + [Define to 1 if GNU non-executable stack notes are > > supported.]) > > + ], > > + [AC_MSG_RESULT(no)]) > > } > > > > [Add ghc and version number in .ident directive in NCG > > Duncan Coutts <[EMAIL PROTECTED]>**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. > > ] { > > hunk ./compiler/nativeGen/AsmCodeGen.lhs 42 > > +import Config ( cProjectVersion ) > > hunk ./compiler/nativeGen/AsmCodeGen.lhs 144 > > + -- And just because every other compiler does, lets stick > > in > > + -- an identifier directive: .ident "GHC x.y.z" > > + Pretty.$$ let compilerIdent = Pretty.text "GHC" Pretty.<+> > > + Pretty.text cProjectVersion > > + in Pretty.text ".ident" Pretty.<+> > > + Pretty.doubleQuotes compilerIdent > > } > > > > [Replace deprecated AC_TRY_COMPILE macro with the reccomended replcament > > Duncan Coutts <[EMAIL PROTECTED]>**20060706114902 > > See: > > http://www.gnu.org/software/autoconf/manual/html_node/Obsolete-Macros.html > > ] { > > hunk ./configure.ac 1134 > > -AC_TRY_COMPILE(,[__asm__ (".subsections_via_symbols");], > > - [ > > - AC_MSG_RESULT(yes) > > - AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1], > > - [Define to 1 if Apple-style dead-stripping is supported.]) > > +AC_COMPILE_IFELSE( > > + [AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])], > > + [AC_MSG_RESULT(yes) > > + AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[1], > > + [Define to 1 if Apple-style dead-stripping is supported.]) > > hunk ./configure.ac 1140 > > - [ > > - AC_MSG_RESULT(no) > > - AC_DEFINE([HAVE_SUBSECTIONS_VIA_SYMBOLS],[0], > > - [Define to 1 if Apple-style dead-stripping is supported.]) > > - ]) > > + [AC_MSG_RESULT(no)]) > > } > > > > Context: > > > > [The dict-bindings in an IPBinds need not be in dependency order > > [EMAIL PROTECTED] > > > > This appears to be a long-standing bug, discovered by BlueSpec > > ([EMAIL PROTECTED]), 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 <[EMAIL PROTECTED]>**20060704083308 > > Fixes #809 > > ] > > [Fix for warning message (bug #812) > > Duncan Coutts <[EMAIL PROTECTED]>**20060704163413 > > say "{-# SOURCE #-}" rather than "{- SOURCE -}" in warning message. > > Fixes http://hackage.haskell.org/trac/ghc/ticket/812 > > ] > > [x86-64: fix a problem exposed by negative offsets in vector tables > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060629135836] > > [Replace inline C functions with C-- macros in .cmm code > > Simon Marlow <[EMAIL PROTECTED]>**20060629134726 > > So that we can build the RTS with the NCG. > > ] > > [remove conditionals from definition of StgRegTable > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060629120526] > > [fix some problems with the fixup block code > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060629120029] > > [new syntax: "prim %OP (args)" for using CallishMachOps in .cmm > > Simon Marlow <[EMAIL PROTECTED]>**20060629115949 > > > > > > ] > > [add MO_WriteBarrier to CallishMachOps > > Simon Marlow <[EMAIL PROTECTED]>**20060629115837 > > This will let us express write barriers in C-- > > ] > > [Use -fno-strict-aliasing for *all* C files in the runtime > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060623152626] > > [fix a lint-o > > Simon Marlow <[EMAIL PROTECTED]>**20060620151901] > > [fix sloppy conditionals > > Simon Marlow <[EMAIL PROTECTED]>**20060620151758] > > [fix sloppy conditionals > > Simon Marlow <[EMAIL PROTECTED]>**20060620151039] > > [fix a few sloppy conditionals caught by new test in CmmLint > > Simon Marlow <[EMAIL PROTECTED]>**20060620150618] > > [flattenCgStmts: fix a case of empty code blocks being generated > > Simon Marlow <[EMAIL PROTECTED]>**20060620150520] > > [improve a panic message > > Simon Marlow <[EMAIL PROTECTED]>**20060620141219] > > [check that the argument to CmmCondBranch is really a conditional > > Simon Marlow <[EMAIL PROTECTED]>**20060620141204] > > [Generate a new unique for each label > > Simon Marlow <[EMAIL PROTECTED]>**20060620140106] > > [Remove long-redundant FieldLabel.lhs > > [EMAIL PROTECTED] > > [Add comments to SpecConstr > > [EMAIL PROTECTED] > > [fix up slop-overwriting for THUNK_SELECTORS in DEBUG mode > > Simon Marlow <[EMAIL PROTECTED]>**20060627123951] > > [Make SpecConstr work better for nested functions > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Improve location info when typechecking interface fiels > > [EMAIL PROTECTED] > > [Fix a bug in the pretty printing of class declarations > > [EMAIL PROTECTED] > > [Improve RULE matching a bit more > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**20060623113303 > > Happy, Alex and Haddock are built separately using Cabal now. > > ] > > [fix a couple of bugs in markSparkQueue (#799) > > Simon Marlow <[EMAIL PROTECTED]>**20060623092044] > > [pull in STABLE(!) tweaks > > [EMAIL PROTECTED] > > [fix for when path to GHC contains spaces, from #695 > > Simon Marlow <[EMAIL PROTECTED]>**20060622131700] > > [Comment only > > [EMAIL PROTECTED] > > [Transfer INLINE to specialised functions > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**20060621112523] > > [Allow Template Haskell to be used with -prof > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060620083410] > > [comment out a non-true assertion > > Simon Marlow <[EMAIL PROTECTED]>**20060616140750] > > [make compilation a little less noisy > > Simon Marlow <[EMAIL PROTECTED]>**20060616140652] > > [allow the max number of workers to scale with +RTS -N > > Simon Marlow <[EMAIL PROTECTED]>**20060616140633] > > [fix one-character error in stack check > > Simon Marlow <[EMAIL PROTECTED]>**20060616135621] > > [add STM support to the new throwTo mechanism > > Simon Marlow <[EMAIL PROTECTED]>**20060616111937] > > [remove duplicate way names (-debug -debug didn't work) > > Simon Marlow <[EMAIL PROTECTED]>**20060616110258] > > [Asynchronous exception support for SMP > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060616102311] > > [__compat_long_path_size(): have proto and defn agree on return type > > [EMAIL PROTECTED] > > [call wakeUpRts() in the correct place > > Simon Marlow <[EMAIL PROTECTED]>**20060614134728] > > [readerProc: split up text output using host's line termination convention > > [EMAIL PROTECTED] > > [Improve pretty-printing for bags > > [EMAIL PROTECTED] > > [Make scoped type variables work for default methods > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**20060612084656] > > [Emit 'linking not required' messages only with -v 2 or above. > > Don Stewart <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060612084114] > > [oops, undo accidental commit of version number > > Simon Marlow <[EMAIL PROTECTED]>**20060612083520] > > [Move readline configuration into the readline package > > Simon Marlow <[EMAIL PROTECTED]>**20060609135840] > > [fix possible ^C problems > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060608143635] > > [fix warnings > > Simon Marlow <[EMAIL PROTECTED]>**20060608143520] > > [Make it so that StgWord/StgInt are longs > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060608142844] > > [fix a warning > > Simon Marlow <[EMAIL PROTECTED]>**20060608141903] > > [fix some warnings > > Simon Marlow <[EMAIL PROTECTED]>**20060608140201] > > [Add new RTS flags for tracing: > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060607145848] > > [add 'const' modifiers to types where appropriate > > Simon Marlow <[EMAIL PROTECTED]>**20060607145800] > > [rearrange casts to avoid gcc warnings > > Simon Marlow <[EMAIL PROTECTED]>**20060607145626] > > [warning fix > > Simon Marlow <[EMAIL PROTECTED]>**20060607141013] > > [remove //@ stuff > > Simon Marlow <[EMAIL PROTECTED]>**20060607134553] > > [Gather timing stats for a Task when it completes. > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060607115105 > > > > ] > > [fix a warning > > Simon Marlow <[EMAIL PROTECTED]>**20060427130048] > > [re-enable time package on Windows > > [EMAIL PROTECTED] > > [fix a case of "naughty I386 byte reg" > > Simon Marlow <[EMAIL PROTECTED]>**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 > > [EMAIL PROTECTED] > > > > 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. > > [EMAIL PROTECTED] > > [Remove one more IfaceInlineCall > > [EMAIL PROTECTED] > > [Remove InlinePlease and add inline function and RULE > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [fix type of allocateExec > > Simon Marlow <[EMAIL PROTECTED]>**20060601125406] > > [stgMallocBytesRWX --> allocateExec > > Simon Marlow <[EMAIL PROTECTED]>**20060601123314] > > [fix non-Windows build > > Simon Marlow <[EMAIL PROTECTED]>**20060601121435] > > [Win32: set up the console code pages > > [EMAIL PROTECTED] > > 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 > > [EMAIL PROTECTED] > > [improvements to lexical error reporting > > [EMAIL PROTECTED] > > [commented-out debugging code > > [EMAIL PROTECTED] > > [understand Latin-1 symbols > > [EMAIL PROTECTED] > > [stgMallocBytesRWX --> allocateExec > > Simon Marlow <[EMAIL PROTECTED]>**20060531091202 > > Not sure how I left this out of the previous patch, oh well. > > ] > > ['time' depends on 'Win32' when Windows=YES; mirror that > > [EMAIL PROTECTED] > > when setting up SUBDIRS. > > ] > > [Win32: add _imp__tzname > > [EMAIL PROTECTED] > > [fix Win32 build > > [EMAIL PROTECTED] > > [replace stgMallocBytesRWX() with our own allocator > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060530070721] > > [Make rule-matching robust to lets > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Fix egregious and long-standing tidying bug > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [performGC_(): don't use the existing Task, always grab a new one > > Simon Marlow <[EMAIL PROTECTED]>**20060525090035] > > [Better control of the IO manager thread; improvements to deadlock checking > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060524122103] > > [fix a _TARGET_ARCH that should be _HOST_ARCH > > Simon Marlow <[EMAIL PROTECTED]>**20060524122022] > > [we don't need OutOfHeapHook(), and the version in the RTS has a better > > message > > Simon Marlow <[EMAIL PROTECTED]>**20060524112007] > > [Bug-fix to patch "Run simplifier before SpecConstr" > > [EMAIL PROTECTED] > > [Run simplifier before SpecConstr > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Add deShadowBinds > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > *** 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 > > [EMAIL PROTECTED] > > > > 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) > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Fix a nasty continuation-duplication bug > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Comments only > > [EMAIL PROTECTED] > > [take parsec out of $(GhcBootLibs) > > Simon Marlow <[EMAIL PROTECTED]>**20060518131506] > > [Improve documentation of INLINE pragmas > > [EMAIL PROTECTED] > > [a couple of additions > > Simon Marlow <[EMAIL PROTECTED]>**20060518104025] > > [#define _REENTRANT 1 (needed to get the right errno on some OSs) > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060518074415] > > [Newtype data constructors get a compulsory unfolding > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Retain InlinePragInfo on wrappers > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Retain INLINE pragma information during indirection-shorting > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Comments only > > [EMAIL PROTECTED] > > [Improve pretty-printing slightly > > [EMAIL PROTECTED] > > [match up more closely with compiler/main/DynFlags.hs:machdepCCOpts > > Simon Marlow <[EMAIL PROTECTED]>**20060515090031 > > In particular, add -fno-builtin to x86 and x86_64, which was missing. > > ] > > [set $(GhcVersion) and $(GhcPatchLevel) correctly when $(UseStage1)==YES > > Simon Marlow <[EMAIL PROTECTED]>**20060510124621] > > [.raw_s and .s live in $(odir), not the source dir > > Simon Marlow <[EMAIL PROTECTED]>**20060510121524] > > [additions from Reilly Hayes > > Simon Marlow <[EMAIL PROTECTED]>**20060510120000] > > [some tweaks to the HC bootstrapping instructions > > Simon Marlow <[EMAIL PROTECTED]>**20060510115236] > > [Ignore unboxed values in breakpoints. > > Lemmih <[EMAIL PROTECTED]>**20060510072722] > > [Don't read ~/.ghci on breakpoints. > > Lemmih <[EMAIL PROTECTED]>**20060509223455] > > [make it possible to define an alias for :quit > > Simon Marlow <[EMAIL PROTECTED]>**20060509083124] > > [Do not put wired-in things in interface files > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Trim imports > > [EMAIL PROTECTED] > > [GHC_MANGLER-->MANGLER > > Simon Marlow <[EMAIL PROTECTED]>**20060508111206] > > [Fix bug #763: Breakpoint mechanism crashes when there's a type error. > > Lemmih <[EMAIL PROTECTED]>**20060505232158] > > [breakpointCond > > Lemmih <[EMAIL PROTECTED]>**20060502174340] > > [Preserve type variable names during type inference > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [fixup for new source tree layout > > Simon Marlow <[EMAIL PROTECTED]>**20060505114100] > > [FPTOOLS_TOP-->GHC_TOP, and remove some references to "fptools" > > Simon Marlow <[EMAIL PROTECTED]>**20060505110520] > > [$(FPTOOLS_TOP) is now known as $(GHC_TOP) > > Simon Marlow <[EMAIL PROTECTED]>**20060505110127 > > I kept $(FPTOOLS_TOP) as an alias for $(GHC_TOP) while we switch > > ] > > [update the build system documentation > > Simon Marlow <[EMAIL PROTECTED]>**20060505105843] > > [update for new source tree layout > > Simon Marlow <[EMAIL PROTECTED]>**20060505102903] > > [partial update for new source tree layout > > Simon Marlow <[EMAIL PROTECTED]>**20060505030218] > > [update for new source tree layout (untested) > > Simon Marlow <[EMAIL PROTECTED]>**20060505081549] > > [Print a more helpful error for find_thing > > [EMAIL PROTECTED] > > [Fix a bug in rule matching > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [small clarification > > Simon Marlow <[EMAIL PROTECTED]>**20060504103414] > > [small fix to booting instructions from #762 > > Simon Marlow <[EMAIL PROTECTED]>**20060504083104] > > [Let GHCi work with with Sparc32+/V8+ .o files > > Duncan Coutts <[EMAIL PROTECTED]>**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 > > ] > > [$(ProjectNameShort) => ghc > > Simon Marlow <[EMAIL PROTECTED]>**20060503102419] > > [only pass -fno-unit-at-a-time to gcc if it is supported > > Simon Marlow <[EMAIL PROTECTED]>**20060503093614] > > [Arrange that -fth is no longer implied by -fglasgow-exts > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**20060502114235] > > [move "compat" earlier in the build for .hc bootstrapping > > Simon Marlow <[EMAIL PROTECTED]>**20060502112001] > > [fix ctime_r problem on Solaris (I hope) > > Simon Marlow <[EMAIL PROTECTED]>**20060502111231] > > [fix whitespace problem that shows up on Solaris (x86) > > Simon Marlow <[EMAIL PROTECTED]>**20060502110001] > > [libraries/time is boring > > Simon Marlow <[EMAIL PROTECTED]>**20060502105524] > > [add time package to libraries Makefile > > Ashley Yakeley <[EMAIL PROTECTED]>**20060501092241] > > [add time package to default-packages > > Ashley Yakeley <[EMAIL PROTECTED]>**20060426070445] > > [Fix stage2 segfault on openbsd. > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**20060428085252] > > [Fix bug shown in the mod77 test. > > Lemmih <[EMAIL PROTECTED]>**20060427113313] > > [Don't init root pointers if they aren't gonna be used. > > Lemmih <[EMAIL PROTECTED]>**20060426111143] > > [Fix recompilation checking. > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060425082823] > > [fix problem with binary-dist docs > > Simon Marlow <[EMAIL PROTECTED]>**20060424090159] > > [Enable breakpoint support. > > Lemmih <[EMAIL PROTECTED]>**20060421113112] > > [Fixing some lexer errors with extcore > > Josef Svenningsson <[EMAIL PROTECTED]>**20060420222625] > > [Extcore can now handle data types without constructors > > Josef Svenningsson <[EMAIL PROTECTED]>**20060420213622] > > [Comments only > > Josef Svenningsson <[EMAIL PROTECTED]>**20060420213555] > > [Resurrect ProjectName > > [EMAIL PROTECTED] > > [Remove the section on platform support, link to the wiki page > > Simon Marlow <[EMAIL PROTECTED]>**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 > > [EMAIL PROTECTED] > > [hslibs is dead, Jim... > > [EMAIL PROTECTED] > > [Synched .spec file with reality > > [EMAIL PROTECTED] > > [Add .spec file to source distribution > > [EMAIL PROTECTED] > > [remove paragraph about mutable objects that doesn't apply now > > Simon Marlow <[EMAIL PROTECTED]>**20060419082038] > > [HsBool should be HsInt, not StgBool > > Simon Marlow <[EMAIL PROTECTED]>**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 <[EMAIL PROTECTED]>**20060418143936 > > Fixes #746 > > ] > > [update commentry for foreign import "wrapper" handling > > Simon Marlow <[EMAIL PROTECTED]>**20060418143714] > > [remove vestiges of ByteArray and MutableByteArray, which are no more > > Simon Marlow <[EMAIL PROTECTED]>**20060418143641] > > [Comment only > > [EMAIL PROTECTED] > > [Fix rank-validity testing > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**20060418023606] > > [Fix minor bug in Linker.withExtendedLinkEnv > > Lemmih <[EMAIL PROTECTED]>**20060418023518] > > [Export 'insertSymbol' and 'insertStableSymbol'. > > Lemmih <[EMAIL PROTECTED]>**20060418021806 > > > > 'insertStableSymbol' is used for exporting closures that are affected by > > the GC. > > > > ] > > [Allow $x, as well as $(x), at top level in TH > > [EMAIL PROTECTED] > > > > 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) > > [EMAIL PROTECTED] > > [Comments only > > [EMAIL PROTECTED] > > [Recover gracefully from a Template Haskell programmers error > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > [Cosmetics in SpecConstr > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**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 > > [EMAIL PROTECTED] > > [remove a trace > > Simon Marlow <[EMAIL PROTECTED]>**20060411131531] > > [Allow IO to be wrapped in a newtype in foreign import/export > > [EMAIL PROTECTED] > > > > 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 > > [EMAIL PROTECTED] > > > > 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 <[EMAIL PROTECTED]>**20060411090131] > > [avoid versionitis in Numeric.showHex (should fix tcrun007) > > Simon Marlow <[EMAIL PROTECTED]>**20060411085009] > > [add a note about full-laziness > > Simon Marlow <[EMAIL PROTECTED]>**20060410093824] > > [robustify the test for the top of the tree a little > > Simon Marlow <[EMAIL PROTECTED]>**20060410082224] > > [Make darcs-all work without a ghc toplevel directory > > Josef Svenningsson <[EMAIL PROTECTED]>**20060407161738] > > [Fix typo in darcsall warning > > Josef Svenningsson <[EMAIL PROTECTED]>**20060407161335] > > [fix source dists > > Simon Marlow <[EMAIL PROTECTED]>**20060407150045] > > [add a README for binary dists > > Simon Marlow <[EMAIL PROTECTED]>**20060407143832] > > [fix binary dists > > Simon Marlow <[EMAIL PROTECTED]>**20060407143822] > > [remove the last bits of the ghc/ subdir > > Simon Marlow <[EMAIL PROTECTED]>**20060407085219] > > [TAG 07.04.06 > > Lemmih <[EMAIL PROTECTED]>**20060407130411] > > Patch bundle hash: > > 98ec7495314a056cc712245c567407d793dc8d63 > > > > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > Cvs-ghc mailing list > > [EMAIL PROTECTED] > > http://www.haskell.org/mailman/listinfo/cvs-ghc > _______________________________________________ Cvs-ghc mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/cvs-ghc
