ghc-hetmet.git
15 years agoImprove error reports for kind checking (Trac #2994)
simonpj@microsoft.com [Wed, 4 Feb 2009 15:07:36 +0000 (15:07 +0000)]
Improve error reports for kind checking (Trac #2994)

I followed the suggestion in Trac #2994, which took longer than I
expected.  As usual I did a bit of tidying up at the same time,
and improved a few other error reports.

15 years agoFurther wibbles to 'deriving' for functor-like things
simonpj@microsoft.com [Wed, 4 Feb 2009 15:06:25 +0000 (15:06 +0000)]
Further wibbles to 'deriving' for functor-like things

15 years agoleave out rts/ from include-dirs in the inplace rts package
Simon Marlow [Wed, 4 Feb 2009 10:47:48 +0000 (10:47 +0000)]
leave out rts/ from include-dirs in the inplace rts package
it shouldn't be there, and might hide bugs

15 years agoFix Trac #2999: change an ASSERT to a WARN
simonpj@microsoft.com [Wed, 4 Feb 2009 08:38:00 +0000 (08:38 +0000)]
Fix Trac #2999: change an ASSERT to a WARN

A bug in the constraint simplifier means that an equality can be solved
twice.  It's harmless, and will go away with the new constraint simplifier.
Hence warning, to avoid unnecessary outright failure on eg Trac #2999.

15 years agoImprove transferPolyIdInfo for value-arg abstraction
simonpj@microsoft.com [Wed, 4 Feb 2009 08:25:34 +0000 (08:25 +0000)]
Improve transferPolyIdInfo for value-arg abstraction

If we float a binding out of a *value* lambda, the fixing-up of IdInfo
is a bit more complicated than before.  Since in principle FloatOut
can do this (and thus can do full lambda lifting), it's imporrtant
that transferPolyIdInfo does the Right Thing.

This doensn't matter unless you use FloatOut's abilty to lambda-lift,
which GHC mostly doesn't, yet.  But Max used it and tripped over this bug.

15 years agoTwo small improvements to LiberateCase
simonpj@microsoft.com [Wed, 4 Feb 2009 08:19:19 +0000 (08:19 +0000)]
Two small improvements to LiberateCase

Max Bolingbroke suggested these two small improvements to LiberateCase
(most of the size increase is comments :-)):

a) Do LiberateCase on small functions even if they are mutually recursive
   See Note [Small enough]

b) Don't do LiberateCase on functions for which it'd be fruitless,
   namely when a free varible is scrutinised *outside* the function
   See Note [Avoiding fruitless liberate-case]

There is virtually no effect on nofib, but Max tripped over cases
where it mattered slightly.

15 years agoRobustify lookupFamInstEnv, plus some refactoring
simonpj@microsoft.com [Thu, 15 Jan 2009 13:48:18 +0000 (13:48 +0000)]
Robustify lookupFamInstEnv, plus some refactoring

This patch deals with the following remark

     Suppose we have
            type family T a :: * -> *
            type instance T Int = []

     and now we encounter the type (T Int Bool).  If we call
     lookupFamInstEnv on (T Int Bool) we'll fail, because T has arity 1.
     Indeed, I *think* it's a precondition of lookupFamInstEnv that the
     supplied types exactly match the arity of the type function.  But
     that precondition is neither stated, nor is there an assertion to
     check it.

With this patch, lookupFamInstEnv can take "extra" type arguments in
the over-saturated case, and does the Right Thing.

There was a nearly-identical function lookupFamInstEnvUnify, which
required the precisely analogous change, so I took the opportunity
to combine the two into one function, so that bugs can be fixed in one
place.  This was a bit harder than I expected, but I think the result
is ok.  The conflict-decision function moves from FamInst to FamInstEnv.
Net lines code decreases, although there are more comments.

15 years agoRobustify lookupFamInstEnv
simonpj@microsoft.com [Wed, 14 Jan 2009 14:01:17 +0000 (14:01 +0000)]
Robustify lookupFamInstEnv

Suppose we have
        type family T a :: * -> *
        type instance T Int = []

and now we encounter the type (T Int Bool).  That is perfectly
fine, even though T is over-saturated here.

This patch makes lookupFamInstEnv robust to such over-saturation.
Previously one caller (TcTyFuns.tcUnfoldSynFamInst) dealt with
the over-saturation case, but the others did not. It's better
to desl with the issue at the root, in lookupFamInstEnv itself.

15 years agoImprove trace message
simonpj@microsoft.com [Tue, 13 Jan 2009 17:58:06 +0000 (17:58 +0000)]
Improve trace message

15 years agoBuild dph with the stage2 compiler
Ian Lynagh [Tue, 3 Feb 2009 21:36:13 +0000 (21:36 +0000)]
Build dph with the stage2 compiler
It will use TH, so needs to be built with stage2.

15 years agoOptimise writing out the .s file
Simon Marlow [Mon, 2 Feb 2009 14:50:13 +0000 (14:50 +0000)]
Optimise writing out the .s file
I noticed while working on the new IO library that GHC was writing out
the .s file in lots of little chunks.  It turns out that this is a
result of using multiple printDocs to avoid space leaks in the NCG,
where each printDoc is finishing up with an hFlush.

What's worse, is that this makes poor use of the optimisation inside
printDoc that uses its own buffering to avoid hitting the Handle all
the time.

So I hacked around this by making the buffering optimisation inside
Pretty visible from the outside, for use in the NCG.  The changes are
quite small.

15 years agobetter error message for missing package-qualified modules in ghc -M
Simon Marlow [Fri, 23 Jan 2009 14:20:01 +0000 (14:20 +0000)]
better error message for missing package-qualified modules in ghc -M

15 years agoadd wiki commentary links
Simon Marlow [Fri, 30 Jan 2009 11:08:44 +0000 (11:08 +0000)]
add wiki commentary links

15 years agoForce the result of user-defined commands
Simon Marlow [Fri, 30 Jan 2009 09:19:19 +0000 (09:19 +0000)]
Force the result of user-defined commands
so that exceptions are reported with "*** Exception" instead of as a panic.

15 years agoImprove error reporting for precedence errors
simonpj@microsoft.com [Mon, 2 Feb 2009 16:44:50 +0000 (16:44 +0000)]
Improve error reporting for precedence errors

Adopt the suggestion of Trac #2993, and tidy up the reporting of
precedence parsing errors somewhat.

15 years agoAdd the ability to derive instances of Functor, Foldable, Traversable
simonpj@microsoft.com [Mon, 2 Feb 2009 13:48:29 +0000 (13:48 +0000)]
Add the ability to derive instances of Functor, Foldable, Traversable

This patch is a straightforward extension of the 'deriving' mechanism.
The ability to derive classes Functor, Foldable, Traverable is controlled
by a single flag  -XDeriveFunctor.  (Maybe that's a poor name.)

Still to come: documentation

Thanks to twanvl for developing the patch

15 years agoComments about injecting implicit bindings
simonpj@microsoft.com [Fri, 30 Jan 2009 17:54:03 +0000 (17:54 +0000)]
Comments about injecting implicit bindings

15 years agoWarn in configure if it looks like make 3.80 is about to be used
Ian Lynagh [Sun, 1 Feb 2009 20:35:05 +0000 (20:35 +0000)]
Warn in configure if it looks like make 3.80 is about to be used
We get caught by
    http://savannah.gnu.org/bugs/index.php?1516
    $(eval ...) inside conditionals causes errors
with make 3.80, so warn the user if it looks like they're about to
try to use it.

15 years agoFix Trac #2985: generating superclasses and recursive dictionaries
simonpj@microsoft.com [Fri, 30 Jan 2009 15:27:38 +0000 (15:27 +0000)]
Fix Trac #2985: generating superclasses and recursive dictionaries

The Note [Recursive instances and superclases] explains the subtle
issues to do with generating the bindings for superclasses when
we compile an instance declaration, at least if we want to do the
clever "recursive superclass" idea from the SYB3 paper.

The old implementation of tcSimplifySuperClasses stumbled when
type equalities entered the picture (details in the Note); this
patch fixes the problem using a slightly hacky trick.  When we
re-engineer the constraint solver we'll want to keep an eye on
this.

Probably worth merging to the 6.10 branch.

15 years agoWhite space only
simonpj@microsoft.com [Fri, 30 Jan 2009 15:27:05 +0000 (15:27 +0000)]
White space only

15 years agoTwo more wibbles to CorePrep (fixes HTTP package and DPH)
simonpj@microsoft.com [Thu, 29 Jan 2009 13:19:54 +0000 (13:19 +0000)]
Two more wibbles to CorePrep (fixes HTTP package and DPH)

Ensuring that
  a) lambdas show up only on the RHSs of binding after CorePrep
  b) the arity of a binding exactly matches the maifest lambdas
is surprisingly tricky.

I got it wrong (again) in my recent CorePrep shuffling, which broke
packages HTTP and DPH.  This patch fixes both.

15 years agoRemove the doc/ contents from the GMP tarball
Ian Lynagh [Wed, 28 Jan 2009 20:07:49 +0000 (20:07 +0000)]
Remove the doc/ contents from the GMP tarball
They are GFDLed, which causes problems for Debian

15 years ago#2973: we should virtualise the CWD inside the GHC API, not in the client
Simon Marlow [Tue, 27 Jan 2009 12:16:48 +0000 (12:16 +0000)]
#2973: we should virtualise the CWD inside the GHC API, not in the client
The problem is that we install the client's CWD before calling
runStmt, but runStmt has to load modules before running the code.  We
need to install the CWD just before running the code instead, which
means it has to be done inside runStmt (and resume).

15 years agoFix detection of i386 vs. x86_64 for -pc-solaris
Simon Marlow [Tue, 27 Jan 2009 09:53:43 +0000 (09:53 +0000)]
Fix detection of i386 vs. x86_64 for -pc-solaris
From #2951

15 years agoImplement #2191 (traceCcs# -- prints CCS of a value when available -- take 3)
Samuel Bronson [Tue, 27 Jan 2009 08:48:25 +0000 (08:48 +0000)]
Implement #2191 (traceCcs# -- prints CCS of a value when available -- take 3)
In this version, I untag R1 before using it, and even enter R2 at the
end rather than simply returning it (which didn't work right when R2
was a thunk).

15 years agoadd comment for ASSERT_LOCK_HELD()
Simon Marlow [Mon, 26 Jan 2009 14:00:30 +0000 (14:00 +0000)]
add comment for ASSERT_LOCK_HELD()

15 years agoFix #2961: we lost some of the generated code for stack args in genCCall
Simon Marlow [Mon, 26 Jan 2009 15:02:09 +0000 (15:02 +0000)]
Fix #2961: we lost some of the generated code for stack args in genCCall
A real bug in the x86_64 native code gen: nice!

This bug would have been caught by -Wall, and I would have gone though
and Walled this file but I know Ben is hacking on this file quite
heavily and I don't want to create undue conflicts.  Ben: it would be
nice to enable -Wall here when you have time.

15 years agoMake the libffi patch files portable
Ian Lynagh [Fri, 23 Jan 2009 18:00:15 +0000 (18:00 +0000)]
Make the libffi patch files portable
Solaris's patch can't apply them if the lines beginning "---" aren't
preceeded by a "diff -ur foo bar" line.

15 years agoSPARC NCG: Also do misaligned reads (this time for sure!)
Ben.Lippmeier@anu.edu.au [Thu, 22 Jan 2009 09:21:56 +0000 (09:21 +0000)]
SPARC NCG: Also do misaligned reads (this time for sure!)

15 years agoSPARC NCG: Also do misaligned reads
Ben.Lippmeier@anu.edu.au [Wed, 21 Jan 2009 23:24:23 +0000 (23:24 +0000)]
SPARC NCG: Also do misaligned reads

15 years agoWhen converting TH syntax to GHC syntax, need to put sections in parentheses
Ian Lynagh [Wed, 21 Jan 2009 14:17:06 +0000 (14:17 +0000)]
When converting TH syntax to GHC syntax, need to put sections in parentheses
Fixes trac #2956

15 years agoSPARC NCG: Add a SPARC version of rts_mkInt64 that handles misaligned closure payloads.
Ben.Lippmeier@anu.edu.au [Wed, 21 Jan 2009 05:23:34 +0000 (05:23 +0000)]
SPARC NCG: Add a SPARC version of rts_mkInt64 that handles misaligned closure payloads.

15 years agoSPARC NCG: Reenable out of line 32 bit float ops
Ben.Lippmeier@anu.edu.au [Wed, 21 Jan 2009 03:47:16 +0000 (03:47 +0000)]
SPARC NCG: Reenable out of line 32 bit float ops

15 years agoSPARC NCG: Clean up formatting and add comments in genCCall
Ben.Lippmeier@anu.edu.au [Wed, 21 Jan 2009 02:55:49 +0000 (02:55 +0000)]
SPARC NCG: Clean up formatting and add comments in genCCall

15 years agoSPARC NCG: Fix format problem when converting float to int
Ben.Lippmeier@anu.edu.au [Wed, 21 Jan 2009 01:26:24 +0000 (01:26 +0000)]
SPARC NCG: Fix format problem when converting float to int

15 years agoSPARC NCG: fill branch delay slot after tabled jump (doh!)
Ben.Lippmeier@anu.edu.au [Wed, 21 Jan 2009 00:37:29 +0000 (00:37 +0000)]
SPARC NCG: fill branch delay slot after tabled jump (doh!)

15 years agoSPARC NCG: Add tabled switch
Ben.Lippmeier@anu.edu.au [Tue, 20 Jan 2009 21:49:14 +0000 (21:49 +0000)]
SPARC NCG: Add tabled switch

15 years agoSPARC NCG: Fix 64bit integers returned from ccalls
Ben.Lippmeier@anu.edu.au [Tue, 20 Jan 2009 09:06:17 +0000 (09:06 +0000)]
SPARC NCG: Fix 64bit integers returned from ccalls

15 years ago#2875: Correct SYB's representation of Char
'Jose Pedro Magalhaes [Mon, 19 Jan 2009 11:23:21 +0000 (11:23 +0000)]
#2875: Correct SYB's representation of Char

15 years agoFix #2759: add ability to serialize Rational
'Jose Pedro Magalhaes [Tue, 9 Dec 2008 12:55:51 +0000 (12:55 +0000)]
Fix #2759: add ability to serialize Rational

15 years agoSPARC NCG: Fix warnings
Ben.Lippmeier@anu.edu.au [Tue, 20 Jan 2009 07:51:00 +0000 (07:51 +0000)]
SPARC NCG: Fix warnings

15 years agoSPARC NCG: Remove a comment that was confusing haddock
Ben.Lippmeier@anu.edu.au [Fri, 16 Jan 2009 01:18:53 +0000 (01:18 +0000)]
SPARC NCG: Remove a comment that was confusing haddock

15 years agoSPARC NCG: ppr 64 bit store sizes
Ben.Lippmeier@anu.edu.au [Tue, 20 Jan 2009 07:40:00 +0000 (07:40 +0000)]
SPARC NCG: ppr 64 bit store sizes

15 years agoSPARC NCG: Fix generation of 64 bit ops on 32 bit sparc
Ben.Lippmeier@anu.edu.au [Tue, 20 Jan 2009 07:15:36 +0000 (07:15 +0000)]
SPARC NCG: Fix generation of 64 bit ops on 32 bit sparc

15 years agoSPARC NCG: Add support for hardware divide
Ben.Lippmeier@anu.edu.au [Tue, 20 Jan 2009 05:21:13 +0000 (05:21 +0000)]
SPARC NCG: Add support for hardware divide

15 years agoSPARC NCG: Redo code for integer sign extension
Ben.Lippmeier@anu.edu.au [Thu, 15 Jan 2009 08:41:05 +0000 (08:41 +0000)]
SPARC NCG: Redo code for integer sign extension

15 years agoSPARC NCG: Fix signed/unsigned operand format bug
Ben.Lippmeier@anu.edu.au [Thu, 15 Jan 2009 08:00:04 +0000 (08:00 +0000)]
SPARC NCG: Fix signed/unsigned operand format bug

15 years agoMore fixes to the SPARC native code generator
Ben.Lippmeier@anu.edu.au [Thu, 15 Jan 2009 05:57:27 +0000 (05:57 +0000)]
More fixes to the SPARC native code generator

 * Fix loading of 64bit floats
 * Put SRT and other read only static data in the .text segment

15 years agoStart fixing the SPARC native code generator
Ben.Lippmeier@anu.edu.au [Wed, 14 Jan 2009 05:44:16 +0000 (05:44 +0000)]
Start fixing the SPARC native code generator

  * Use BlockIds in branch instructions instead of Imms.
  * Assign FP values returned from C calls to the right regs
  * Fix loading of F32s
  * Add a SPARC version of the FreeRegs map to the linear allcator.

15 years agoFix some holes in the SPARC native code generator.
Ben.Lippmeier@anu.edu.au [Mon, 12 Jan 2009 06:33:10 +0000 (06:33 +0000)]
Fix some holes in the SPARC native code generator.

This makes about half the tests in codeGen/should_run work.

15 years agoUntag closure pointers before trying to print them.
Ben.Lippmeier@anu.edu.au [Mon, 12 Jan 2009 05:34:21 +0000 (05:34 +0000)]
Untag closure pointers before trying to print them.

In RTS tracing code, need to untag the pointer before trying
to load the info table in printClosure()

15 years agoAdd missing documention of -Da DEBUG: apply flag to RTS help.
Ben.Lippmeier@anu.edu.au [Mon, 12 Jan 2009 00:56:25 +0000 (00:56 +0000)]
Add missing documention of -Da DEBUG: apply flag to RTS help.

15 years agoBetter panic message in RegAllocLinear
Ben.Lippmeier@anu.edu.au [Sat, 10 Jan 2009 02:58:02 +0000 (02:58 +0000)]
Better panic message in RegAllocLinear

15 years agoMake the SPARC NCG compile again - it's still broken though.
Ben.Lippmeier@anu.edu.au [Sat, 10 Jan 2009 01:44:18 +0000 (01:44 +0000)]
Make the SPARC NCG compile again - it's still broken though.

15 years agoEnable the native code generator for SPARC
Ben.Lippmeier@anu.edu.au [Mon, 5 Jan 2009 07:04:29 +0000 (07:04 +0000)]
Enable the native code generator for SPARC

15 years agoAlways use PTHREAD_MUTEX_ERRORCHECK to create mutexes when -DDEBUG
Ian Lynagh [Sun, 18 Jan 2009 19:33:28 +0000 (19:33 +0000)]
Always use PTHREAD_MUTEX_ERRORCHECK to create mutexes when -DDEBUG
Linux defines PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP
anyway, so there's no need to special-case it.

15 years agoUse error-checking mutexes on all platforms when DEBUG is on
Ian Lynagh [Sat, 17 Jan 2009 21:59:31 +0000 (21:59 +0000)]
Use error-checking mutexes on all platforms when DEBUG is on
Otherwise ASSERT_LOCK_HELD will cause deadlocks

15 years agoReinstate: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Ian Lynagh [Sat, 17 Jan 2009 20:09:55 +0000 (20:09 +0000)]
Reinstate: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Sun Jan  4 19:24:43 GMT 2009  Matthias Kilian <kili@outback.escape.de>
    Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG
    is defined. The return values of those functions are well defined
    and should be supported on all operation systems with pthreads. The
    checks are cheap enough to do them even in the default build (without
    -DDEBUG).

    While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let
    the debugBelch part enabled with -DLOCK_DEBUG work independently
    of -DDEBUG.

15 years agoInitialise and deinitialise the file_lock_mutex
Ian Lynagh [Sat, 17 Jan 2009 02:39:47 +0000 (02:39 +0000)]
Initialise and deinitialise the file_lock_mutex

15 years agoCreate package.conf when installing a bindist
Ian Lynagh [Sun, 18 Jan 2009 11:06:54 +0000 (11:06 +0000)]
Create package.conf when installing a bindist

15 years agovalidate fix on 32-bit
Simon Marlow [Wed, 14 Jan 2009 16:28:34 +0000 (16:28 +0000)]
validate fix on 32-bit

15 years agofix validate on Windows
Simon Marlow [Wed, 14 Jan 2009 15:58:42 +0000 (15:58 +0000)]
fix validate on Windows

15 years agoUNDO: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Simon Marlow [Fri, 16 Jan 2009 11:43:39 +0000 (11:43 +0000)]
UNDO: Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().
This patch caused problems on Mac OS X, undoing until we can do it better.

rolling back:

Sun Jan  4 19:24:43 GMT 2009  Matthias Kilian <kili@outback.escape.de>
  * Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().

  Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG
  is defined. The return values of those functions are well defined
  and should be supported on all operation systems with pthreads. The
  checks are cheap enough to do them even in the default build (without
  -DDEBUG).

  While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let
  the debugBelch part enabled with -DLOCK_DEBUG work independently
  of -DDEBUG.

    M ./includes/OSThreads.h -30 +10

15 years agoUpdate config.guess, config.sub and install.sh from automake-1.10.2
Simon Marlow [Fri, 16 Jan 2009 09:53:11 +0000 (09:53 +0000)]
Update config.guess, config.sub and install.sh from automake-1.10.2
In particular, config.guess should now know about x86_64-pc-solaris2

15 years agoMore useful error message when a package .hi file cannot be found:
Simon Marlow [Thu, 15 Jan 2009 12:25:24 +0000 (12:25 +0000)]
More useful error message when a package .hi file cannot be found:

> import System.Process
Could not find module `System.Process':
  There are files missing in the process-1.0.1.1 package,
  try running 'ghc-pkg check'.
  Use -v to see a list of the files searched for.

15 years agosoup-up "ghc-pkg check"
Simon Marlow [Thu, 15 Jan 2009 12:21:43 +0000 (12:21 +0000)]
soup-up "ghc-pkg check"

We now look for missing files (including .hi files), and report all
the packages that are transitively broken.

$ ghc-pkg check
There are problems in package syb-0.1.0.0:
  dependency foo-4.0.0.0 doesn't exist
There are problems in package process-1.0.1.1:
  file System/Process.hi is missing

The following packages are broken, either because they have a problem
listed above, or because they depend on a broken package.
syb-0.1.0.0
process-1.0.1.1
base-3.0.3.0
Cabal-1.7.0
haskell98-1.0.1.0
haddock-2.4.2
ghc-6.11

15 years agodocument -feager-blackholing
Simon Marlow [Thu, 15 Jan 2009 09:39:22 +0000 (09:39 +0000)]
document -feager-blackholing

15 years agoExternal Core: re-add code I removed mistakenly in last commit
Tim Chevalier [Thu, 15 Jan 2009 00:26:12 +0000 (00:26 +0000)]
External Core: re-add code I removed mistakenly in last commit

15 years agoExternal Core lib: lots of cleanup
Tim Chevalier [Wed, 14 Jan 2009 22:44:28 +0000 (22:44 +0000)]
External Core lib: lots of cleanup

- Factor out code for applying newtypes from Check into CoreUtils
- Use this code in Prep, which allowed for some simplification
- Change Merge and ElimDeadCode to not flatten top-level binds
- Add a flag for elimDeadCode to tell it whether to keep
exported bindings or not.
- Other things.

15 years agoExternal Core: print out more precise dependency info
Tim Chevalier [Wed, 14 Jan 2009 22:17:34 +0000 (22:17 +0000)]
External Core: print out more precise dependency info

Print out the same recursive/non-recursive binding groups
that existed in internal Core in an External Core file,
rather than dumping everything into one big recursive group.

15 years agoFix "make install": Put "[]" in the install package.conf
Ian Lynagh [Wed, 14 Jan 2009 20:59:45 +0000 (20:59 +0000)]
Fix "make install": Put "[]" in the install package.conf

15 years agoRemove redundant import; spotted by Thorkil Naur
Ian Lynagh [Wed, 14 Jan 2009 18:19:37 +0000 (18:19 +0000)]
Remove redundant import; spotted by Thorkil Naur

15 years agoRemove a redundant import
Ian Lynagh [Wed, 14 Jan 2009 18:12:12 +0000 (18:12 +0000)]
Remove a redundant import

15 years agoDetect when a C finalizer calls back to Haskell
Simon Marlow [Wed, 14 Jan 2009 12:15:26 +0000 (12:15 +0000)]
Detect when a C finalizer calls back to Haskell
This is illegal now, after the fix for #1364, but it turns out that
the existing check for dodgy callbacks doesn't catch finalizers
calling back, so we need another test.  This will be particularly
important for 6.10.2, because the behaviour has changed.

15 years agoFix Trac #2931
simonpj@microsoft.com [Tue, 13 Jan 2009 17:09:48 +0000 (17:09 +0000)]
Fix Trac #2931

Fix the lexical analyser when it encounters 'x<EOF> and Template
Haskell is on.

15 years agoRewrite CorePrep and improve eta expansion
simonpj@microsoft.com [Tue, 13 Jan 2009 16:49:53 +0000 (16:49 +0000)]
Rewrite CorePrep and improve eta expansion

This patch does two main things

a) Rewrite most of CorePrep to be much easier to understand (I hope!).
   The invariants established by CorePrep are now written out, and
   the code is more perspicuous.  It is surpringly hard to get right,
   and the old code had become quite incomprehensible.

b) Rewrite the eta-expander so that it does a bit of simplifying
   on-the-fly, and thereby guarantees to maintain the CorePrep
   invariants.  This make it much easier to use from CorePrep, and
   is a generally good thing anyway.

A couple of pieces of re-structuring:

*  I moved the eta-expander and arity analysis stuff into a new
   module coreSyn/CoreArity.

   Max will find that the type CoreArity.EtaInfo looks strangely
   familiar.

*  I moved a bunch of comments from Simplify to OccurAnal; that's
   why it looks as though there's a lot of lines changed in those
   modules.

On the way I fixed various things

  - Function arguments are eta expanded
       f (map g)  ===>  let s = \x. map g x in f s

  - Trac #2368

The result is a modest performance gain, I think mainly due
to the first of these changes:

--------------------------------------------------------------------------------
        Program           Size    Allocs   Runtime   Elapsed
--------------------------------------------------------------------------------
            Min          -1.0%    -17.4%    -19.1%    -46.4%
            Max          +0.3%     +0.5%     +5.4%    +53.8%
 Geometric Mean          -0.1%     -0.3%     -7.0%    -10.2%

15 years agoRename isIdentityCoercion to isIdentityCoI; add Coercion.isIdentityCoercion
simonpj@microsoft.com [Tue, 13 Jan 2009 16:48:04 +0000 (16:48 +0000)]
Rename isIdentityCoercion to isIdentityCoI; add Coercion.isIdentityCoercion

15 years agoSpelling in comment only
simonpj@microsoft.com [Tue, 13 Jan 2009 16:46:24 +0000 (16:46 +0000)]
Spelling in comment only

15 years agoMake the ASSERT more informative
simonpj@microsoft.com [Tue, 13 Jan 2009 16:41:33 +0000 (16:41 +0000)]
Make the ASSERT more informative

15 years agoExport mapOL from OrdList
simonpj@microsoft.com [Tue, 13 Jan 2009 16:40:51 +0000 (16:40 +0000)]
Export mapOL from OrdList

15 years agoImprove error messages slightly
simonpj@microsoft.com [Tue, 13 Jan 2009 16:40:20 +0000 (16:40 +0000)]
Improve error messages slightly

15 years agoDo not do SpecConstr on functions that unconditionally diverge
simonpj@microsoft.com [Tue, 13 Jan 2009 16:29:18 +0000 (16:29 +0000)]
Do not do SpecConstr on functions that unconditionally diverge

There is no point in specialising a function that is guaranteed to
diverge, and doing so screwed up arity stuff.

See Note [Do not specialise diverging functions].

15 years agoMake -XTypeFamilies imply -XRelaxedPolyRec (Trac #2944)
simonpj@microsoft.com [Tue, 13 Jan 2009 16:27:16 +0000 (16:27 +0000)]
Make -XTypeFamilies imply -XRelaxedPolyRec (Trac #2944)

15 years agoFix Trac #2937: deserialising assoicated type definitions
simonpj@microsoft.com [Tue, 13 Jan 2009 15:32:17 +0000 (15:32 +0000)]
Fix Trac #2937: deserialising assoicated type definitions

The deserialiser (TcIface) for associated type definitions wasn't
taking into account that the class decl brings into scope some
type variables that scope over the data/type family declaration.

Easy to fix: the new function is TcIface.bindIfaceTyVars_AT

15 years agoAlways check the result of pthread_mutex_lock() and pthread_mutex_unlock().
Matthias Kilian [Sun, 4 Jan 2009 19:24:43 +0000 (19:24 +0000)]
Always check the result of pthread_mutex_lock() and pthread_mutex_unlock().

Don't check pthread_mutex_*lock() only on Linux and/or only if DEBUG
is defined. The return values of those functions are well defined
and should be supported on all operation systems with pthreads. The
checks are cheap enough to do them even in the default build (without
-DDEBUG).

While here, recycle an unused macro ASSERT_LOCK_NOTHELD, and let
the debugBelch part enabled with -DLOCK_DEBUG work independently
of -DDEBUG.

15 years agosanity checking fixes
Simon Marlow [Mon, 12 Jan 2009 12:10:42 +0000 (12:10 +0000)]
sanity checking fixes

15 years agoKeep the remembered sets local to each thread during parallel GC
Simon Marlow [Mon, 12 Jan 2009 12:10:24 +0000 (12:10 +0000)]
Keep the remembered sets local to each thread during parallel GC
This turns out to be quite vital for parallel programs:

  - The way we discover which threads to traverse is by finding
    dirty threads via the remembered sets (aka mutable lists).

  - A dirty thread will be on the remembered set of the capability
    that was running it, and we really want to traverse that thread's
    stack using the GC thread for the capability, because it is in
    that CPU's cache.  If we get this wrong, we get penalised badly by
    the memory system.

Previously we had per-capability mutable lists but they were
aggregated before GC and traversed by just one of the GC threads.
This resulted in very poor performance particularly for parallel
programs with deep stacks.

Now we keep per-capability remembered sets throughout GC, which also
removes a lock (recordMutableGen_sync).

15 years agoindicate which TSOs are dirty in the printAllThreads() output
Simon Marlow [Wed, 7 Jan 2009 15:14:49 +0000 (15:14 +0000)]
indicate which TSOs are dirty in the printAllThreads() output

15 years agoFix Trac #2584: Pretty printing of types with HsDocTy
David Waern [Fri, 9 Jan 2009 19:17:13 +0000 (19:17 +0000)]
Fix Trac #2584: Pretty printing of types with HsDocTy

The pretty printing clause for HsDocTy was wrong, causing brackets to be left
out. We now print Haddock comments on types as if they were postfix type
operators.

15 years agoAdd "Word size" to the +RTS --info output
Ian Lynagh [Fri, 9 Jan 2009 16:04:54 +0000 (16:04 +0000)]
Add "Word size" to the +RTS --info output

15 years agoCheck that make supports eval
Ian Lynagh [Fri, 9 Jan 2009 15:10:06 +0000 (15:10 +0000)]
Check that make supports eval

15 years agoAdd some more fields to +RTS --info
Ian Lynagh [Thu, 8 Jan 2009 13:11:01 +0000 (13:11 +0000)]
Add some more fields to +RTS --info

15 years agoFIX BUILD on Windows (fix for #2873 broke it)
Simon Marlow [Fri, 9 Jan 2009 09:06:58 +0000 (09:06 +0000)]
FIX BUILD on Windows (fix for #2873 broke it)

15 years agowhen calling mmap() with MAP_ANON, the fd argument should be -1
Simon Marlow [Thu, 8 Jan 2009 15:53:41 +0000 (15:53 +0000)]
when calling mmap() with MAP_ANON, the fd argument should be -1
might fix #2925

15 years agoFix Trac #2914: record wild cards and assoicated types
simonpj@microsoft.com [Thu, 8 Jan 2009 12:41:18 +0000 (12:41 +0000)]
Fix Trac #2914: record wild cards and assoicated types

15 years agoFix #2873: should fail if a package DB desn't exist
Simon Marlow [Thu, 8 Jan 2009 09:56:28 +0000 (09:56 +0000)]
Fix #2873: should fail if a package DB desn't exist
We allowed non-existence before because the user DB is allowed to not
exist, so now we have an explicit exception for that case.

15 years agoClose the races between throwTo and thread completion
Simon Marlow [Wed, 7 Jan 2009 14:05:07 +0000 (14:05 +0000)]
Close the races between throwTo and thread completion
Any threads we missed were being caught by the GC (possibly the idle
GC if the system was otherwise inactive), but that's not ideal.  The
fix (from Bertram Felgenhauer) is to use lockTSO to synchronise,
imposing an unconditional lockTSO on thread exit.  I couldn't measure
any performance overhead from doing this, so it seems reasonable.

15 years agoadd comment
Simon Marlow [Wed, 7 Jan 2009 12:11:42 +0000 (12:11 +0000)]
add comment

15 years agoFix two more locking issues in throwTo()
Bertram Felgenhauer [Wed, 7 Jan 2009 12:08:08 +0000 (12:08 +0000)]
Fix two more locking issues in throwTo()

15 years agomaybePerformBlockedException() should handle ThreadComplete/ThreadKilled
Simon Marlow [Wed, 7 Jan 2009 12:07:34 +0000 (12:07 +0000)]
maybePerformBlockedException() should handle ThreadComplete/ThreadKilled
Part of the fix for #2910