4 years agoDocumentation for Language.Haskell.TH.Quote.
Edward Z. Yang [Fri, 17 Apr 2015 11:24:33 +0000 (12:24 +0100)] 
Documentation for Language.Haskell.TH.Quote.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: thomie

Differential Revision:

4 years agoGive a hint when a TH splice has a bad package key, partially fixes #10279
Edward Z. Yang [Mon, 20 Apr 2015 21:02:36 +0000 (14:02 -0700)] 
Give a hint when a TH splice has a bad package key, partially fixes #10279

Previously, if we got a package key in our splice, we'd give
a very unhelpful error message saying we couldn't find
a package 'base-', despite there being a package with
that source package ID.  Really, we couldn't find a package with
that *key*, so clarify, and also tell the user what the real
package key is.

Signed-off-by: Edward Z. Yang <>
4 years agoFix safeHaskell test for llvm backend
Erik de Castro Lopo [Sun, 3 May 2015 22:19:04 +0000 (08:19 +1000)] 
Fix safeHaskell test for llvm backend

Test was failing (could not execute: pgmlc) for arm (which uses
the llvm backend) due to the `-pgmlc pgmlc` in OPTIONS_GHC. It
was also failing on amd64 in the same way when `-fllvm` was
added to the command line. Its safe to remove because the
compiler should already know which llvm tool to use.

Test Plan: validate

Reviewers: dterei, austin

Subscribers: bgamari, thomie

Differential Revision:

4 years agoarm: Force non-executable stack (#10369)
Erik de Castro Lopo [Fri, 1 May 2015 10:33:03 +0000 (20:33 +1000)] 
arm: Force non-executable stack (#10369)

Test `T703` was found to be failing on arm/linux. The solution
was to add a linker flag to explicitly set the stack to

Signed-off-by: Erik de Castro Lopo <>
Test Plan: validate on x86_64 and arm linux

Reviewers: ezyang, rwbarton, austin

Subscribers: bgamari, thomie

Differential Revision:

GHC Trac Issues: #10369

4 years agoPermit empty closed type families
Adam Gundry [Mon, 4 May 2015 14:30:37 +0000 (15:30 +0100)] 
Permit empty closed type families

Fixes #9840 and #10306, and includes an alternative resolution to #8028.
This permits empty closed type families, and documents them in the user
guide. It updates the Haddock submodule to support the API change.

Test Plan: Added `indexed-types/should_compile/T9840` and updated
`indexed-types/should_fail/ClosedFam4` and `th/T8028`.

Reviewers: austin, simonpj, goldfire

Reviewed By: goldfire

Subscribers: bgamari, jstolarek, thomie, goldfire

Differential Revision:

GHC Trac Issues: #9840, #10306

4 years agoMove IP, Symbol, Nat to ghc-prim
Simon Peyton Jones [Fri, 1 May 2015 14:05:11 +0000 (15:05 +0100)] 
Move IP, Symbol, Nat to ghc-prim

This motivation is to declare class IP much earlier (in ghc-prim),
so that implicit parameters (which depend on IP) is available
to library code, notably the 'error' function.

* Move class IP from base:GHC.IP
                to ghc-prim:GHC.Classes
* Delete module GHC.IP from base

* Move types Symbol and Nat
      from base:GHC.TypeLits
      to ghc-prim:GHC.Types

There was a name clash in GHC.RTS.Flags, where I renamed
the local type Nat to RtsNat.

4 years agoKill off the default types in ghc-prim
Simon Peyton Jones [Fri, 1 May 2015 14:06:00 +0000 (15:06 +0100)] 
Kill off the default types in ghc-prim

We were trying to load the type for Integer to do defaulting
in ghc-prim, but it's simply not available at that time.

4 years agoMake Derived NomEq rewrite only Derived NomEq
Simon Peyton Jones [Fri, 1 May 2015 08:42:21 +0000 (09:42 +0100)] 
Make Derived NomEq rewrite only Derived NomEq

See Note [Deriveds do rewrite Deriveds].  The important point
is that we want to maintain the Note [Can-rewrite relation]
property, lest we risk loops.

4 years agoUpdate haddock submodule to track TyCon change
Simon Peyton Jones [Fri, 1 May 2015 08:40:37 +0000 (09:40 +0100)] 
Update haddock submodule to track TyCon change

4 years agoRefactor TyCon to eliminate TupleTyCon
Simon Peyton Jones [Thu, 30 Apr 2015 22:33:42 +0000 (23:33 +0100)] 
Refactor TyCon to eliminate TupleTyCon

This makes TupleTyCon into an ordinary AlgTyCon, distinguished
by its AlgTyConRhs, rather than a separate constructor of TyCon.

It is preparatory work for making constraint tuples into classes,
for which the ConstraintTuple tuples will have a TyConParent
of a ClassTyCon.  Tuples didn't have this possiblity before.

The patch affects other modules because I eliminated the
unsatisfactory partial functions tupleTyConBoxity and tupleTyConSort.
And tupleTyConArity which is just tyConArity.

4 years agoComments only
Simon Peyton Jones [Thu, 30 Apr 2015 13:44:23 +0000 (14:44 +0100)] 
Comments only

4 years agoTypeset Backpack semantic entities in figure, figure-ify all asides.
Edward Z. Yang [Thu, 30 Apr 2015 22:54:09 +0000 (15:54 -0700)] 
Typeset Backpack semantic entities in figure, figure-ify all asides.

Signed-off-by: Edward Z. Yang <>
4 years agoTypo fixes (mostly in comments)
Gabor Greif [Thu, 30 Apr 2015 09:47:08 +0000 (11:47 +0200)] 
Typo fixes (mostly in comments)

4 years agoTidy up treatment of FlexibleContexts
Simon Peyton Jones [Thu, 30 Apr 2015 08:18:49 +0000 (09:18 +0100)] 
Tidy up treatment of FlexibleContexts

Previously (Trac #10351) we could get

    Non type-variable argument in the constraint: C [t]
    (Use FlexibleContexts to permit this)
    When checking that `f' has the inferred type
      f :: forall t. C [t] => t -> ()

which is a bit stupid: we have *inferred* a type that we
immediately *reject*.  This patch arranges that that the
generalisation mechanism (TcSimplify.decideQuantification)
doesn't pick a predicate that will be rejected by the
subsequent validity check.

This forced some minor refactoring, as usual.

4 years agoTypeset Backpack syntax in a figure
Simon Peyton Jones [Wed, 29 Apr 2015 23:19:45 +0000 (00:19 +0100)] 
Typeset Backpack syntax in a figure

4 years agoTest Trac #10226
Simon Peyton Jones [Wed, 29 Apr 2015 14:11:15 +0000 (15:11 +0100)] 
Test Trac #10226

Fixed by the patch for #10009

4 years agoImprove improvement in the constraint solver
Simon Peyton Jones [Wed, 29 Apr 2015 12:43:09 +0000 (13:43 +0100)] 
Improve improvement in the constraint solver

This regrettably-big patch substantially improves the way in which
"improvement" happens in the constraint solver.  It was triggered by
trying to crack Trac #10009, but it turned out to solve #10340 as

The big picture, with several of the trickiest examples, is described
in Note [The improvement story] in TcInteract.

The major change is this:

* After solving we explicitly try "improvement", by
     - making the unsolved Wanteds into Deriveds
     - allowing Deriveds to rewrite Deriveds
  This more aggressive rewriting "unlocks" some extra
  guess-free unifications.

* The main loop is in TcInteract.solveSimpleWanteds, but I also ended
  up refactoring TcSimplify.simpl_loop, and its surrounding code.

  Notably, any insolubles from the Givens are pulled out
  and treated separately, rather than staying in the inert set
  during the solveSimpleWanteds loop.

There are a lot of follow-on changes

* Do not emit generate Derived improvements from Wanteds.
  This saves work in the common case where they aren't needed.

* For improvement we should really do type-class reduction on Derived
  constraints in doTopReactDict.  That entailed changing the GenInst
  constructor a bit; a local and minor change

* Some annoying faffing about with dropping derived constraints;
  see dropDerivedWC, dropDerivedSimples, dropDerivedInsols,
  and their Notes.

* Some substantial refactoring in TcErrors.reportWanteds.
  This work wasn't strictly forced, but I got sucked into it.
  All the changes are in TcErrors.

* Use TcS.unifyTyVar consistently, rather than setWantedTyBind,
  so that unifications are properly tracked.

* Refactoring around solveWantedsTcM, solveWantedsAndDrop.
  They previously guaranteed a zonked result, but it's more
  straightforward for clients to zonk.

4 years agoDon't print evidence in TcFlatten
Simon Peyton Jones [Wed, 29 Apr 2015 10:26:23 +0000 (11:26 +0100)] 
Don't print evidence in TcFlatten

Because when flattening a Derived constraint, the evidence doesn't exist
(it's an error thunk)

4 years agoA little outright bug in canEqTyVar2
Simon Peyton Jones [Wed, 29 Apr 2015 10:23:05 +0000 (11:23 +0100)] 
A little outright bug in canEqTyVar2

I had 'ev' where I should have had 'new_ev'.  It's quite hard to make
this bug cause a failure, but I did eventually get a Lint error
somewhere.  Anyway, it's just a typo, I think.

4 years agoSeed SpecConstr from local calls
Simon Peyton Jones [Tue, 28 Apr 2015 16:42:37 +0000 (17:42 +0100)] 
Seed SpecConstr from local calls

Seed SpecConstr based on *local* calls as well as *RHS* calls.
See Note [Seeding top-level recursive groups].  The change here
is mentioned here:

   NB: before Apr 15 we used (a) only, but Dimitrios had an example
       where (b) was  crucial, so I added that.

This is a pretty small change, requested by Dimitrios, that adds
SpecConstr call patterns from the rest of the module, as well as ones
from the RHS.

Still to come: #10346.

4 years agoBackpack docs: merge backpack-shaping into algorithm, sigs no longer provide
Edward Z. Yang [Tue, 28 Apr 2015 22:14:28 +0000 (15:14 -0700)] 
Backpack docs: merge backpack-shaping into algorithm, sigs no longer provide

Signed-off-by: Edward Z. Yang <>
4 years agoFull type checking Backpack details.
Edward Z. Yang [Mon, 27 Apr 2015 22:41:29 +0000 (15:41 -0700)] 
Full type checking Backpack details.

Signed-off-by: Edward Z. Yang <>
4 years agoBackpack docs: explain alternate merging scheme.
Edward Z. Yang [Mon, 27 Apr 2015 17:34:23 +0000 (10:34 -0700)] 
Backpack docs: explain alternate merging scheme.

Signed-off-by: Edward Z. Yang <>
4 years agoFlesh out some more Backpack examples in the merging section.
Edward Z. Yang [Mon, 27 Apr 2015 16:25:41 +0000 (09:25 -0700)] 
Flesh out some more Backpack examples in the merging section.

Signed-off-by: Edward Z. Yang <>
4 years agobase: Export GHC.Event(.Internal).Lifetime
Ben Gamari [Sat, 25 Apr 2015 07:13:49 +0000 (09:13 +0200)] 
base: Export GHC.Event(.Internal).Lifetime

This was an unfortunate oversight in the original event manager rework
patch. Fixes #10308

Differential Revision:

4 years agoAdd missing since-annotations for c024af131b9e2538
Herbert Valerio Riedel [Sat, 25 Apr 2015 07:12:44 +0000 (09:12 +0200)] 
Add missing since-annotations for c024af131b9e2538

See also #9049

4 years agoBump base version to
Herbert Valerio Riedel [Sat, 25 Apr 2015 06:53:38 +0000 (08:53 +0200)] 
Bump base version to

This is needed because GHC 7.10.2 requires a minor version bump to base-

Several test outputs needed base- replaced by base-

4 years agoUpdates to Backpack documentation based on recent visit to MSRC.
Edward Z. Yang [Mon, 20 Apr 2015 21:52:19 +0000 (22:52 +0100)] 
Updates to Backpack documentation based on recent visit to MSRC.

Includes lots of shaping examples, and a shaping algorithm description.

Signed-off-by: Edward Z. Yang <>
4 years agoChange default roles in hs-boot files. (#9204)
Richard Eisenberg [Fri, 24 Apr 2015 02:34:33 +0000 (22:34 -0400)] 
Change default roles in hs-boot files. (#9204)

Test case: roles/should_compile/T9204b

4 years agoTest case for #10141
Richard Eisenberg [Thu, 23 Apr 2015 21:02:32 +0000 (17:02 -0400)] 
Test case for #10141

4 years agoTest #10321 in ghci/scripts/T10321
Richard Eisenberg [Thu, 23 Apr 2015 20:57:34 +0000 (16:57 -0400)] 
Test #10321 in ghci/scripts/T10321

4 years agoFix the formal operational semantics (#10121)
Richard Eisenberg [Thu, 23 Apr 2015 20:02:43 +0000 (16:02 -0400)] 
Fix the formal operational semantics (#10121)

This adapts the work of Christiaan Baaij to present a sensible
operational semantics for FC with mutual recursion.

4 years agoFix #10285 by refusing to use NthCo on a newtype.
Richard Eisenberg [Thu, 23 Apr 2015 19:31:37 +0000 (15:31 -0400)] 
Fix #10285 by refusing to use NthCo on a newtype.

During this commit, I tested to make sure that CoreLint actually
catches the Core error if the typechecker doesn't.

Test case: typecheck/should_fail/T10285

4 years agoRename role annotations w.r.t only local decls.
Richard Eisenberg [Fri, 10 Apr 2015 21:25:29 +0000 (22:25 +0100)] 
Rename role annotations w.r.t only local decls.

Fix #10263.

4 years agoMake sure GHC.List.last is memory-efficient
Joachim Breitner [Thu, 16 Apr 2015 12:49:23 +0000 (14:49 +0200)] 
Make sure GHC.List.last is memory-efficient

by eta-expanding its definition so that GHC optmizes the foldl here.
Also make sure that other uses of last go via foldl as well, to allow
list fusion (tested in T9339). Fixes #10260.

4 years agoRename new T9858d to T9858e to avoid test name clash
Joachim Breitner [Wed, 22 Apr 2015 16:50:00 +0000 (18:50 +0200)] 
Rename new T9858d to T9858e to avoid test name clash

(Next time, when fixing someone else’s mistake, I really shouldn’t do
the precise same thing.)

4 years agoRename new T9858c to T9858d to avoid test name clash
Joachim Breitner [Wed, 22 Apr 2015 14:18:27 +0000 (16:18 +0200)] 
Rename new T9858c to T9858d to avoid test name clash

4 years agoTest Trac #9858 comment:101
Simon Peyton Jones [Wed, 22 Apr 2015 13:18:56 +0000 (14:18 +0100)] 
Test Trac #9858 comment:101

4 years agoBetter documetation of higher rank types
Simon Peyton Jones [Wed, 22 Apr 2015 13:05:03 +0000 (14:05 +0100)] 
Better documetation of higher rank types

In response to suggestions on Trac #10281

4 years agoImprove error reporting for impredicative types
Simon Peyton Jones [Tue, 21 Apr 2015 12:43:46 +0000 (13:43 +0100)] 
Improve error reporting for impredicative types

Don't suggest -XImpredicativeTypes; and document its flakiness
Fixes Trac #10325

4 years agoComments only
Simon Peyton Jones [Tue, 21 Apr 2015 12:39:46 +0000 (13:39 +0100)] 
Comments only

4 years agoFix superclass generation in an instance
Simon Peyton Jones [Tue, 21 Apr 2015 12:38:32 +0000 (13:38 +0100)] 
Fix superclass generation in an instance

More fallout from the silent-superclass refactoring; nothing drastic.
Fixes Trac #10335.

4 years agoFix #10182 by disallowing/avoiding self {-# SOURCE #-} imports
Edward Z. Yang [Tue, 21 Apr 2015 13:46:32 +0000 (06:46 -0700)] 
Fix #10182 by disallowing/avoiding self {-# SOURCE #-} imports

hs-boot declarations were leaking into the EPS due to
self {-# SOURCE #-} imports, and interface loading induced by
orphan instances.  For the former, we simply disallow self
{-# SOURCE #-} imports; for the latter, we simply just don't
load an interface if it would be ourself.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10182

4 years agoDon't use self {-# SOURCE #-} import in test-cases.
Edward Z. Yang [Tue, 21 Apr 2015 17:26:25 +0000 (10:26 -0700)] 
Don't use self {-# SOURCE #-} import in test-cases.

It's kind of buggy, c.f. #10182, and isn't motivated by any
real world programs, so we're going to get rid of it (despite
it being handy for GHC test cases.)

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: thomie

Differential Revision:

4 years agoMark T8743 as passing
Joachim Breitner [Wed, 22 Apr 2015 09:07:37 +0000 (11:07 +0200)] 
Mark T8743 as passing

as Simons recent commit 9b9fc4c732baab126b057b4031bebcbd67d6e348 fixed

4 years agoDo not decompose => (Trac #9858)
Simon Peyton Jones [Wed, 22 Apr 2015 08:45:52 +0000 (09:45 +0100)] 
Do not decompose => (Trac #9858)

We really don't want to unify (a b) with (Eq a => ty).
The ever-ingenious Oerjan discovered this problem;
see comment:101 in Trac #9858.

See Note [Decomposing fat arrow c=>t] in Type.hs

4 years agoFix the boot dfun impedence-matching binding
Simon Peyton Jones [Wed, 22 Apr 2015 08:29:24 +0000 (09:29 +0100)] 
Fix the boot dfun impedence-matching binding

In TcRnDriver.checkHiBootIface' we were generating an
impedence-matching binding
   $fxToRecMaybe = $fToRecMaybe
but the type of the former was gotten from the *hi-boot*
file, so its type constructor was not fully fleshed out.
That should never happen.

Fix is easy, happily.  A dark corner.

4 years agoAdd a blank line
Simon Peyton Jones [Wed, 22 Apr 2015 06:48:18 +0000 (07:48 +0100)] 
Add a blank line

4 years agoUse the gold linker for aarch64/linux (#9673)
Erik de Castro Lopo [Mon, 20 Apr 2015 20:22:44 +0000 (20:22 +0000)] 
Use the gold linker for aarch64/linux (#9673)

Like 32 bit Arm, Aarch64 requires use of the gold linker.

Signed-off-by: Erik de Castro Lopo <>
Test Plan: 'make install' on aarch64, validate elsewhere

Reviewers: rwbarton, bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9673

4 years agoEnable SMP and GHCi support for Aarch64
Erik de Castro Lopo [Wed, 1 Apr 2015 04:46:01 +0000 (04:46 +0000)] 
Enable SMP and GHCi support for Aarch64

Signed-off-by: Erik de Castro Lopo <>
Test Plan: Full build on Aarch64

Reviewers: rwbarton, bgamari, austin

Subscribers: thomie

Differential Revision:

4 years agoGADTs now are CPR-able
Simon Peyton Jones [Tue, 21 Apr 2015 08:54:03 +0000 (09:54 +0100)] 
GADTs now are CPR-able

Accompanies f2d1b7fcbbc55e33375a7321222a9f4ee189aa38
Support unboxing for GADT product types

4 years agoWibble to DmdAnal
Simon Peyton Jones [Tue, 21 Apr 2015 08:29:13 +0000 (09:29 +0100)] 
Wibble to DmdAnal

This fixes a typo in d5773a4939b1feea51ec0db6624c9462751e948a
    Teach DmdAnal that coercions are value arguments!
    (Trac #10288)

Sorry about that; I'm not sure how it slipped through.

4 years agoSupport unboxing for GADT product types
Simon Peyton Jones [Mon, 20 Apr 2015 15:00:49 +0000 (16:00 +0100)] 
Support unboxing for GADT product types

Beofre this commit we never unboxed GADT, even if they
are perfectly civilised products.

This patch liberalises unboxing slightly.
See Note [Product types] in TyCon.

Still to come
 - for strictness, we could maybe deal with existentials too
 - todo: unboxing constructor arguments

4 years agoSpelling in comment
Simon Peyton Jones [Mon, 20 Apr 2015 14:58:31 +0000 (15:58 +0100)] 
Spelling in comment

4 years agoTeach DmdAnal about free coercion variables
Simon Peyton Jones [Mon, 20 Apr 2015 14:57:54 +0000 (15:57 +0100)] 
Teach DmdAnal about free coercion variables

Coercion variables are used in casts and coercions, so the demand
analyser should jolly well not regard them as absent!

In fact this bug never makes a difference because even absent
unboxed-coercion arguments are passed anyway;
see WwLib.mk_abesnt_let, which returns Nothing for coercion Ids.

But it was simply wrong before and that is never cool.

4 years agoTeach DmdAnal that coercions are value arguments!
Simon Peyton Jones [Mon, 20 Apr 2015 14:43:32 +0000 (15:43 +0100)] 
Teach DmdAnal that coercions are value arguments!

The demand analyser was treating coercion args like type args,
which meant that the arguments in a strictness signature got
out of step with the arguments of a call.  Result chaos and
disaster.  Trac #10288 showed it up.

It's hard to get this bug to show up in practice because
 - functions abstracted over coercions are usually abstracted
   over *boxed* coercions
 - we don't currently unbox a boxed-coercion arg because it's
   GADT (I see how to fix this too)

But after floating, optimisation, and so on, Trac #10288 did
get a function abstracted over an unboxed coercion, and then
the -flate-dmd-anal pass went wrong.

I don't think I can come up with a test case, but I don't think
it matters too much.

Still to come
 - Fix a second bug, namely that coercion variables are wrongly
   marked as absent because DmdAnal doesn't check the the free
   variables of casts. I think this never bites in practice
   (see the follow-up commit)

 - Make GADT products work with strictness analysis

4 years agoUpdate Cabal submodule to release
Herbert Valerio Riedel [Mon, 20 Apr 2015 14:19:53 +0000 (16:19 +0200)] 
Update Cabal submodule to release

Highlights since

- cabal check will fail on -fprof-auto passed as a ghc-option
- filterConfigureFlags: filter more flags.
- fix ghcjs-pkg version number handling

Addresses #10304

4 years agoTest case for indirect dependencies in ghci linker (#10322)
Reid Barton [Wed, 15 Apr 2015 20:46:47 +0000 (16:46 -0400)] 
Test case for indirect dependencies in ghci linker (#10322)

4 years agoMake T9579 parallel-safe and add build outputs to .gitignore
Edward Z. Yang [Fri, 17 Apr 2015 10:14:41 +0000 (03:14 -0700)] 
Make T9579 parallel-safe and add build outputs to .gitignore

Signed-off-by: Edward Z. Yang <>
4 years agoStub out pkgState with non-error, helps with debugging.
Edward Z. Yang [Mon, 6 Apr 2015 18:32:14 +0000 (11:32 -0700)] 
Stub out pkgState with non-error, helps with debugging.

When we use -dppr-debug, we'll sometimes attempt to
hit the pkgState to give more detailed information.  It's pretty
annoying to have this fail because we haven't filled in the
pkgState: we can still get useful debugging information by
printing the raw package key.  To avoid this, we just put
in some empty stub pkgState, to be filled in later.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: thomie

Differential Revision:

4 years agoComments only.
Edward Z. Yang [Tue, 7 Apr 2015 20:38:52 +0000 (13:38 -0700)] 
Comments only.

Signed-off-by: Edward Z. Yang <>
Test Plan: comments only

Reviewers: simonpj, austin, goldfire

Subscribers: thomie

Differential Revision:

4 years agoDocumentation for rnImports/rnImportDecl.
Edward Z. Yang [Fri, 3 Apr 2015 03:59:07 +0000 (20:59 -0700)] 
Documentation for rnImports/rnImportDecl.

Signed-off-by: Edward Z. Yang <>
Test Plan: comments only

Reviewers: simonpj, austin

Subscribers: thomie

Differential Revision:

4 years agoBetter hints when RTS options not available (Trac #9579)
Javran Cheng [Fri, 17 Apr 2015 00:52:00 +0000 (10:52 +1000)] 
Better hints when RTS options not available (Trac #9579)

This patch provides user with a better hint when most RTS options
are not available (not compiled with `-rtsopts`).

A new field "rtsOptsEnabled" is added into RtsFlags.MiscFlags to
tell the availablity of RTS options.

Some concerns:
* Unlike other flag fields in "libraries/base/GHC/RTS/Flags.hsc",
  "RtsOptsEnabled" is defined in "includes/RtsAPI.h" and lacks
  constant macros. Therefore In "GHC.RTS", "RtsOptsEnabled" simply
  derives Enum instance and reads as of type "CInt".

* There are other ways to change RTS options (e.g. `-with-rtsopts`),
  but it might be too verbose to mention.

Test Plan: validate

Reviewers: austin, hvr, thomie, simonmar

Reviewed By: thomie

Subscribers: thomie, rwbarton

Differential Revision:

GHC Trac Issues: #9579

4 years agoRename tests so that they have a unique name.
Iavor S. Diatchki [Thu, 16 Apr 2015 21:29:07 +0000 (14:29 -0700)] 
Rename tests so that they have a unique name.

4 years agoFix test output
Iavor S. Diatchki [Thu, 16 Apr 2015 19:45:01 +0000 (12:45 -0700)] 
Fix test output

4 years agoFix test output.
Iavor S. Diatchki [Thu, 16 Apr 2015 19:41:16 +0000 (12:41 -0700)] 
Fix test output.

4 years agoFixes (hopefully!) T9858
Iavor S. Diatchki [Thu, 16 Apr 2015 18:13:24 +0000 (11:13 -0700)] 
Fixes (hopefully!) T9858

The changes are:
  1. No impredicative types in `Typeable`
  2. Distinguish normal tuples, from tuples of constraints.

4 years agoAdd exception for `KnownNat` and `KnownSymbol` in super classes.
Iavor S. Diatchki [Thu, 16 Apr 2015 16:47:28 +0000 (09:47 -0700)] 
Add exception for `KnownNat` and `KnownSymbol` in super classes.

The situation is similar to `Typeable`---we can't set the evidence
outside the solver because we have custom solving rules.  This is safe
because the computed super-class instances can't possibly depend
on the new instance.

4 years agoCall Arity: Trade precision for performance in large mutually recursive groups
Joachim Breitner [Wed, 15 Apr 2015 14:25:13 +0000 (16:25 +0200)] 
Call Arity: Trade precision for performance in large mutually recursive groups

Sometimes (especial with derived Data instances, it seems), one can have
very large mutually recursive bindings. Calculating the Call Arity
analysis result with full precision is an expensive operation in these
case. So above a certain threshold (25, for no good reason besides
intuition), skip this calculation and assume the recursion is not
linear, which is a conservative result.

With this, the Call Arity analysis accounts for 3.7% of the compile time
of haskell-src-exts. Fixes #10293

Differential Revision:

4 years agoImprove Call Arity performance
Joachim Breitner [Wed, 15 Apr 2015 11:32:32 +0000 (13:32 +0200)] 
Improve Call Arity performance

This improves how the Call Arity deals with "boring" variables. Boring
variables are those where it does not bother to include in the analysis
result, so whenever something is looked up in the analysis result, we
have to make a conservative assumption about them.

Previously, we extended the result with such conservative information
about them, to keep the code uniform, but that could blow up the amount
of data passed around, even if only temporarily, and slowed things down.

We now pass around an explicit list (well, set) of variable that are
boring and take that into account whenever we use the result. Not as
pretty, but noticably faster.

4 years agoFix fundep coverage-condition check for poly-kinds
Simon Peyton Jones [Wed, 15 Apr 2015 09:28:40 +0000 (10:28 +0100)] 
Fix fundep coverage-condition check for poly-kinds

See Note [Closing over kinds in coverage] in FunDeps.
I'd already fixed this bug once, for Trac #8391, but I put the
call to closeOverKinds in the wrong place, so Trac #10109
failed.  (It checks the /liberal/ coverage condition, which

The fix was easy: move the call to the right place!

4 years agoDo not allow Typeable on constraints (Trac #9858)
Simon Peyton Jones [Tue, 14 Apr 2015 14:39:01 +0000 (15:39 +0100)] 
Do not allow Typeable on constraints (Trac #9858)

The astonishingly-ingenious trio of
Shachaf Ben-Kiki, Ørjan Johansen and Nathan van Doorn
managed to persuade GHC 7.10.1 to cough up unsafeCoerce.

That is very bad. This patch fixes it by no allowing Typable
on Constraint-kinded things.  And that seems right, since
it is, in effect, a form of impredicative polymorphism,
which Typeable definitely doesn't support.

We may want to creep back in the direction of allowing
Typeable on constraints one day, but this is a good
fix for now, and closes a terrible hole.

4 years agoImplement -f[no-]print-unicode-syntax flag for unicode syntax output (#8959)
Bertram Felgenhauer [Tue, 14 Apr 2015 14:10:52 +0000 (09:10 -0500)] 
Implement -f[no-]print-unicode-syntax flag for unicode syntax output (#8959)

There is currently no way to separate whether UnicodeSyntax is accepted
for input from the corresponding output syntax using unicode symbols.
This patch implements a separate flag for affecting ghc(i)'s output.

Signed-off-by: Bertram Felgenhauer <>
Reviewed By: nomeata, austin

Differential Revision:

GHC Trac Issues: #8959

4 years agoApiAnnotations : lexer discards comment close in nested comment
Alan Zimmerman [Tue, 14 Apr 2015 12:32:52 +0000 (07:32 -0500)] 
ApiAnnotations : lexer discards comment close in nested comment

When parsing a nested comment, such as

  {-  nested comment  -}
  {-# nested pragma  #-}

The lexer returns the comment annotation as

  {-  nested comment
  {-# nested pragma  #

Restore the missing comment end markers in the annotation.

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10277

4 years agoAPI Annotations : ExprWithTySig processing discards annotated spans
Alan Zimmerman [Tue, 14 Apr 2015 12:32:40 +0000 (07:32 -0500)] 
API Annotations : ExprWithTySig processing discards annotated spans

In RdrHsSyn.checkAPat the processing for ExprWithTySig is defined as

   ExprWithTySig e t _ -> do e <- checkLPat msg e
                             -- Pattern signatures are parsed as sigtypes,
                             -- but they aren't explicit forall points.  Hence
                             -- we have to remove the implicit forall here.
                             let t' = case t of
                                        L _ (HsForAllTy Implicit _ _
                                             (L _ []) ty) -> ty
                                        other -> other
                             return (SigPatIn e (mkHsWithBndrs t'))

The t' variable ends up losing its original SrcSpan in the first case
branch. This results in annotations becoming detached from the AST.

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10255

4 years agoRemove LlvmCodeGen panic variants.
Edward Z. Yang [Tue, 14 Apr 2015 12:32:17 +0000 (07:32 -0500)] 
Remove LlvmCodeGen panic variants.

It's pretty irritating having hasktags with multiple top-level
declarations with the same type; hasktags can't figure out which
declaration you actually wanted.

Signed-off-by: Edward Z. Yang <>
Reviewed By: dterei, austin

Differential Revision:

4 years agoAdd "error:" prefix to error-messages
Konstantine Rybnikov [Tue, 14 Apr 2015 06:38:54 +0000 (01:38 -0500)] 
Add "error:" prefix to error-messages

Add "error:" prefix to error-messages, also lowercase "Warning:"
message to match GCC behavior closer.

Reviewed By: thomie, austin

Differential Revision:

GHC Trac Issues: #10021

4 years agoComments and white space only
Simon Peyton Jones [Tue, 14 Apr 2015 08:21:27 +0000 (09:21 +0100)] 
Comments and white space only

4 years agoComments only
Simon Peyton Jones [Tue, 14 Apr 2015 08:21:00 +0000 (09:21 +0100)] 
Comments only

4 years agoZap usage info in CSE (Trac #10218)
Simon Peyton Jones [Tue, 14 Apr 2015 08:20:42 +0000 (09:20 +0100)] 
Zap usage info in CSE (Trac #10218)

Trac #10218 reports a subtle bug that turned out to be:

- CSE invalidated the usage information computed
  by earlier demand analysis, by increasing sharing

- that made a single-entry thunk into a multi-entry thunk

- and with -feager-blackholing, that led to <<loop>>

The patch fixes it by making the CSE pass zap usage information for
let-bound identifiers.   It can be restored by -flate-dmd-anal.

(But making -flate-dmd-anal the default needs some careful work;
see Trac #7782.)

4 years agoparser : the API annotation on opt_sig is being discarded
Alan Zimmerman [Tue, 14 Apr 2015 06:17:58 +0000 (01:17 -0500)] 
parser : the API annotation on opt_sig is being discarded

The opt_sig production is defined as

  opt_sig :: { ([AddAnn],Maybe (LHsType RdrName)) }
          : {- empty -}                   { ([],Nothing) }
          | '::' sigtype                  { ([mj AnnDcolon $1],Just $2) }

It is used in the alt and decl_no_th productions, but neither of them
add the returned annotations.

This commit captures the annotations in the calling productions.

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10254

4 years agoparser: API Annotations : guardquals1 does not annotate commas properly
Alan Zimmerman [Tue, 14 Apr 2015 06:17:48 +0000 (01:17 -0500)] 
parser: API Annotations : guardquals1 does not annotate commas properly

The `guardquals1` production includes

   : guardquals1 ',' qual  {% addAnnotation (gl $ last $ unLoc $1) AnnComma
                                             (gl $2) >>
                               return (sLL $1 $> ($3 : unLoc $1)) }

The AnnComma should be attached to `(gl $ head $ unLoc $1)`, rather than

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10256

4 years agoparser: opt_kind_sig has incorrect SrcSpan
Alan Zimmerman [Tue, 14 Apr 2015 06:16:48 +0000 (01:16 -0500)] 
parser: opt_kind_sig has incorrect SrcSpan

The production for opt_kind_sig is

  opt_kind_sig :: { Located (Maybe (LHsKind RdrName)) }
          :                             { noLoc Nothing }
          | '::' kind                   {% ajl (sLL $1 $> (Just $2)) AnnDcolon (gl $1) }

The outer Location is used only to get the full span for the enclosing
declration, and is then stripped. The inner LHsKind then has a SrcSpan that does
not include the '::'

Extend the SrcSpan on $2 to include $1

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10209

4 years agouse projectVersion from DynFlags rather than cProjectVersion for versionedAppDir
Luite Stegeman [Tue, 14 Apr 2015 06:13:27 +0000 (01:13 -0500)] 
use projectVersion from DynFlags rather than cProjectVersion for versionedAppDir

Reviewed By: edsko, austin

Differential Revision:

GHC Trac Issues: #10232

4 years agoDerive Generic instance for Data.Version.Version
Herbert Valerio Riedel [Tue, 14 Apr 2015 06:12:38 +0000 (01:12 -0500)] 
Derive Generic instance for Data.Version.Version

Reviewed By: austin

Differential Revision:

4 years agoDerive Generic instance for System.Exit.ExitCode
Herbert Valerio Riedel [Tue, 14 Apr 2015 06:12:22 +0000 (01:12 -0500)] 
Derive Generic instance for System.Exit.ExitCode

Reviewed By: austin

Differential Revision:

4 years agoFix autoconf's check for create_timer()
Austin Seipp [Tue, 14 Apr 2015 06:12:09 +0000 (01:12 -0500)] 
Fix autoconf's check for create_timer()

GHC build system have custom autoconf check for `create_timer()`
function from librt. Check description says that it checks for
`CLOCK_REALTIME` timer, but checking code also checks for
`CLOCK_PROCESS_CPUTIME_ID` timer, which is not commonly present (for
example, FreeBSD doesn't have it). This makes whole check fail despite
the fact that FreeBSD have `create_timer()` call and supports
`CLOCK_REALTIME`. As a consequence, GHC RTS falls back to using SIGALRM
for its timing machinery. Not only it's very ancient codepath, it also
break some FFI bindings to C code that isn't prepared for syscall
interruption caused by SIGALRM delivery.

Grepping through ghc source code reveals that `USE_TIMER_CREATE`
defininition in the config.h doesn't imply having
`CLOCK_PROCESS_CPUTIME_ID`. The only place where
`CLOCK_PROCESS_CPUTIME_ID` is used is rts/posix/GetTime.c and this code
handles the absence of `CLOCK_PROCESS_CPUTIME_ID` gracefully.

This patch makes autoconf checking code to check only for
`timer_create(CLOCK_REALTIME, ...)` and fixes check description.

Reviewed By: austin

Differential Revision:

4 years agoconfigure : LLVM and LD detections improvements (#10234).
Erik de Castro Lopo [Wed, 8 Apr 2015 05:11:38 +0000 (15:11 +1000)] 
configure : LLVM and LD detections improvements (#10234).

* distrib/ : Detect correct version of LLVM tools as
  was done for the top level in 42448e3757.
* aclocal.m4 : Add a FIND_LD macro that can be used in both
  configure scripts.
* Use new FIND_LD macro in both configure scripts.

Signed-off-by: Erik de Castro Lopo <>
Test Plan: validate on amd64-linux and armhf-linux.

Reviewers: rwbarton, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10234

4 years agoTypos in error messages and in comments
Gabor Greif [Fri, 10 Apr 2015 08:00:50 +0000 (10:00 +0200)] 
Typos in error messages and in comments

4 years agoMake the evidence in a CtGiven into an EvId
Simon Peyton Jones [Thu, 9 Apr 2015 16:36:41 +0000 (17:36 +0100)] 
Make the evidence in a CtGiven into an EvId

Note [Bind new Givens immediately] in TcRnTypes

We were never using the generality.  Result: less code, more efficient.
Cake for everyone.

4 years agoComments only
Simon Peyton Jones [Thu, 9 Apr 2015 14:03:05 +0000 (15:03 +0100)] 
Comments only

4 years agoComments in rejigConRes
Simon Peyton Jones [Thu, 9 Apr 2015 14:02:34 +0000 (15:02 +0100)] 
Comments in rejigConRes

4 years agoComments about AnyK
Simon Peyton Jones [Thu, 9 Apr 2015 14:02:08 +0000 (15:02 +0100)] 
Comments about AnyK

4 years agoImport rand using capi
Reid Barton [Thu, 9 Apr 2015 15:31:20 +0000 (11:31 -0400)] 
Import rand using capi

Summary: Android has no rand symbol (it's a static inline function there).

Test Plan: ghc-android builds

Reviewers: trofi, austin, hvr

Reviewed By: hvr

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10274

4 years agoFixes a compiler error with -DDEBUG (#10265)
Dave Laing [Wed, 8 Apr 2015 18:38:59 +0000 (14:38 -0400)] 
Fixes a compiler error with -DDEBUG (#10265)

Test Plan: validate

Reviewers: austin, ezyang, erikd, rwbarton

Reviewed By: ezyang, erikd, rwbarton

Subscribers: erikd, thomie

Differential Revision:

GHC Trac Issues: #10265

4 years agoTest Trac #8030
Simon Peyton Jones [Wed, 8 Apr 2015 08:43:20 +0000 (09:43 +0100)] 
Test Trac #8030

4 years agoIgnore temporary ./configure files.
Edward Z. Yang [Tue, 7 Apr 2015 20:44:51 +0000 (13:44 -0700)] 
Ignore temporary ./configure files.

Signed-off-by: Edward Z. Yang <>
4 years agoAxe one-shot sig-of
Edward Z. Yang [Tue, 2 Dec 2014 09:08:59 +0000 (01:08 -0800)] 
Axe one-shot sig-of

We're getting rid of -sig-of foo:A usage, because
it doesn't make sense in any compilation mode besides one-shot,
and we don't expect users to use it anyway.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: thomie

Differential Revision:

4 years agoCommit missing T10148 files and ignore the built executable.
Edward Z. Yang [Tue, 7 Apr 2015 18:59:09 +0000 (11:59 -0700)] 
Commit missing T10148 files and ignore the built executable.

Signed-off-by: Edward Z. Yang <>
4 years agoSupport for multiple signature files in scope.
Edward Z. Yang [Wed, 8 Oct 2014 03:54:54 +0000 (20:54 -0700)] 
Support for multiple signature files in scope.

A common pattern when programming with signatures is to combine multiple
signatures together (signature linking).  We achieve this by making it
not-an-error to have multiple, distinct interface files for the same module
name, as long as they have the same backing implementation.  When a user
imports a module name, they get ALL matching signatures dumped into their

On the way, I refactored the module finder code, which now distinguishes
between exact finds (when you had a 'Module') and regular finds (when
you had a 'ModuleName').  I also refactored the package finder code to
use a Monoid instance on LookupResult to collect together various results.

ToDo: At the moment, if a signature is declared in the local package,
it completely overrides any remote signatures.  Eventually, we'll want
to also pull in the remote signatures (or even override the local signature,
if the full implementation is available.)  There are bunch of ToDos in the
code for what to do once this is done.

ToDo: At the moment, whenever a module name lookup occurs in GHCi and we
would have seen a signature, we instead continue and return the Module
for the backing implementation.  This is correct for most cases, but there
might be some situations where we want something a little more fine-grained
(e.g. :browse should only list identifiers which are available through
the in-scope signatures, and not ALL of them.)

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, hvr, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9252