Sun Jul 2 22:45:59 CEST 2006 Jan Rochel <[EMAIL PROTECTED]>
* Add %local-tag to external core output
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
New patches:
[Add %local-tag to external core output
Jan Rochel <[EMAIL PROTECTED]>**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
] {
hunk ./compiler/coreSyn/ExternalCore.lhs 24
-type Vdef = (Var,Ty,Exp) -- Top level bindings are unqualified now
+type Vdef = (Bool,Var,Ty,Exp) -- Top level bindings are unqualified now
hunk ./compiler/coreSyn/MkExternalCore.lhs 29
+import NameSet ( NameSet, emptyNameSet )
+import UniqSet ( elementOfUniqSet )
hunk ./compiler/coreSyn/MkExternalCore.lhs 38
-emitExternalCore :: DynFlags -> CgGuts -> IO ()
-emitExternalCore dflags cg_guts
+emitExternalCore :: DynFlags -> NameSet -> CgGuts -> IO ()
+emitExternalCore dflags exports cg_guts
hunk ./compiler/coreSyn/MkExternalCore.lhs 42
- hPutStrLn handle (show (mkExternalCore cg_guts))
+ hPutStrLn handle (show (mkExternalCore exports cg_guts))
hunk ./compiler/coreSyn/MkExternalCore.lhs 47
-emitExternalCore _ _
+emitExternalCore _ _ _
hunk ./compiler/coreSyn/MkExternalCore.lhs 52
-mkExternalCore :: CgGuts -> C.Module
+mkExternalCore :: NameSet -> CgGuts -> C.Module
hunk ./compiler/coreSyn/MkExternalCore.lhs 57
-mkExternalCore (CgGuts {cg_module=this_mod, cg_tycons = tycons, cg_binds = binds})
- = C.Module mname tdefs (map make_vdef binds)
+mkExternalCore exports (CgGuts {cg_module=this_mod, cg_tycons = tycons, cg_binds = binds})
+ = C.Module mname tdefs (map (make_vdef exports) binds)
hunk ./compiler/coreSyn/MkExternalCore.lhs 95
-make_vdef :: CoreBind -> C.Vdefg
-make_vdef b =
+make_vdef :: NameSet -> CoreBind -> C.Vdefg
+make_vdef exports b =
hunk ./compiler/coreSyn/MkExternalCore.lhs 100
- where f (v,e) = (make_var_id (Var.varName v), make_ty (idType v),make_exp e)
+ where
+ f (v,e) = (local, make_var_id (Var.varName v), make_ty (idType v),make_exp e)
+ where local = not $ elementOfUniqSet (Var.varName v) exports
hunk ./compiler/coreSyn/MkExternalCore.lhs 119
-make_exp (Let b e) = C.Let (make_vdef b) (make_exp e)
+make_exp (Let b e) = C.Let (make_vdef emptyNameSet b) (make_exp e)
hunk ./compiler/coreSyn/PprExternalCore.lhs 98
-pvdefg (Rec vtes) = text "%rec" $$ braces (indent (vcat (punctuate (char ';') (map pvte vtes))))
-pvdefg (Nonrec vte) = pvte vte
+pvdefg (Rec vdefs) = text "%rec" $$ braces (indent (vcat (punctuate (char ';') (map pvdef vdefs))))
+pvdefg (Nonrec vdef) = pvdef vdef
hunk ./compiler/coreSyn/PprExternalCore.lhs 101
-pvte (v,t,e) = sep [pname v <+> text "::" <+> pty t <+> char '=',
+pvdef (l,v,t,e) = sep [plocal l <+> pname v <+> text "::" <+> pty t <+> char '=',
hunk ./compiler/coreSyn/PprExternalCore.lhs 104
+plocal True = text "%local"
+plocal False = empty
+
hunk ./compiler/main/HscMain.lhs 529
- emitExternalCore (hsc_dflags hsc_env) cg_guts -- Move this? --Lemmih 03/07/2006
+ emitExternalCore (hsc_dflags hsc_env) (mg_exports simpl_result) cg_guts -- Move this? --Lemmih 03/07/2006
}
Context:
[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]
[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
]
[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]
[$(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:
ee4f3ce1a344f01fcc35ab7f6c517fe9cba1a5fe
_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc