4 years agohaddock: Fix submodule commit to point to ghc-head
Austin Seipp [Fri, 11 Dec 2015 23:34:26 +0000 (17:34 -0600)] 
haddock: Fix submodule commit to point to ghc-head

6746549772c5 accidentally pointed it to a branch (wip/rae-nokinds), before
rebasing it onto ghc-head.

Signed-off-by: Austin Seipp <>
4 years agoRevert changes from 6746549772c5
Austin Seipp [Fri, 11 Dec 2015 23:31:23 +0000 (17:31 -0600)] 
Revert changes from 6746549772c5

Signed-off-by: Austin Seipp <>
4 years agoAdd kind equalities to GHC.
Richard Eisenberg [Fri, 11 Dec 2015 23:19:53 +0000 (18:19 -0500)] 
Add kind equalities to GHC.

This implements the ideas originally put forward in
"System FC with Explicit Kind Equality" (ICFP'13).

There are several noteworthy changes with this patch:
 * We now have casts in types. These change the kind
   of a type. See new constructor `CastTy`.

 * All types and all constructors can be promoted.
   This includes GADT constructors. GADT pattern matches
   take place in type family equations. In Core,
   types can now be applied to coercions via the
   `CoercionTy` constructor.

 * Coercions can now be heterogeneous, relating types
   of different kinds. A coercion proving `t1 :: k1 ~ t2 :: k2`
   proves both that `t1` and `t2` are the same and also that
   `k1` and `k2` are the same.

 * The `Coercion` type has been significantly enhanced.
   The documentation in `docs/core-spec/core-spec.pdf` reflects
   the new reality.

 * The type of `*` is now `*`. No more `BOX`.

 * Users can write explicit kind variables in their code,
   anywhere they can write type variables. For backward compatibility,
   automatic inference of kind-variable binding is still permitted.

 * The new extension `TypeInType` turns on the new user-facing

 * Type families and synonyms are now promoted to kinds. This causes
   trouble with parsing `*`, leading to the somewhat awkward new
   `HsAppsTy` constructor for `HsType`. This is dispatched with in
   the renamer, where the kind `*` can be told apart from a
   type-level multiplication operator. Without `-XTypeInType` the
   old behavior persists. With `-XTypeInType`, you need to import
   `Data.Kind` to get `*`, also known as `Type`.

 * The kind-checking algorithms in TcHsType have been significantly
   rewritten to allow for enhanced kinds.

 * The new features are still quite experimental and may be in flux.

 * TODO: Several open tickets: #11195, #11196, #11197, #11198, #11203.

 * TODO: Update user manual.

Tickets addressed: #9017, #9173, #7961, #10524, #8566, #11142.
Updates Haddock submodule.

4 years agoFix infix record field fixity (#11167 and #11173).
Adam Gundry [Fri, 11 Dec 2015 21:43:26 +0000 (22:43 +0100)] 
Fix infix record field fixity (#11167 and #11173).

This extends D1585 with proper support for infix duplicate record
fields.  In particular, it is now possible to declare record fields as
infix in a module for which `DuplicateRecordFields` is enabled, fixity
is looked up correctly and a readable (although unpleasant) error
message is generated if multiple fields with different fixities are in

As a bonus, `DEPRECATED` and `WARNING` pragmas now work for
duplicate record fields. The pragma applies to all fields with the
given label.

In addition, a couple of minor `DuplicateRecordFields` bugs, which were
pinpointed by the `T11167_ambig` test case, are fixed by this patch:

  - Ambiguous infix fields can now be disambiguated by putting a type
    signature on the first argument

  - Polymorphic type constructor signatures (such as `ContT () IO a` in
    `T11167_ambig`) now work for disambiguation

Parts of this patch are from D1585 authored by @KaneTW.

Test Plan: New tests added.

Reviewers: KaneTW, bgamari, austin

Reviewed By: bgamari

Subscribers: thomie, hvr

Differential Revision:

GHC Trac Issues: #11167, #11173

4 years agotestsuite: Only run recomp015 on ELF-based platforms
Ben Gamari [Fri, 11 Dec 2015 21:41:23 +0000 (22:41 +0100)] 
testsuite: Only run recomp015 on ELF-based platforms

It fails on OS X with hundreds of messages of the form,
ManySections.s:196576:10: error:
     error: mach-o section specifier uses an unknown section type
.section s65525,"",@progbits

ManySections.s:196579:10: error:
     error: mach-o section specifier uses an unknown section type
.section s65526,"",@progbits

It fails on Windows with messages of the form,
ManySections.s:196579:10: error:
     Error: junk at the end of line, first unrecognized character is ','

Test Plan: Validate

Reviewers: hsyl20, thomie, austin

Reviewed By: thomie, austin

Differential Revision:

GHC Trac Issues: #11022

4 years agoImproved data family export documentation
David Kraeutmann [Fri, 11 Dec 2015 21:36:55 +0000 (22:36 +0100)] 
Improved data family export documentation

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11164

4 years agoRemoved colon append operation (fixes #10785)
Ben Gamari [Fri, 11 Dec 2015 21:36:15 +0000 (22:36 +0100)] 
Removed colon append operation (fixes #10785)

Reviewers: jgertm, austin, thomie

Reviewed By: thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10785

4 years agoT4801: Update expected allocations on Darwin
Ben Gamari [Fri, 11 Dec 2015 21:19:44 +0000 (22:19 +0100)] 
T4801: Update expected allocations on Darwin

4 years agoMark retc001 as broken on Darwin
Ben Gamari [Fri, 11 Dec 2015 21:09:43 +0000 (23:09 +0200)] 
Mark retc001 as broken on Darwin

Due to #11204. A relatively easy fix would be to add a one second delay as
described in the ticket, but this seems terrible.

4 years agoT7478: Don't expect broken on Darwin
Ben Gamari [Fri, 11 Dec 2015 20:48:02 +0000 (21:48 +0100)] 
T7478: Don't expect broken on Darwin

This appears to be fixed as noted by goldfire on #7478 and my own

4 years agoMake sure PatSyns only get added once to tcg_patsyns
Matthew Pickering [Fri, 11 Dec 2015 18:10:45 +0000 (18:10 +0000)] 
Make sure PatSyns only get added once to tcg_patsyns

Summary: Before, `PatSyn`s were getting added twice to `tcg_patsyns` so
when inspecting afterwards there were duplicates in the list.
This makes sure that only they only get added once.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agoTest Trac #11187
Simon Peyton Jones [Thu, 10 Dec 2015 10:55:10 +0000 (10:55 +0000)] 
Test Trac #11187

4 years agoTest Trac #11192
Simon Peyton Jones [Thu, 10 Dec 2015 10:15:16 +0000 (10:15 +0000)] 
Test Trac #11192

4 years agoMore typos in comments/docs
Gabor Greif [Wed, 9 Dec 2015 15:15:07 +0000 (16:15 +0100)] 
More typos in comments/docs

4 years agoImprove documentation for DeriveAnyClass
Simon Peyton Jones [Wed, 9 Dec 2015 13:42:58 +0000 (13:42 +0000)] 
Improve documentation for DeriveAnyClass

c.f. Trac #9968

4 years agoComments only
Simon Peyton Jones [Wed, 9 Dec 2015 09:08:47 +0000 (09:08 +0000)] 
Comments only

4 years agoFix DeriveAnyClass (Trac #9968)
Simon Peyton Jones [Wed, 9 Dec 2015 09:07:46 +0000 (09:07 +0000)] 
Fix DeriveAnyClass (Trac #9968)

The main issue concerned things like

   data T a = MkT a deriving( C Int )

which is supposed to generate

   instance C Int (T a) where {}

But the 'Int' argument (called cls_tys in the code) wasn't
even being passed to inferConstraints and mk_data_eqn, so it
really had no chance.   DeriveAnyClass came along after this
code was written!

Anyway I did quite a bit of tidying up in inferConstraints.

Also I discovered that this case was not covered at all

   data T a b = MkT a b deriving( Bifunctor )

What constraints should we generate for the instance context?
We can deal with classes whose last arg has kind *, like Eq, Ord;
or (* -> *), like Functor, Traversable.  But we really don't have
a story for classes whose last arg has kind (* -> * -> *).

So I augmented checkSideConditions to check for that and give
a sensible error message.

ToDo: update the user manual.

4 years agoAdd missing whitespace in toArgs' error msg
Herbert Valerio Riedel [Tue, 8 Dec 2015 22:01:35 +0000 (23:01 +0100)] 
Add missing whitespace in toArgs' error msg

Differential Revision:

4 years agoRefactor GHCi Command type; allow "hidden" commands
Herbert Valerio Riedel [Tue, 8 Dec 2015 21:59:41 +0000 (22:59 +0100)] 
Refactor GHCi Command type; allow "hidden" commands

This transforms the 'Command' tuple into a record which is
easier to extend.

While at it, this refactoring turns the IDE `:complete` into a hidden
command excluded from completion.

The next obvious step is to add a summary text field for constructing
the `:help` output (as well as allowing to get `:help <CMD>` for single

This is a preparatory refactoring for D1240 / #10874

Reviewed By: thomie, bgamari

Differential Revision:

4 years agoAn assortment of typos
Gabor Greif [Tue, 8 Dec 2015 15:43:34 +0000 (16:43 +0100)] 
An assortment of typos

4 years agoComments about polymorphic recursion
Simon Peyton Jones [Tue, 8 Dec 2015 13:11:42 +0000 (13:11 +0000)] 
Comments about polymorphic recursion

See Trac #11176

4 years agoComments only
Simon Peyton Jones [Mon, 7 Dec 2015 12:48:44 +0000 (12:48 +0000)] 
Comments only

4 years agousers_guide: Show sub-sub-sections in ToC
Ben Gamari [Tue, 8 Dec 2015 14:59:43 +0000 (15:59 +0100)] 
users_guide: Show sub-sub-sections in ToC

4 years agodocs/glasgow_exts: Use warning admonition
Ben Gamari [Tue, 8 Dec 2015 12:14:14 +0000 (13:14 +0100)] 
docs/glasgow_exts: Use warning admonition

4 years agoFix typo sneaked in with fd3b845c01aa26b6e5
Herbert Valerio Riedel [Tue, 8 Dec 2015 13:54:14 +0000 (14:54 +0100)] 
Fix typo sneaked in with fd3b845c01aa26b6e5

4 years agoFix double MaybeT instance
Herbert Valerio Riedel [Tue, 8 Dec 2015 10:45:38 +0000 (11:45 +0100)] 
Fix double MaybeT instance

This is a fixup to fd3b845c01aa26b6e5cd12c00af59e5468e21b1b
which didn't take into account 09333313f32be975faf9158fcd3648489d78ad82
having pushed as well.

4 years agoRename s/7.12.1/8.0.1/ two minor occurences
Herbert Valerio Riedel [Tue, 8 Dec 2015 10:32:48 +0000 (11:32 +0100)] 
Rename s/7.12.1/8.0.1/ two minor occurences

[skip ci]

4 years agoUpdate libffi-tarballs submodule to libffi 3.1 (re #10238)
Herbert Valerio Riedel [Tue, 8 Dec 2015 09:46:04 +0000 (10:46 +0100)] 
Update libffi-tarballs submodule to libffi 3.1 (re #10238)

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10238

4 years agoMake HasDynFlags more transformers friendly
Herbert Valerio Riedel [Tue, 8 Dec 2015 10:11:11 +0000 (11:11 +0100)] 
Make HasDynFlags more transformers friendly

Ideally, we'd have the more general

    instance (MonadTrans t, Monad m, HasDynFlags m) => HasDynFlags (t m) where
        getDynFlags = lift getDynFlags

definition. However, that one would overlap with the `HasDynFlags (GhcT m)`
instance. Instead we define instances for a couple of common Monad
transformers explicitly in order to avoid nasty overlapping instances.

This is a preparatory refactoring for #10874

Reviewed By: austin

Differential Revision:

4 years agoAssociate ErrorCall pattern with ErrorCall type
Herbert Valerio Riedel [Tue, 8 Dec 2015 10:09:48 +0000 (11:09 +0100)] 
Associate ErrorCall pattern with ErrorCall type

This way,

    import Control.Exception (ErrorCall(ErrorCall))


    import Control.Exception (ErrorCall(..))

work as expected, and import the `ErrorCall` compatibility pattern as well.

When #5273 was implemented, it wasn't possible yet to associated
patterns with their types (see #10653).

Reviewed By: austin

Differential Revision:

4 years agoIntroduce HasGhciState class and refactor use-sites
Herbert Valerio Riedel [Tue, 8 Dec 2015 07:48:21 +0000 (08:48 +0100)] 
Introduce HasGhciState class and refactor use-sites

This allows to reach the GhciState without having to keep
track how many Monad transformer layers sit on top of the
GHCi monad.

While at it, this also refactors code to make more use of the
existing `modifyGHCiState` operation.

This is a preparatory refactoring for #10874

Differential Revision:

4 years agoGet rid of tcView altogether
Ömer Sinan Ağacan [Mon, 7 Dec 2015 16:41:51 +0000 (11:41 -0500)] 
Get rid of tcView altogether

This is just a trivial renaming that implements a ToDo mentioned in a comment
in Type.hs.

Adding Simon as reviewer since he added the ToDo comment.

Reviewers: simonpj, austin, goldfire, bgamari

Subscribers: thomie

Differential Revision:

4 years agoRemove redundant CPP conditionals
Herbert Valerio Riedel [Mon, 7 Dec 2015 21:50:44 +0000 (22:50 +0100)] 
Remove redundant CPP conditionals

It makes little sense to have __GLASGOW_HASKELL__ conditional
code inside GHCi's source-code, as GHCi is only ever build
by the current stage1 GHC, whose version is assumed to be the
same as the GHCi version being built.

4 years agoRe-use `transformers`'s `MaybeT` rather than our own
Herbert Valerio Riedel [Mon, 7 Dec 2015 16:32:23 +0000 (17:32 +0100)] 
Re-use `transformers`'s `MaybeT` rather than our own

The now removed `MaybeT` type was originally added back in 2008
via bc845b714132a897032502536fea8cd018ce325b

Reviewed By: bgamari

Differential Revision:

4 years agorts: One more Clang-unfriendly CPP usage
Ben Gamari [Mon, 7 Dec 2015 13:08:28 +0000 (14:08 +0100)] 
rts: One more Clang-unfriendly CPP usage

4 years agoghc-pkg: don't sort packages unnecessarily
Thomas Miedema [Mon, 7 Dec 2015 12:22:03 +0000 (13:22 +0100)] 
ghc-pkg: don't sort packages unnecessarily

The packages in the package database are already sorted alphabetically
by this point (see db_stack_sorted).

This is a better fix for #8245, commit 021b1f8.

Test Plan: look at output of './inplace/bin/ghc-pkg list

Reviewers: austin, bgamari, psibi

Reviewed By: psibi

Differential Revision:

GHC Trac Issues: #8245

4 years agoMove checking for missing signatures to RnNames.reportUnusedNames
Eric Seidel [Mon, 7 Dec 2015 11:42:38 +0000 (12:42 +0100)] 
Move checking for missing signatures to RnNames.reportUnusedNames

Checking for missing signatures before renaming the export list is
prone to errors, so we now perform the check in `reportUnusedNames` at
which point everything has been renamed.

Test Plan: validate, new test case is T10908

Reviewers: goldfire, simonpj, austin, bgamari

Subscribers: thomie

Projects: #ghc

Differential Revision:

GHC Trac Issues: #10908

4 years agoRefactor ConDecl
Alan Zimmerman [Mon, 7 Dec 2015 11:40:38 +0000 (12:40 +0100)] 
Refactor ConDecl

The ConDecl type in HsDecls is an uneasy compromise. For the most part,
HsSyn directly reflects the syntax written by the programmer; and that
gives just the right "pegs" on which to hang Alan's API annotations. But
ConDecl doesn't properly reflect the syntax of Haskell-98 and GADT-style
data type declarations.

To be concrete, here's a draft new data type

data ConDecl name
  | ConDeclGADT
      { con_names   :: [Located name]
      , con_type    :: LHsSigType name  -- The type after the ‘::’
      , con_doc     :: Maybe LHsDocString }

  | ConDeclH98
      { con_name    :: Located name

      , con_qvars     :: Maybe (LHsQTyVars name)
        -- User-written forall (if any), and its implicit
        -- kind variables
        -- Non-Nothing needs -XExistentialQuantification

      , con_cxt       :: Maybe (LHsContext name)
        -- ^ User-written context (if any)

      , con_details   :: HsConDeclDetails name
          -- ^ Arguments

      , con_doc       :: Maybe LHsDocString
          -- ^ A possible Haddock comment.
      } deriving (Typeable)

Note that

    For GADTs, just keep a type. That's what the user writes.
    NB:HsType can represent records on the LHS of an arrow:

      { x:Int,y:Bool} -> T

    con_qvars and con_cxt are both Maybe because they are both
    optional (the forall and the context of an existential data type

    For ConDeclGADT the type variables of the data type do not scope
    over the con_type; whereas for ConDeclH98 they do scope over con_cxt
    and con_details.

Updates haddock submodule.

Test Plan: ./validate

Reviewers: simonpj, erikd, hvr, goldfire, austin, bgamari

Subscribers: erikd, goldfire, thomie, mpickering

Differential Revision:

GHC Trac Issues: #11028

4 years agoUse TypeLits in the meta-data encoding of GHC.Generics
RyanGlScott [Mon, 7 Dec 2015 11:37:50 +0000 (12:37 +0100)] 
Use TypeLits in the meta-data encoding of GHC.Generics

Test Plan: Validate.

Reviewers: simonpj, goldfire, hvr, dreixel, kosmikus, austin, bgamari

Reviewed By: kosmikus, austin, bgamari

Subscribers: RyanGlScott, Fuuzetsu, bgamari, thomie, carter, dreixel

Differential Revision:

GHC Trac Issues: #9766

4 years agorts: Remove space before argument list in ASSERTs
Ben Gamari [Mon, 7 Dec 2015 10:33:06 +0000 (11:33 +0100)] 
rts: Remove space before argument list in ASSERTs

Test Plan: Validate

Reviewers: austin, erikd

Subscribers: thomie

Differential Revision:

4 years agoAdd isImport, isDecl, and isStmt functions to GHC API
Roman Shatsov [Mon, 7 Dec 2015 10:24:36 +0000 (11:24 +0100)] 
Add isImport, isDecl, and isStmt functions to GHC API

Reviewers: austin, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: mpickering, thomie

Differential Revision:

GHC Trac Issues: #9015

4 years agoMinor stylistic fixes in glasgow_exts.rst
Ben Gamari [Mon, 7 Dec 2015 10:23:50 +0000 (11:23 +0100)] 
Minor stylistic fixes in glasgow_exts.rst

4 years agoRe-export data family when exporting a data instance without an export list
David Kraeutmann [Mon, 7 Dec 2015 10:19:28 +0000 (11:19 +0100)] 
Re-export data family when exporting a data instance without an export list

Whenever a data instance is exported, the corresponding data family
is exported, too. This allows one to write

     -- Foo.hs
     module Foo where

     data family T a

     -- Bar.hs
     module Bar where

     import Foo

     data instance T Int = MkT

     -- Baz.hs
     module Baz where

     import Bar (T(MkT))

In previous versions of GHC, this required a workaround
explicit export list in `Bar`.

Reviewers: bgamari, goldfire, austin

Reviewed By: bgamari, goldfire

Subscribers: goldfire, thomie

Differential Revision:

GHC Trac Issues: #11164

4 years agoghc-pkg: Restore old behavior in colored version; fixes 6119
Sibi Prabakaran [Mon, 7 Dec 2015 10:16:15 +0000 (11:16 +0100)] 
ghc-pkg: Restore old behavior in colored version; fixes 6119

The behavior is changed to this:
ghc-pkg list blahblah
    (no packages)
instead of:
ghc-pkg list blahblah

Reviewers: austin, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #6119

4 years agoIgnore generated linter.log
RyanGlScott [Mon, 7 Dec 2015 10:14:41 +0000 (11:14 +0100)] 
Ignore generated linter.log

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agoDocumentation: escape characters in template-haskell Haddocks
RyanGlScott [Mon, 7 Dec 2015 10:06:23 +0000 (11:06 +0100)] 
Documentation: escape characters in template-haskell Haddocks

Reviewers: hvr, austin, goldfire, bgamari

Reviewed By: goldfire, bgamari

Subscribers: thomie

Differential Revision:

4 years agolinters/check-cpp: Don't produce debug log
Ben Gamari [Mon, 7 Dec 2015 09:53:44 +0000 (10:53 +0100)] 
linters/check-cpp: Don't produce debug log

4 years agoUpdate hoopl submodule
Jan Stolarek [Mon, 7 Dec 2015 07:08:30 +0000 (08:08 +0100)] 
Update hoopl submodule

Hoopl changes required to implement #10982

4 years agoTweak use of AC_USE_SYSTEM_EXTENSIONS
Herbert Valerio Riedel [Sun, 6 Dec 2015 12:34:34 +0000 (13:34 +0100)] 

This makes sure that `AC_USE_SYSTEM_EXTENSIONS` (which
implies `AC_PROG_CC`) is called after the
`AC_ARG_WITH([cc],,)` invocation, so that the proper
CC setting is in scope. Otherwise this can break cross-compilation.

This also needs to pull in a submodule update for `unix`

This is a follow-up commit to
which hopefully fixes #11168

4 years agoImplement new `-fwarn-noncanonical-monoid-instances`
Herbert Valerio Riedel [Sun, 6 Dec 2015 15:08:21 +0000 (16:08 +0100)] 
Implement new `-fwarn-noncanonical-monoid-instances`

This is similiar to the `-fwarn-noncanonical-monad-instances` warning
implemented via #11128, but applies to `Semigroup`/`Monoid` instead
and the `(<>)`/`mappend` methods (of which `mappend` is planned to move
out of `Monoid` at some point in the future being redundant and thus

This warning is contained in `-Wcompat` but not in `-Wall`.

This addresses #11150

Reviewed By: quchen

Differential Revision:

4 years agoMake compatible with pedantic /bin/sh impls
Herbert Valerio Riedel [Sun, 6 Dec 2015 10:52:35 +0000 (11:52 +0100)] 
Make compatible with pedantic /bin/sh impls

This fixes `for`-loops introduced via
which can result in `for i in ;` which some
`/bin/sh` implementations don't like.

4 years agoAllow to compile OSMem.c when MEM_NORESERVE is not available
Herbert Valerio Riedel [Sat, 5 Dec 2015 18:15:19 +0000 (19:15 +0100)] 
Allow to compile OSMem.c when MEM_NORESERVE is not available

On some OSes such as AIX `MEM_NORESERVE` is not available.

Since this feature is only needed when the new two-step allocator (see #9706)
is enabled we can simply turn this into a runtime error to avoid a larger
refactoring of this already quite platform-sensitive code.

Reviewed By: bgamari, ezyang

Differential Revision:

4 years fix docs re-rebuilding
Sergei Trofimovich [Sat, 5 Dec 2015 10:05:54 +0000 (10:05 +0000)] fix docs re-rebuilding

The problem:
    $ make
    <watch sphinx rebuilds docs>
    # no changes in sources
    $ make
    <watch sphinx rebuilds docs again>

The problem was due to wrong assumption about what
files exactly are generated by mkUserGuidePart.

Build system expected the following files to be created:
but mkUserGuidePart generated:

Signed-off-by: Sergei Trofimovich <>
4 years don't run mkUserGuidePart more than once
Sergei Trofimovich [Sat, 5 Dec 2015 00:03:05 +0000 (00:03 +0000)] don't run mkUserGuidePart more than once

When building 'html' and 'man' manuals
build system reports mkUserGuide is ran
more than once (up to 3 times in parallel).

See Note [Blessed make target file] for
more details.

Signed-off-by: Sergei Trofimovich <>
4 years cleanup: use tab consistently
Sergei Trofimovich [Fri, 4 Dec 2015 22:28:35 +0000 (22:28 +0000)] cleanup: use tab consistently

Signed-off-by: Sergei Trofimovich <>
4 years agoEnable non-canonical Monad instance warnings for stage1/2
Herbert Valerio Riedel [Sat, 5 Dec 2015 08:59:01 +0000 (09:59 +0100)] 
Enable non-canonical Monad instance warnings for stage1/2

This makes use of the new facility introduced via
14d0f7f1221db758cd06a69f53803d9d0150164a which allows
to have certain flags passed only to the non-bootstrapping
GHC. This is needed because sometimes we can't assume the
existence of a certain flag in the bootstrapping compiler
which was only added recently to GHC HEAD.

This also updates the haddock submodule to fix a few
remaining noncanonical instance definitions.

Differential Revision:

4 years agoTemporarily disable external-json linters
Herbert Valerio Riedel [Sat, 5 Dec 2015 08:55:50 +0000 (09:55 +0100)] 
Temporarily disable external-json linters

This temporarily disables the external json linters
introduced via
020375d1e723339a95b86d0d3b8a8214b1cc144a and

The new linters break the differential validation in Harbormaster
because the submodules are not cloned early enough (i.e. before `arc` is
called by the script).

4 years agoUse git.h.o copy of arcanist-external-json-linter
Herbert Valerio Riedel [Sat, 5 Dec 2015 08:15:57 +0000 (09:15 +0100)] 
Use git.h.o copy of arcanist-external-json-linter

It shouldn't have been possible to reference an external
Git submodule not hosted on as we can't otherwise
ensure gitlink integrity. But it turns out the
validation hook scripts in place didn't reject
020375d1e723339a95b86d0d3b8a8214b1cc144a, so here we are...

This commit changes ghc.git to use our own fork/copy of
hosted on

4 years agoFix broken linters when using python3
David Kraeutmann [Sat, 5 Dec 2015 06:13:08 +0000 (00:13 -0600)] 
Fix broken linters when using python3

Reviewed By: austin

Differential Revision:

4 years agopmcheck: Comments about undecidability of literal equality
George Karachalias [Sat, 5 Dec 2015 00:52:58 +0000 (01:52 +0100)] 
pmcheck: Comments about undecidability of literal equality

4 years agopmcheck: Comments about term equality representation
George Karachalias [Sat, 5 Dec 2015 00:13:33 +0000 (01:13 +0100)] 
pmcheck: Comments about term equality representation

4 years agolibdw: enable support only on i386 and amd64
Sergei Trofimovich [Fri, 4 Dec 2015 22:07:13 +0000 (22:07 +0000)] 
libdw: enable support only on i386 and amd64

Currently libdw requires per-arch implementation of
set_initial_registers() function.

Otherwise build fails with linkage error
(seen on sparc):

      undefined reference to `set_initial_registers'
  collect2: error: ld returned 1 exit status
  `gcc' failed in phase `Linker'. (Exit code: 1)
  make[1]: *** [ghc/stage2/build/tmp/ghc-stage2] Error 1

Converted link-time error to compile-time error,
added arch whitelist.

Signed-off-by: Sergei Trofimovich <>
Reviewers: austin, thomie, bgamari

Reviewed By: bgamari

Differential Revision:

4 years agoStgCmmMonad: Implement Outputable instance for Sequel for debugging
Ömer Sinan Ağacan [Fri, 4 Dec 2015 20:36:47 +0000 (15:36 -0500)] 
StgCmmMonad: Implement Outputable instance for Sequel for debugging

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agolint: Add linter to catch uses of ASSERT macro that Clang dislikes
Ben Gamari [Fri, 4 Dec 2015 12:25:26 +0000 (13:25 +0100)] 
lint: Add linter to catch uses of ASSERT macro that Clang dislikes

In particular Clang rejects uses of CPP macros where the argument list
is separated by a space from the macro name. Warn when we see ASSERT
used in this way.

4 years agoAdd linter to check for binaries accidentally added to repository
Ben Gamari [Fri, 4 Dec 2015 12:14:27 +0000 (13:14 +0100)] 
Add linter to check for binaries accidentally added to repository

This should catch mistakes like

Adds an arcanist-external-json-linter submodule, which should eventually
be mirrored on resources.

Test Plan: Validate

Reviewers: thomie, hvr, austin

Reviewed By: austin

Differential Revision:

4 years agoUpdate peak_megabytes_allocated for T9675
Ben Gamari [Fri, 4 Dec 2015 14:55:58 +0000 (09:55 -0500)] 
Update peak_megabytes_allocated for T9675

Interestingly enough this decreased with the new pattern checker. I'm
not entirely sure why at the moment as the test is merely a large
record with a bunch of selectors. I wouldn't have thought this would tax
the pattern checker particularly much but oh well.

4 years agotestsuite: Rename pmcheck/T7669 to pmcheck/T7669a
Ben Gamari [Fri, 4 Dec 2015 14:31:53 +0000 (09:31 -0500)] 
testsuite: Rename pmcheck/T7669 to pmcheck/T7669a

This was a duplicate.

4 years agoT5642: Fix skip usage
Ben Gamari [Fri, 4 Dec 2015 14:29:59 +0000 (09:29 -0500)] 
T5642: Fix skip usage

4 years agoComments only
Simon Peyton Jones [Fri, 4 Dec 2015 12:24:49 +0000 (12:24 +0000)] 
Comments only

4 years agoTidy user type errors in checkValidType
Simon Peyton Jones [Fri, 4 Dec 2015 12:23:33 +0000 (12:23 +0000)] 
Tidy user type errors in checkValidType

Trac #11144 showed that we need to tidy the type in the error message
generated in TcValidity.checkUserTypeError.

This is still unsatisfactory.  checkValidType was originally supposed
to be called only on types gotten directly from user-written HsTypes.
So its error messages do no tidying.  But TcBinds calls it checkValidType
on an /inferred/ type, which may need tidying.

Still this at least fixes the bad error message in CustomTypeErrors02,
which was the original ticket.

Some other small refactorings:

* Remove unused Kind result of getUserTypeErrorMsg
* Rename isUserErrorTy  -->   userTypeError_maybe

4 years agoMinor refactoring of user type errors
Simon Peyton Jones [Fri, 4 Dec 2015 12:11:43 +0000 (12:11 +0000)] 
Minor refactoring of user type errors

* Remove unused Kind result of getUserTypeErrorMsg
* Rename isUserErrorTy  -->   userTypeError_maybe

4 years agoFix egregious error in eta-reduction of data families
Simon Peyton Jones [Fri, 4 Dec 2015 12:08:37 +0000 (12:08 +0000)] 
Fix egregious error in eta-reduction of data families

This terrible and long-standing bug was shown up by Trac #11148.
We are trying to eta-reduce a data family instance, so that we
can then derive Functor or Generic.  But we were assuming, for
absolutely not reason whatsoever, that the type variables were
lined up in a convenient order.  The fact that it ever worked
was a fluke.

This patch fixes it properly.  Main change is in eta_reduce
in TcInstDcls.tcDataFamInstDecl

4 years agoMake -dppr-debug show contents of (TypeError ...)
Simon Peyton Jones [Fri, 4 Dec 2015 11:59:08 +0000 (11:59 +0000)] 
Make -dppr-debug show contents of (TypeError ...)

Just for debugging

4 years agoWibbles only
Simon Peyton Jones [Fri, 4 Dec 2015 11:58:05 +0000 (11:58 +0000)] 
Wibbles only

4 years agoAdd derived constraints for wildcard signatures
Simon Peyton Jones [Thu, 3 Dec 2015 13:03:07 +0000 (13:03 +0000)] 
Add derived constraints for wildcard signatures

This fixes Trac #11016

See Note [Add deriveds for signature contexts] in TcSimplify]

4 years agoCase-of-empty-alts is trivial (Trac #11155)
Simon Peyton Jones [Thu, 3 Dec 2015 12:57:54 +0000 (12:57 +0000)] 
Case-of-empty-alts is trivial (Trac #11155)

As you'll see from Trac #11155, the code generator was confused
by a binding let x = y in ....   Why did that happen? Because of
a (case y of {}) expression on the RHS.

The right thing is just to expand what a "trivial" expression is.

See Note [Empty case is trivial] in CoreUtils.

4 years agoMake callToPats deterministic in SpecConstr
Bartosz Nitka [Wed, 2 Dec 2015 14:20:55 +0000 (06:20 -0800)] 
Make callToPats deterministic in SpecConstr

This fixes a non-determinism bug where where depending on the
order of uniques allocated, the specialized workers would have different
order of arguments.


  $s$wgo_s1CN :: Int# -> Int -> Int#
  [LclId, Arity=2, Str=DmdType <L,U><L,U>]
  $s$wgo_s1CN =
    \ (sc_s1CI :: Int#) (sc_s1CJ :: Int) ->
      case tagToEnum# @ Bool (<=# sc_s1CI 0#) of _ [Occ=Dead] {
        False ->
          $wgo_s1BU (Just @ Int (I# (-# sc_s1CI 1#))) (Just @ Int sc_s1CJ);
        True -> 0#


  $s$wgo_s18mTj :: Int -> Int# -> Int#
  [LclId, Arity=2, Str=DmdType <L,U><L,U>]
  $s$wgo_s18mTj =
    \ (sc_s18mTn :: Int) (sc_s18mTo :: Int#) ->
      case tagToEnum# @ Bool (<=# sc_s18mTo 0#) of _ [Occ=Dead] {
        False ->
            (Just @ Int (I# (-# sc_s18mTo 1#))) (Just @ Int sc_s18mTn);
        True -> 0#

Test Plan:
I've added a new testcase

Reviewers: simonmar, simonpj, austin, goldfire, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

4 years agoT5642: Skip it entirely
Ben Gamari [Fri, 4 Dec 2015 13:30:09 +0000 (14:30 +0100)] 
T5642: Skip it entirely

It uses so much memory that it would be unsafe to even allow it to run
as it may jeopardize the stability of the build-bots.

4 years agoT5642 is broken
Ben Gamari [Fri, 4 Dec 2015 12:56:33 +0000 (07:56 -0500)] 
T5642 is broken

This appears to be due to the new exhaustiveness checker. See #11163.

4 years agoBump allocations for T783
Ben Gamari [Fri, 4 Dec 2015 10:30:39 +0000 (05:30 -0500)] 
Bump allocations for T783

The new pattern match checker increased allocations by over 100%.
Tracking in #11162.

4 years agoCheck: More Clang/CPP wibbles
Ben Gamari [Fri, 4 Dec 2015 12:07:16 +0000 (13:07 +0100)] 
Check: More Clang/CPP wibbles

4 years agoUse builtin ISO 8859-1 decoder in mkTextEncoding
Herbert Valerio Riedel [Fri, 4 Dec 2015 11:15:23 +0000 (12:15 +0100)] 
Use builtin ISO 8859-1 decoder in mkTextEncoding

We already do this for UTF8/16/32, so it seems obvious do the same
for the closely related popular ISO 8859-1 encoding, and avoid iconv
issues on some platforms (such as AIX which which bundles a broken
`libiconv` by default)

This fixes #11096

4 years agoPmExpr: Fix CPP unacceptable too clang's CPP
Ben Gamari [Fri, 4 Dec 2015 10:05:06 +0000 (05:05 -0500)] 
PmExpr: Fix CPP unacceptable too clang's CPP

4 years agoOn AIX we need -D_BSD defined in <Stg.h>
Herbert Valerio Riedel [Fri, 4 Dec 2015 09:40:42 +0000 (10:40 +0100)] 
On AIX we need -D_BSD defined in <Stg.h>

As otherwise <math.h> includes <stdlib.h> which breaks compilation
of .hc files

4 years agoRTS: Rename InCall.stat struct field to .rstat
Herbert Valerio Riedel [Fri, 4 Dec 2015 09:10:55 +0000 (10:10 +0100)] 
RTS: Rename InCall.stat struct field to .rstat

On AIX, C system headers can redirect the token `stat` via

    #define stat stat64

to provide large-file support. Simply avoiding the use of `stat` as an
identifier eschews macro-replacement.

Differential Revision:

4 years agoUse Autoconf's AC_USE_SYSTEM_EXTENSIONS
Herbert Valerio Riedel [Fri, 4 Dec 2015 08:15:29 +0000 (09:15 +0100)] 

This takes care of setting feature test macros (i.e. let Autoconf decide when
those can be set safely) to allow subsequent Autoconf tests to better detect
available OS features.

This also includes a submodule update of unix which enables the use of
`AC_USE_SYSTEM_EXTENSIONS` in there as well.

Specifically, this takes care of setting `_GNU_SOURCE` (which allows to remove
two occurences where it's set manually) and `_ALL_SOURCE` (which fixes issues
on AIX).

See also

for details.

At some point we may want to reconsider the purpose of "rts/PosixSource.h" and
rely more on Autoconf instead.

4 years agoRemove unused import in deSugar/TmOracle.hs
George Karachalias [Fri, 4 Dec 2015 07:28:00 +0000 (08:28 +0100)] 
Remove unused import in deSugar/TmOracle.hs

4 years agoImprove performance for PM check on literals (Fixes #11160 and #11161)
George Karachalias [Fri, 4 Dec 2015 06:11:55 +0000 (07:11 +0100)] 
Improve performance for PM check on literals (Fixes #11160 and #11161)

Two changes:

1. Instead of generating constraints of the form (x ~ e) (as we do in
the paper), generate constraints of the form (e ~ e). The term oracle
(`tmOracle` in deSugar/TmOracle.hs) is not really efficient and in the
presence of many (x ~ e) constraints behaves quadratically. For
literals, constraints of the form (False ~ (x ~ lit)) are pretty common,
so if we start with { y ~ False, y ~ (x ~ lit) } we end up givng to the
solver (a) twice as many constraints as we need and (b) half of them
trigger the solver's weakness. This fixes #11160.

2. Treat two overloaded literals that look different as different. This
is not entirely correct but it is what both the previous and the current
check did. I had the ambitious plan to do the *right thing* (equality
between overloaded literals is undecidable in the general case) and just
use this assumption when issuing the warnings. It seems to generate much
more constraints than I expected (breaks #11161) so I just do it
immediately now instead of generating everything and filtering

Even if it is not (strictly speaking) correct, we have the following:
  * Gives the "expected" warnings (the ones Ocaml or the previous
    algorithm would give) and,
  * Most importantly, it is safe. Unless a catch-all clause exists, a
    match against literals is always non-exhaustive. So, effectively
    this affects only what is shown to the user (and, evidently,

4 years agoBump hoopl submodule
Ben Gamari [Thu, 3 Dec 2015 20:20:18 +0000 (15:20 -0500)] 
Bump hoopl submodule

To fix redundant patterns.

4 years agoUpdate test output
Ben Gamari [Thu, 3 Dec 2015 20:20:01 +0000 (15:20 -0500)] 
Update test output

4 years agoKill redundant patterns
Ben Gamari [Thu, 3 Dec 2015 18:43:39 +0000 (13:43 -0500)] 
Kill redundant patterns

George's new exhaustiveness checker now realizes these are impossible.

4 years agoFix haddock syntax
Ben Gamari [Thu, 3 Dec 2015 18:43:16 +0000 (13:43 -0500)] 
Fix haddock syntax

Sadly we can't annotate the elements of a tuple

4 years agoRevert "Create empty dump files when there was nothing to dump"
Ben Gamari [Thu, 3 Dec 2015 13:59:18 +0000 (14:59 +0100)] 
Revert "Create empty dump files when there was nothing to dump"

This reverts commit 8cba907ad404ba4005558b5a8966390159938172 which
broke `-ddump-to-file`.

4 years agoextending_ghc.rst: fix broken link (Trac #10950)
Sergei Trofimovich [Thu, 3 Dec 2015 21:07:19 +0000 (21:07 +0000)] 
extending_ghc.rst: fix broken link (Trac #10950)

The error exibits as build failures
of two types:

  1. extending_ghc.rst:: ERROR:
      Anonymous hyperlink mismatch:
        1 references but 0 targets.
      See "backrefs" attribute for IDs.

  2. reading sources... [ 33%] glasgow_exts
       Exception occurred:
          pickle.dump(doctree, f, pickle.HIGHEST_PROTOCOL)
       RecursionError: maximum recursion depth exceeded
       while pickling an object

Broken link created circular reference and failed to
serialize the result.

Fixed the problem by pointing to relevant section.

Signed-off-by: Sergei Trofimovich <>
4 years agotestsuite: haddock.compiler: Bump expected allocations
Ben Gamari [Thu, 3 Dec 2015 13:44:24 +0000 (14:44 +0100)] 
testsuite: haddock.compiler: Bump expected allocations

4 years agoMajor Overhaul of Pattern Match Checking (Fixes #595)
George Karachalias [Thu, 3 Dec 2015 11:57:19 +0000 (12:57 +0100)] 
Major Overhaul of Pattern Match Checking (Fixes #595)

This patch adresses several problems concerned with exhaustiveness and
redundancy checking of pattern matching. The list of improvements includes:

* Making the check type-aware (handles GADTs, Type Families, DataKinds, etc.).
  This fixes #4139, #3927, #8970 and other related tickets.

* Making the check laziness-aware. Cases that are overlapped but affect
  evaluation are issued now with "Patterns have inaccessible right hand side".
  Additionally, "Patterns are overlapped" is now replaced by "Patterns are

* Improved messages for literals. This addresses tickets #5724, #2204, etc.

* Improved reasoning concerning cases where simple and overloaded
  patterns are matched (See #322).

* Substantially improved reasoning for pattern guards. Addresses #3078.

* OverloadedLists extension does not break exhaustiveness checking anymore
  (addresses #9951). Note that in general this cannot be handled but if we know
  that an argument has type '[a]', we treat it as a list since, the instance of
  'IsList' gives the identity for both 'fromList' and 'toList'. If the type is
  not clear or is not the list type, then the check cannot do much still. I am
  a bit concerned about OverlappingInstances though, since one may override the
  '[a]' instance with e.g. an '[Int]' instance that is not the identity.

* Improved reasoning for nested pattern matching (partial solution). Now we
  propagate type and (some) term constraints deeper when checking, so we can
  detect more inconsistencies. For example, this is needed for #4139.

I am still not satisfied with several things but I would like to address at
least the following before the next release:
    Term constraints are too many and not printed for non-exhaustive matches
(with the exception of literals). This sometimes results in two identical (in
appearance) uncovered warnings. Unless we actually show their difference, I
would like to have a single warning.

4 years agousers_guide/glasgow_exts.rst: fix link markup
Sergei Trofimovich [Thu, 3 Dec 2015 09:31:44 +0000 (09:31 +0000)] 
users_guide/glasgow_exts.rst: fix link markup

sphinx-1.3.1 found errors as:
    WARNING: malformed hyperlink target.
    WARNING: Inline interpreted text or phrase
    reference start-string without end-string.

Signed-off-by: Sergei Trofimovich <>
4 years agoUpdate bytestring submodule
Herbert Valerio Riedel [Wed, 2 Dec 2015 14:20:10 +0000 (15:20 +0100)] 
Update bytestring submodule

Differential Revision:

4 years agoErrUtils: Spruce up Haddocks
Ben Gamari [Wed, 2 Dec 2015 19:59:25 +0000 (20:59 +0100)] 
ErrUtils: Spruce up Haddocks

This is a pretty commonly needed module; Haddocks are worth the effort.

4 years agoCreate empty dump files when there was nothing to dump
Vladimir Trubilov [Wed, 2 Dec 2015 19:47:23 +0000 (20:47 +0100)] 
Create empty dump files when there was nothing to dump

This patch creates empty dump file when GHC was run with
`-ddump-rule-firings` (or `-ddump-rule-rewrites`) and `-ddump-to-file`
specified, and there were no rules applied. If dump already exists it
will be overwritten by empty one.

Test Plan: ./validate

Reviewers: austin, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: thomie

Projects: #ghc

Differential Revision:

GHC Trac Issues: #10320