6 years agoRemove unused HscStats.lhs; fixes #7605
Ian Lynagh [Fri, 18 Jan 2013 17:16:05 +0000 (17:16 +0000)] 
Remove unused HscStats.lhs; fixes #7605

6 years agoMerge branch 'master' of
Simon Peyton Jones [Fri, 18 Jan 2013 14:31:59 +0000 (14:31 +0000)] 
Merge branch 'master' of

6 years agoAdd missing case in eqHsBang; makes rnfail055 pass again
Simon Peyton Jones [Fri, 18 Jan 2013 14:31:39 +0000 (14:31 +0000)] 
Add missing case in eqHsBang; makes rnfail055 pass again

6 years agoRestore the primitive and vector submodules
Simon Marlow [Fri, 18 Jan 2013 09:46:30 +0000 (09:46 +0000)] 
Restore the primitive and vector submodules

I accidentally deleted them in 109a1e53287f50103e8a5b592275940b6e3dbb53

6 years agoExpose genericRaise; fixes signals004(dyn) no OS X 32
Ian Lynagh [Thu, 17 Jan 2013 21:54:06 +0000 (21:54 +0000)] 
Expose genericRaise; fixes signals004(dyn) no OS X 32

6 years agoMerge branch 'master' of
Ian Lynagh [Thu, 17 Jan 2013 23:22:50 +0000 (23:22 +0000)] 
Merge branch 'master' of

6 years agoIf -msse is specified, pass it to the LLVM backend
Johan Tibell [Thu, 17 Jan 2013 21:18:44 +0000 (13:18 -0800)] 
If -msse is specified, pass it to the LLVM backend

6 years agoClean up -msse flag handling
Johan Tibell [Thu, 17 Jan 2013 19:11:49 +0000 (11:11 -0800)] 
Clean up -msse flag handling

We know have a single flag that takes a version number, instead of one
flag per SSE version.

6 years agoHopefully fix breakage on OS X w/ LLVM
Simon Marlow [Thu, 17 Jan 2013 16:42:38 +0000 (16:42 +0000)] 
Hopefully fix breakage on OS X w/ LLVM

Reordering of includes in GC.c broke on OS X because gctKey is
declared in Task.h and is needed in the storage manager.  This is
really the wrong place for it anyway, so I've moved the gctKey pieces
to where they should be.

6 years agoUse pthread_kill on OS X too
Ian Lynagh [Thu, 17 Jan 2013 19:23:17 +0000 (19:23 +0000)] 
Use pthread_kill on OS X too

Fixes signals004(threaded1,threaded2) on OS X 32.

6 years agoExpose the prototype for getMonotonicNSec
Ian Lynagh [Thu, 17 Jan 2013 15:33:26 +0000 (15:33 +0000)] 
Expose the prototype for getMonotonicNSec

Fixes T3807 on OS X 32.

6 years agoMerge branch 'master' of
Simon Peyton Jones [Thu, 17 Jan 2013 13:57:37 +0000 (13:57 +0000)] 
Merge branch 'master' of

6 years agoTidy up cross-compiling
Simon Marlow [Thu, 17 Jan 2013 11:52:15 +0000 (11:52 +0000)] 
Tidy up cross-compiling

We have two cases:
 1. building a cross-compiler
 2. compiling GHC to run on a foreign platform

These two are done with almost the same setup: (1) is the stage 1
compiler, and (2) is the stage 2 compiler, when CrossCompiling=YES.

The only difference between (1) and (2) is that you if you set up the
build for (1), then it stops before stage 2 and you can 'make install'
to install stage 1.

Unfortunately, (2) didn't work, and the build system code needed some
tidying up.

Change to the way the build is set up:


To build a cross-compiler:
  ./configure --target=<..>

To compile a foreign GHC:
  ./configure --host=<..> --target=<..>


To build a cross-compiler:
  ./configure --target=<..>
  And set "Stage1Only=YES" in mk/

To compile a foreign GHC:
  ./configure --target=<..>

6 years agoMerge branch 'master' of
Simon Peyton Jones [Thu, 17 Jan 2013 10:55:10 +0000 (10:55 +0000)] 
Merge branch 'master' of

6 years agoA simple improvement to CSE
Simon Peyton Jones [Thu, 17 Jan 2013 10:55:00 +0000 (10:55 +0000)] 
A simple improvement to CSE

See Note [CSE for case expressions].  I don't think this is a big
deal, but it's nice, and it's easy.

6 years agoMajor patch to implement the new Demand Analyser
Simon Peyton Jones [Thu, 17 Jan 2013 10:54:07 +0000 (10:54 +0000)] 
Major patch to implement the new Demand Analyser

This patch is the result of Ilya Sergey's internship at MSR.  It
constitutes a thorough overhaul and simplification of the demand
analyser.  It makes a solid foundation on which we can now build.
Main changes are

* Instead of having one combined type for Demand, a Demand is
   now a pair (JointDmd) of
      - a StrDmd and
      - an AbsDmd.
   This allows strictness and absence to be though about quite
   orthogonally, and greatly reduces brain melt-down.

* Similarly in the DmdResult type, it's a pair of
     - a PureResult (indicating only divergence/non-divergence)
     - a CPRResult (which deals only with the CPR property

* In IdInfo, the
    strictnessInfo field contains a StrictSig, not a Maybe StrictSig
    demandInfo     field contains a Demand, not a Maybe Demand
  We don't need Nothing (to indicate no strictness/demand info)
  any more; topSig/topDmd will do.

* Remove "boxity" analysis entirely.  This was an attempt to
  avoid "reboxing", but it added complexity, is extremely
  ad-hoc, and makes very little difference in practice.

* Remove the "unboxing strategy" computation. This was an an
  attempt to ensure that a worker didn't get zillions of
  arguments by unboxing big tuples.  But in fact removing it
  DRAMATICALLY reduces allocation in an inner loop of the
  I/O library (where the threshold argument-count had been
  set just too low).  It's exceptional to have a zillion arguments
  and I don't think it's worth the complexity, especially since
  it turned out to have a serious performance hit.

* Remove quite a bit of ad-hoc cruft

* Move worthSplittingFun, worthSplittingThunk from WorkWrap to
  Demand. This allows JointDmd to be fully abstract, examined
  only inside Demand.

Everything else really follows from these changes.

All of this is really just refactoring, so we don't expect
big performance changes, but acutally the numbers look quite
good.  Here is a full nofib run with some highlights identified:

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
         expert          -2.6%    -15.5%      0.00      0.00     +0.0%
          fluid          -2.4%     -7.1%      0.01      0.01     +0.0%
             gg          -2.5%    -28.9%      0.02      0.02    -33.3%
      integrate          -2.6%     +3.2%     +2.6%     +2.6%     +0.0%
        mandel2          -2.6%     +4.2%      0.01      0.01     +0.0%
       nucleic2          -2.0%    -16.3%      0.11      0.11     +0.0%
           para          -2.6%    -20.0%    -11.8%    -11.7%     +0.0%
         parser          -2.5%    -17.9%      0.05      0.05     +0.0%
         prolog          -2.6%    -13.0%      0.00      0.00     +0.0%
         puzzle          -2.6%     +2.2%     +0.8%     +0.8%     +0.0%
        sorting          -2.6%    -35.9%      0.00      0.00     +0.0%
       treejoin          -2.6%    -52.2%     -9.8%     -9.9%     +0.0%
            Min          -2.7%    -52.2%    -11.8%    -11.7%    -33.3%
            Max          -1.8%     +4.2%    +10.5%    +10.5%     +7.7%
 Geometric Mean          -2.5%     -2.8%     -0.4%     -0.5%     -0.4%

Things to note

* Binary sizes are smaller. I don't know why, but it's good.

* Allocation is sometiemes a *lot* smaller. I believe that all the big numbers
  (I checked treejoin, gg, sorting) arise from one place, namely a function
  GHC.IO.Encoding.UTF8.utf8_decode, which is strict in two Buffers both of
  which have several arugments.  Not w/w'ing both arguments (which is what
  we did before) has a big effect.  So the big win in actually somewhat
  accidental, gained by removing the "unboxing strategy" code.

* A couple of benchmarks allocate slightly more.  This turns out
  to be due to reboxing (integrate).  But the biggest increase is
  mandel2, and *that* turned out also to be a somewhat accidental
  loss of CSE, and pointed the way to doing better CSE: see Trac

* Runtimes are never very reliable, but seem to improve very slightly.

All in all, a good piece of work.  Thank you Ilya!

6 years agomake it safe to include this after GCTDecl.h
Simon Marlow [Wed, 16 Jan 2013 19:38:56 +0000 (19:38 +0000)] 
make it safe to include this after GCTDecl.h

6 years agoRearrange includes to avoid a clash on ARM/Linux
Simon Marlow [Wed, 16 Jan 2013 19:38:19 +0000 (19:38 +0000)] 
Rearrange includes to avoid a clash on ARM/Linux

6 years agoOutput LLVM version in use at -V2.
David Terei [Thu, 17 Jan 2013 08:29:08 +0000 (00:29 -0800)] 
Output LLVM version in use at -V2.

6 years agoFix floating point constants in LLVM backend (#7600).
David Terei [Thu, 17 Jan 2013 04:16:28 +0000 (20:16 -0800)] 
Fix floating point constants in LLVM backend (#7600).

6 years agoAdd -f[no-]warn-unsupported-llvm-version. Closes Trac #7579.
Austin Seipp [Mon, 14 Jan 2013 04:23:37 +0000 (22:23 -0600)] 
Add -f[no-]warn-unsupported-llvm-version. Closes Trac #7579.

This controls whether or not the compiler warns if we're using an LLVM
version that's too old or too new. It's mostly useful when building the
compiler knowingly with an unsupported version, so you don't get a lot
of warnings in the build process.

There's no documentation for this since it's a flag only a few
developers would care about anyway.

Signed-off-by: Austin Seipp <>
6 years agoAdd a 'quick-llvm' build mode to mk/
Austin Seipp [Sun, 13 Jan 2013 07:52:42 +0000 (01:52 -0600)] 
Add a 'quick-llvm' build mode to mk/

Closes Trac #7572.

Signed-off-by: Austin Seipp <>
6 years agoBetter abstraction over run queues.
Edward Z. Yang [Tue, 15 Jan 2013 23:04:08 +0000 (15:04 -0800)] 
Better abstraction over run queues.

This adds some new functions: peekRunQueue, promoteInRunQueue,
singletonRunQueue and truncateRunQueue which help abstract away
manual linked list manipulation, making it easier to swap in
a new queue implementation.

Signed-off-by: Edward Z. Yang <>
6 years agoMerge branch 'master' of
Simon Peyton Jones [Wed, 16 Jan 2013 15:39:01 +0000 (15:39 +0000)] 
Merge branch 'master' of

6 years agoWhen cross-compiling, pass --host to package configure scripts
Simon Marlow [Wed, 16 Jan 2013 14:18:21 +0000 (14:18 +0000)] 
When cross-compiling, pass --host to package configure scripts

Otherwise the configure script for e.g. base doesn't know that we're
cross-compiling, and fails trying to run an executable compiled by the
C cross-compiler.

6 years agoPass --with-ld=$(LD) to ghc-cabal when configuring packages (#6086)
Simon Marlow [Wed, 16 Jan 2013 14:15:47 +0000 (14:15 +0000)] 
Pass --with-ld=$(LD) to ghc-cabal when configuring packages (#6086)

6 years agoFix Trac #7585.
Richard Eisenberg [Tue, 15 Jan 2013 22:19:37 +0000 (17:19 -0500)] 
Fix Trac #7585.

The coercion optimizer was optimizing coercions inside of branched
axiom applications, sometimes invalidating the branch choice within
the axiom application. Now, we check to make sure we are not
invalidating this invariant before proceeding with the optimization.

6 years agoTiny refactoring, really just white space
Simon Peyton Jones [Tue, 15 Jan 2013 14:57:31 +0000 (14:57 +0000)] 
Tiny refactoring, really just white space

6 years agoTidy up FunDeps.oclose
Simon Peyton Jones [Tue, 15 Jan 2013 14:57:04 +0000 (14:57 +0000)] 
Tidy up FunDeps.oclose

It turned out that FunDeps.oclose was unused. So

* Remove oclose

* Rename oclose1 to oclose

* Move growThetaTyVars to FunDeps (from TcMType),
  because the comments treat it with oclose

* Move quantifyPred to TcSimplify (from TcMType),
  because it seemed orphaned

6 years agoWhite space only
Simon Peyton Jones [Tue, 15 Jan 2013 14:54:37 +0000 (14:54 +0000)] 
White space only

6 years agoWhen doing UNPACK pragmas, be careful to only unpack *data* types not newtypes
Simon Peyton Jones [Tue, 15 Jan 2013 14:52:24 +0000 (14:52 +0000)] 
When doing UNPACK pragmas, be careful to only unpack *data* types not newtypes

This was breaking tc226, following UNPACK-pragma reorg

6 years agoFix up comment: I was just wrong previously, the original GHC comment on `oclose...
Iavor S. Diatchki [Mon, 14 Jan 2013 18:07:04 +0000 (10:07 -0800)] 
Fix up comment:  I was just wrong previously, the original GHC comment on `oclose` is correct.

6 years agoMerge branch 'master' of
Simon Peyton Jones [Mon, 14 Jan 2013 16:46:40 +0000 (16:46 +0000)] 
Merge branch 'master' of

6 years agoBe willing to parse {-# UNPACK #-} without '!'
Simon Peyton Jones [Thu, 10 Jan 2013 16:50:25 +0000 (16:50 +0000)] 
Be willing to parse {-# UNPACK #-} without '!'

This change gives a more helpful error message when the
user says    data T = MkT {-# UNPACK #-} Int
which should have a strictness '!' as well. Rather than
just a parse error, we get

  T7562.hs:3:14: Warning:
    UNPACK pragma lacks '!' on the first argument of `MkT'

Fixes Trac #7562

6 years agoFixup comment: typos + I had the generalization rule backwards.
Iavor S. Diatchki [Mon, 14 Jan 2013 02:34:38 +0000 (18:34 -0800)] 
Fixup comment: typos + I had the generalization rule backwards.

6 years agoUse a version of the coverage condition even with UndecidableInstances.
Iavor S. Diatchki [Mon, 14 Jan 2013 00:29:10 +0000 (16:29 -0800)] 
Use a version of the coverage condition even with UndecidableInstances.

This fixes bug #1241 and #2247.  When UndecidableInstances are on,
we use the "Liberal Coverage Condition", which is what GHC used to do in
the past.  This is the gist of the check:

class C a b | a -> b
instance theta => C t1 t2

we check that `fvs t2` is a subset of `fd-closure(theta,fvs t1)`.

This is strictly more general than the coverage condition, while
it still guarantees consistency with the FDs of the class.  This
check is completely orthogonal to termination (it by no means guarantees

I am not sure of the role of the "coverage condition" in termination---
the comments suggest that it is important.  This is why, for the moment,
we only use this check when UndecidableInstances are on.

6 years agoFix typo in docs; spotted by Gabor Greif
Ian Lynagh [Sat, 12 Jan 2013 16:07:03 +0000 (16:07 +0000)] 
Fix typo in docs; spotted by Gabor Greif

6 years agoClarify docs on when -ddump-* imply -fforce-recomp; fixes #7406
Ian Lynagh [Sat, 12 Jan 2013 12:55:31 +0000 (12:55 +0000)] 
Clarify docs on when -ddump-* imply -fforce-recomp; fixes #7406

6 years agoMerge branch 'master' of
Johan Tibell [Fri, 11 Jan 2013 21:00:41 +0000 (13:00 -0800)] 
Merge branch 'master' of

6 years agoDon't make -C imply -fvia-C
Ian Lynagh [Fri, 11 Jan 2013 18:44:01 +0000 (18:44 +0000)] 
Don't make -C imply -fvia-C

All -fvia-C does nowadays is print a warning saying that it doesn't
do anything.

6 years agoMake "happensBefore" take account of whether we are unregisterised
Ian Lynagh [Fri, 11 Jan 2013 18:42:40 +0000 (18:42 +0000)] 
Make "happensBefore" take account of whether we are unregisterised

If we are not unregisterised then we skip the HCc phase.
Fixes #7563.

6 years agoUpdate a panic message
Ian Lynagh [Fri, 11 Jan 2013 18:03:15 +0000 (18:03 +0000)] 
Update a panic message

I don't actually know if suggesting -fllvm as a workaround is useful
advice, but -fvia-C certainly won't help as it doesn't do anything
any more.

6 years agoWhitespace only in nativeGen/SPARC/Base.hs
Ian Lynagh [Fri, 11 Jan 2013 17:52:22 +0000 (17:52 +0000)] 
Whitespace only in nativeGen/SPARC/Base.hs

6 years agoUpdate a comment
Ian Lynagh [Fri, 11 Jan 2013 17:49:31 +0000 (17:49 +0000)] 
Update a comment

6 years agoRemove checkCOrAsmOrLlvmOrDotNetOrInterp
Ian Lynagh [Fri, 11 Jan 2013 16:57:32 +0000 (16:57 +0000)] 
Remove checkCOrAsmOrLlvmOrDotNetOrInterp

We now just use checkCOrAsmOrLlvmOrInterp instead, which had
an identical definition.

6 years agoImprove some error messages
Ian Lynagh [Fri, 11 Jan 2013 16:56:30 +0000 (16:56 +0000)] 
Improve some error messages

6 years agoUpdate bytestring and terminfo repos
Ian Lynagh [Fri, 11 Jan 2013 14:39:46 +0000 (14:39 +0000)] 
Update bytestring and terminfo repos

bytestring fixes #7556.
terminfo fixes #7281.

6 years agoSmall build system refactoring
Ian Lynagh [Fri, 11 Jan 2013 13:14:29 +0000 (13:14 +0000)] 
Small build system refactoring

hs-suffix-rules now calls hs-suffix-rules-srcdir, saving some duplication

6 years agoBuild system: Add ExtraMakefileSanityChecks for extra safety
Ian Lynagh [Fri, 11 Jan 2013 13:21:51 +0000 (13:21 +0000)] 
Build system: Add ExtraMakefileSanityChecks for extra safety

Whether we check that .hi files have actually been created is now
controlled by $(ExtraMakefileSanityChecks) (defaults to NO).

Also updated comments about the .hi rule.

6 years agodynamic-too progress
Ian Lynagh [Fri, 11 Jan 2013 11:54:23 +0000 (11:54 +0000)] 
dynamic-too progress

6 years agoRefactoring: No functional change
Ian Lynagh [Thu, 10 Jan 2013 23:39:32 +0000 (23:39 +0000)] 
Refactoring: No functional change

Moved some code from runPipeline' into runPipeline.

6 years agoAdd preprocessor defines when SSE is enabled
Johan Tibell [Thu, 10 Jan 2013 23:30:21 +0000 (15:30 -0800)] 
Add preprocessor defines when SSE is enabled

This will add the following preprocessor defines when Haskell source
files are compiled:

 * __SSE__ - If any version of SSE is enabled
 * __SSE2__ - If SSE2 or greater is enabled
 * __SSE4_2_ - If SSE4.2 is enabled

Note that SSE2 is enabled by default on x86-64.

6 years agoHandle -boot files properly when doing -dynamic-too
Ian Lynagh [Sat, 15 Dec 2012 15:31:03 +0000 (15:31 +0000)] 
Handle -boot files properly when doing -dynamic-too

6 years agoRemove redundant rule from rules/
Ian Lynagh [Thu, 10 Jan 2013 20:41:43 +0000 (20:41 +0000)] 
Remove redundant rule from rules/

We were adding "maintainer-clean : distclean" every time we call
build-package. All of these are redundant, as the same dependency
appears in the root

6 years agoEnable the .hi file sanity check when not on Windows
Ian Lynagh [Sun, 6 Jan 2013 17:36:45 +0000 (17:36 +0000)] 
Enable the .hi file sanity check when not on Windows

We don't want the overhead of spawning a shell on Windows, but on other
platforms it's a useful sanity check.

6 years agoMake the rule for .hi files depend on the .hs/.lhs files
Ian Lynagh [Sat, 5 Jan 2013 18:50:29 +0000 (18:50 +0000)] 
Make the rule for .hi files depend on the .hs/.lhs files

make thought that it could make a .hi file for the C files in
libraries, which was causing problems when using dynamic-too.

6 years agoSupport the MergeStub phase when building with dynamic-too
Ian Lynagh [Sat, 5 Jan 2013 15:41:05 +0000 (15:41 +0000)] 
Support the MergeStub phase when building with dynamic-too

6 years agoUpdate the -no-auto-link-packages docs
Ian Lynagh [Mon, 7 Jan 2013 12:14:11 +0000 (12:14 +0000)] 
Update the -no-auto-link-packages docs

It's now base + rts, rather than haskell98, that we link in by default.

6 years agoFix some incorrect narrowing rules (#7361)
Simon Marlow [Wed, 9 Jan 2013 16:52:16 +0000 (16:52 +0000)] 
Fix some incorrect narrowing rules (#7361)

e.g. narrow8Int# subsumes narrow16Int#, not the other way around.

6 years agofix disassembler after removal of size field in bco->instrs (#7518)
Simon Marlow [Wed, 9 Jan 2013 14:46:03 +0000 (14:46 +0000)] 
fix disassembler after removal of size field in bco->instrs  (#7518)

6 years agoremove unnecessary size field in BCO (#7518)
Simon Marlow [Wed, 9 Jan 2013 11:51:58 +0000 (11:51 +0000)] 
remove unnecessary size field in BCO (#7518)

6 years agoadd docs for ":showi language" (#7501)
Simon Marlow [Wed, 9 Jan 2013 09:29:42 +0000 (09:29 +0000)] 
add docs for ":showi language" (#7501)

6 years agoMerge branch 'master' of
Simon Peyton Jones [Wed, 9 Jan 2013 09:37:12 +0000 (09:37 +0000)] 
Merge branch 'master' of


6 years agoMore tidying up in FamInstBranch
Simon Peyton Jones [Wed, 9 Jan 2013 08:58:40 +0000 (08:58 +0000)] 
More tidying up in FamInstBranch

In particular I removed the fib_index and fib_loc fields.
The "master version" is in the CoAxiom; the FamInstBranches
are only for matching.

6 years agoFix Trac #7560.
Richard Eisenberg [Wed, 9 Jan 2013 04:30:16 +0000 (23:30 -0500)] 
Fix Trac #7560.

Code in conflictInstErr did not handle the case where some branches
of a branched family instance had an error and some didn't. It was
all or nothing. Now, if there are no conflicts for a given branch,
conflictInstErr just ignores the branch instead of panicking.

6 years agoAdd missing import
Simon Peyton Jones [Tue, 8 Jan 2013 12:04:24 +0000 (12:04 +0000)] 
Add missing import

6 years agoAdd missing file TcValidity.lhs
Simon Peyton Jones [Tue, 8 Jan 2013 08:39:36 +0000 (08:39 +0000)] 
Add missing file TcValidity.lhs

This should have been part of
  commit 97db0edc4e637dd61ec635d1f9b6b6dd25ad890c
  Re-engineer the ambiguity test for user type signatures

6 years agoMerge remote branch 'origin/master'
Simon Peyton Jones [Tue, 8 Jan 2013 08:27:11 +0000 (08:27 +0000)] 
Merge remote branch 'origin/master'

6 years agoRe-engineer the ambiguity test for user type signatures
Simon Peyton Jones [Tue, 8 Jan 2013 08:26:40 +0000 (08:26 +0000)] 
Re-engineer the ambiguity test for user type signatures

Two main changes. First, re-engineer the ambiguity test.  Previously
TcMType.checkAmbiguity used a rather syntactic test to detect some
types that are certainly ambiguous.  But a much easier test is available,
and it is used for inferred types in TcBinds. Namely
    <type> is ambiguous
   <type> `TcUnify.isSubType` <type>
fails to hold, where "isSubType" means "is provably more polymorphic than".
      C a => Int
is ambiguous, because isSubType instantiates the (C a => Int)
to (C alpha => Int) and then tries to deduce (C alpha) from (C a). This is
Martin Sulzmann's definition of ambiguity.  (Defn 10 of "Understanding
functional dependencies via constraint handling rules", JFP.)

This change is neat, reduces code, and correctly rejects more programs.
However is *is* just possible to have a useful program that would be
rejected. For example
          class C a b
          f :: C Int b => Int -> Int
Here 'f' would be rejected as having an ambiguous type. But it is
just possible that, at a *call* site there might be an instance
declaration  instance C Int b, which does not constrain 'b' at all.
This is pretty strange -- why is 'b' overloaded at all? -- but it's
possible, so I also added a flag -XAllowAmbiguousTypes that simply
removes the ambiguity check.  Let's see if anyone cares.  Meanwhile
the earlier error report will be useful for everyone else.

A handful of regression tests had to be adjusted as a result, because
they used ambiguous types, somewhat accidentally.

Second, split TcMType (already too large) into two

  * TcMType: a low-level module dealing with monadic operations like
    zonking, creating new evidence variables, etc

  * TcValidity: a brand-new higher-level module dealing with
    validity checking for types: checkValidType, checkValidInstance,
    checkFamInstPats etc

Apart from the fact that TcMType was too big, this allows TcValidity
to import TcUnify(tcSubType) without causing a loop.

6 years agoRemove two unused imports, detected by the fix to Trac #7454
Simon Peyton Jones [Mon, 7 Jan 2013 17:52:08 +0000 (17:52 +0000)] 
Remove two unused imports, detected by the fix to Trac #7454

6 years agoRearrange the computation of unused imports; fixes Trac #7454
Simon Peyton Jones [Mon, 7 Jan 2013 17:50:57 +0000 (17:50 +0000)] 
Rearrange the computation of unused imports; fixes Trac #7454

6 years agoFix bugs in allocMoreStack (#7498, #7510)
Simon Marlow [Mon, 7 Jan 2013 12:26:29 +0000 (12:26 +0000)] 
Fix bugs in allocMoreStack (#7498, #7510)

There were four bugs here.  Clearly I didn't test this enough to
expose the bugs - it appeared to work on x86/Linux, but completely by
accident it seems.

1. the delta was wrong by a factor of the slot size (as noted on #7498)

2. we weren't correctly aligning the stack pointer (sp needs to be
16-byte aligned on x86/x86_64)

3. we were doing the adjustment multiple times in the case of a block
that was both a return point and a local branch target.  To fix this I
had to add new shim blocks to adjust the stack pointer, and retarget
the original branches.  See comment for details.

4. we were doing the adjustment for CALL instructions, which is
unnecessary and wrong; only JMPs should be preceded by a stack

(Someone with a PPC box will need to update the PPC version of
allocMoreStack to fix the above bugs, using the x86 version as a

6 years agomake "./sync-all -r <path> remote set-url origin" work
Simon Marlow [Fri, 21 Dec 2012 15:06:11 +0000 (15:06 +0000)] 
make "./sync-all -r <path> remote set-url origin" work

6 years agoMerge branch 'master' of
Simon Peyton Jones [Mon, 7 Jan 2013 10:45:08 +0000 (10:45 +0000)] 
Merge branch 'master' of

6 years agoRefactor invariants for FamInsts.
Richard Eisenberg [Sat, 5 Jan 2013 05:04:54 +0000 (00:04 -0500)] 
Refactor invariants for FamInsts.

This commit mirrors work done in the commit for ClsInsts, 5efe9b...

- All FamInsts have *fresh* type variables. So, no more freshness work
in addLocalFamInst

- Some pretty-printing code around FamInsts was cleaned up a bit
This caused location information to be added to CoAxioms and index
information to be added to FamInstBranches.

6 years agoAdd a -rpath entry for the RTS library, so that it can find libffi
Ian Lynagh [Fri, 4 Jan 2013 18:43:19 +0000 (18:43 +0000)] 
Add a -rpath entry for the RTS library, so that it can find libffi

This fixes dynamic library resolution when --enable-new-dtags is used

When --enable-new-dtags is used when linking an executable, a RUNPATH as
well as RPATH is set. The linker then ignores RPATH, and RUNPATH is only
used for directly (not transitively) needed libraries. As the program
doesn't directly need libffi, it isn't found.

6 years agoAdded note explaining the lambdas generated by functor deriving code, and how it...
Twan van Laarhoven [Thu, 3 Jan 2013 15:24:42 +0000 (16:24 +0100)] 
Added note explaining the lambdas generated by functor deriving code, and how it compares to the old deriving code which used eta expansion.

6 years agoChanged deriving of Functor, Foldable, Traversable to fix #7436. Added foldMap to...
Twan van Laarhoven [Fri, 23 Nov 2012 14:03:45 +0000 (15:03 +0100)] 
Changed deriving of Functor, Foldable, Traversable to fix #7436. Added foldMap to derived Foldable instance.

The derived instances will no longer eta-expand the function. I.e. instead of
    fmap f (Foo a) = Foo (fmap (\x -> f x) a)
we now derive
    fmap f (Foo a) = Foo (fmap f a)

Some superflous lambdas are generated as a result. For example
    data X a = X (a,a)
    fmap f (X x) = (\y -> case y of (a,b) -> (f a, f b)) x
The optimizer should be able to simplify this code, as it is just beta reduction.

The derived Foldable instance now includes foldMap in addition to foldr.

6 years agoMerge branch 'master' of
Simon Peyton Jones [Fri, 4 Jan 2013 10:31:25 +0000 (10:31 +0000)] 
Merge branch 'master' of

6 years agoSwitch on -XEmptyCase when renaming derived declarations
Simon Peyton Jones [Fri, 4 Jan 2013 10:30:53 +0000 (10:30 +0000)] 
Switch on -XEmptyCase when renaming derived declarations

Compiler-generated code can have empty cases

6 years agoAdd an ASSERT
Simon Peyton Jones [Fri, 4 Jan 2013 10:30:26 +0000 (10:30 +0000)] 

6 years agoRefactor HsExpr.MatchGroup
Simon Peyton Jones [Fri, 4 Jan 2013 10:30:14 +0000 (10:30 +0000)] 
Refactor HsExpr.MatchGroup

 * Make MatchGroup into a record, and use the record fields

 * Split the type field into two: mg_arg_tys and mg_res_ty
   This makes life much easier for the desugarer when the
   case alterantives are empty

A little bit of this change unavoidably ended up in the preceding
commit about empty case alternatives

6 years agoAllow empty case expressions (and lambda-case) with -XEmptyCase
Simon Peyton Jones [Fri, 4 Jan 2013 10:27:38 +0000 (10:27 +0000)] 
Allow empty case expressions (and lambda-case) with -XEmptyCase

The main changes are:
  * Parser accepts empty case alternatives
  * Renamer checks that -XEmptyCase is on in that case
  * (Typechecker is pretty much unchanged.)
  * Desugarer desugars empty case alternatives, esp:
      - Match.matchWrapper and Match.match now accept empty eqns
      - New function matchEmpty deals with the empty case
      - See Note [Empty case alternatives] in Match

This patch contains most of the work, but it's a bit mixed up
with a refactoring of MatchGroup that I did at the same time
(next commit).

6 years agoMake CaseElim a bit less aggressive
Simon Peyton Jones [Fri, 4 Jan 2013 10:18:49 +0000 (10:18 +0000)] 
Make CaseElim a bit less aggressive

See Note [Case elimination: lifted case]:

We used to do case elimination if
        (c) the scrutinee is a variable and 'x' is used strictly
But that changes
    case x of { _ -> error "bad" }
    --> error "bad"
which is very puzzling if 'x' is later bound to (error "good").
Where the order of evaluation is specified (via seq or case)
we should respect it.

c.f. Note [Empty case alternatives] in CoreSyn, which is how
I came across this.

6 years agoSet DBLATEX_OPTS to -P '' (fixes #7486)
Ian Lynagh [Fri, 4 Jan 2013 01:46:21 +0000 (01:46 +0000)] 
Set DBLATEX_OPTS to -P '' (fixes #7486)

Apparently this fixes the build with dblatex 0.3.4.

6 years agoMake validating with GhcProfiled=YES Just Work
Ian Lynagh [Thu, 3 Jan 2013 23:54:43 +0000 (23:54 +0000)] 
Make validating with GhcProfiled=YES Just Work

It now takes care of adding p to the GhcLibWays, rather than just
complaining that it's missing.

6 years agoFix LLVM code generated for word2Float# and word2Double#.
Geoffrey Mainland [Thu, 3 Jan 2013 16:59:03 +0000 (16:59 +0000)] 
Fix LLVM code generated for word2Float# and word2Double#.

6 years agoShip transformers with GHC
Ian Lynagh [Wed, 2 Jan 2013 20:49:07 +0000 (20:49 +0000)] 
Ship transformers with GHC

This means that we can use the standard MonadIO class, rather than
needing our own copy.

6 years agoWhitespace only in utils/MonadUtils.hs
Ian Lynagh [Wed, 2 Jan 2013 20:18:21 +0000 (20:18 +0000)] 
Whitespace only in utils/MonadUtils.hs

6 years agoMerge branch 'master' of
Simon Peyton Jones [Wed, 2 Jan 2013 16:40:13 +0000 (16:40 +0000)] 
Merge branch 'master' of

6 years agoAdd an extra error check in DEBUG mode for ill-typed unfoldings
Simon Peyton Jones [Wed, 2 Jan 2013 16:39:54 +0000 (16:39 +0000)] 
Add an extra error check in DEBUG mode for ill-typed unfoldings

6 years agoCrucial bug fix: use scrut' rather than scrut!
Simon Peyton Jones [Wed, 2 Jan 2013 16:39:34 +0000 (16:39 +0000)] 
Crucial bug fix: use scrut' rather than scrut!

6 years agoRefactoring; no change in behaviour
Simon Peyton Jones [Wed, 2 Jan 2013 16:39:12 +0000 (16:39 +0000)] 
Refactoring; no change in behaviour

6 years agoDefine ListSetOps.getNth, and use it
Simon Peyton Jones [Wed, 2 Jan 2013 16:38:46 +0000 (16:38 +0000)] 
Define ListSetOps.getNth, and use it

I was tracking down an error looking like
  Prelude.(!!): index too large
which is very unhelpful.  This patch replaces at least some uses
of (!!) in GHC with getNth, which has a more helpful error
message (with DEBUG anyway)

6 years agoTidy the type in badInstSigErr (fixes Trac #7545)
Simon Peyton Jones [Wed, 2 Jan 2013 16:24:14 +0000 (16:24 +0000)] 
Tidy the type in badInstSigErr (fixes Trac #7545)

6 years agoDe-tab PprExternalCore
Simon Peyton Jones [Wed, 2 Jan 2013 15:48:29 +0000 (15:48 +0000)] 
De-tab PprExternalCore

6 years agoFix bug in External Core pretty printer (fixes Trac #7547)
Simon Peyton Jones [Wed, 2 Jan 2013 15:47:31 +0000 (15:47 +0000)] 
Fix bug in External Core pretty printer (fixes Trac #7547)

This bug was making GHC loop when printing external core from test T7239.

6 years agoUpdate strictness documentation (Trac #7546)
Simon Peyton Jones [Wed, 2 Jan 2013 15:43:34 +0000 (15:43 +0000)] 
Update strictness documentation (Trac #7546)

6 years agoImprove HsSyn pretty-printing of instance declarations (fixes Trac #7532)
Simon Peyton Jones [Wed, 2 Jan 2013 12:37:07 +0000 (12:37 +0000)] 
Improve HsSyn pretty-printing of instance declarations (fixes Trac #7532)

6 years agoMinor refactoring plus comments
Simon Peyton Jones [Wed, 2 Jan 2013 11:58:35 +0000 (11:58 +0000)] 
Minor refactoring plus comments