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

This is a follow-up to

3 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.

3 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:

3 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 <>
3 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 <>
3 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 <>
3 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:

3 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).

3 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

3 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:

3 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

3 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

3 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:

3 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:

3 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.

3 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:

3 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.

3 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.

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

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

3 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

3 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

3 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

3 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

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

3 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]

3 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.

3 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

3 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.

3 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.

3 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.

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

3 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

3 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

3 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

3 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:

3 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.

3 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

3 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,

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

To fix redundant patterns.

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

3 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.

3 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

3 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`.

3 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 <>
3 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

3 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.

3 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 <>
3 years agoUpdate bytestring submodule
Herbert Valerio Riedel [Wed, 2 Dec 2015 14:20:10 +0000 (15:20 +0100)] 
Update bytestring submodule

Differential Revision:

3 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.

3 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

3 years agoAvoid panic due to partial ieName
Eric Seidel [Wed, 2 Dec 2015 20:37:21 +0000 (14:37 -0600)] 
Avoid panic due to partial ieName

HsImpExp.ieName is partial and fails when given e.g. `module X`

solution: use ieNames instead which returns a list of names instead of a single name.

Reviewed By: bgamari, austin

Differential Revision:

GHC Trac Issues: #11077

3 years agoRemove *.xml from gitignore
David Luposchainsky [Wed, 2 Dec 2015 20:37:07 +0000 (14:37 -0600)] 
Remove *.xml from gitignore

With the move to RST-based documentation, there is no need to ignore XML files
in the source tree anymore.

Reviewed By: bgamari

Differential Revision:

3 years agoMove Stg-specific code from DynFlags to SimplStg
Ömer Sinan Ağacan [Wed, 2 Dec 2015 20:36:56 +0000 (14:36 -0600)] 
Move Stg-specific code from DynFlags to SimplStg

Reviewed By: bgamari, austin

Differential Revision:

3 years agoStgSyn: Remove unused SRT constructor
Ömer Sinan Ağacan [Wed, 2 Dec 2015 20:35:27 +0000 (14:35 -0600)] 
StgSyn: Remove unused SRT constructor

Reviewed By: bgamari, austin

Differential Revision:

3 years agoRevert "ghci: Add support for prompt functions"
Ben Gamari [Wed, 2 Dec 2015 13:59:39 +0000 (14:59 +0100)] 
Revert "ghci: Add support for prompt functions"

This reverts commit 72e362076e7ce823678797a162d0645e088cd594 which was
accidentally merged.

3 years agoComments (TcSMonad)
Simon Peyton Jones [Wed, 2 Dec 2015 14:41:12 +0000 (14:41 +0000)] 
Comments (TcSMonad)

3 years agoComments only (isIrrefutablePat)
Simon Peyton Jones [Wed, 2 Dec 2015 14:38:42 +0000 (14:38 +0000)] 
Comments only (isIrrefutablePat)

3 years agoImplement more deterministic operations and document them
Bartosz Nitka [Wed, 2 Dec 2015 13:30:22 +0000 (05:30 -0800)] 
Implement more deterministic operations and document them

I will need them for the future determinism fixes.

Test Plan: ./validate

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

Reviewed By: simonpj, simonmar

Subscribers: osa1, thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoMake the order of fixities in the iface file deterministic
Bartosz Nitka [Wed, 2 Dec 2015 11:28:13 +0000 (03:28 -0800)] 
Make the order of fixities in the iface file deterministic

This normalizes the order of written fixities by sorting by
`OccName` making it independent of `Unique` order.

Test Plan: I've added a new testcase

Reviewers: austin, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoRefactor treatment of wildcards
Simon Peyton Jones [Tue, 1 Dec 2015 16:38:23 +0000 (17:38 +0100)] 
Refactor treatment of wildcards

This patch began as a modest refactoring of HsType and friends, to
clarify and tidy up exactly where quantification takes place in types.
Although initially driven by making the implementation of wildcards more
tidy (and fixing a number of bugs), I gradually got drawn into a pretty
big process, which I've been doing on and off for quite a long time.

There is one compiler performance regression as a result of all
this, in perf/compiler/T3064.  I still need to look into that.

* The principal driving change is described in Note [HsType binders]
  in HsType.  Well worth reading!

* Those data type changes drive almost everything else.  In particular
  we now statically know where

       (a) implicit quantification only (LHsSigType),
           e.g. in instance declaratios and SPECIALISE signatures

       (b) implicit quantification and wildcards (LHsSigWcType)
           can appear, e.g. in function type signatures

* As part of this change, HsForAllTy is (a) simplified (no wildcards)
  and (b) split into HsForAllTy and HsQualTy.  The two contructors
  appear when and only when the correponding user-level construct
  appears.  Again see Note [HsType binders].

  HsExplicitFlag disappears altogether.

* Other simplifications

     - ExprWithTySig no longer needs an ExprWithTySigOut variant

     - TypeSig no longer needs a PostRn name [name] field
       for wildcards

     - PatSynSig records a LHsSigType rather than the decomposed

     - The mysterious 'GenericSig' is now 'ClassOpSig'

* Renamed LHsTyVarBndrs to LHsQTyVars

* There are some uninteresting knock-on changes in Haddock,
  because of the HsSyn changes

I also did a bunch of loosely-related changes:

* We already had type synonyms CoercionN/CoercionR for nominal and
  representational coercions.  I've added similar treatment for



  All just type synonyms but jolly useful.

* I record-ised ForeignImport and ForeignExport

* I improved the (poor) fix to Trac #10896, by making
  TcTyClsDecls.checkValidTyCl recover from errors, but adding a
  harmless, abstract TyCon to the envt if so.

* I did some significant refactoring in RnEnv.lookupSubBndrOcc,
  for reasons that I have (embarrassingly) now totally forgotten.
  It had to do with something to do with import and export

Updates haddock submodule.

3 years agoMake the determinism tests more robust
Bartosz Nitka [Tue, 1 Dec 2015 15:42:35 +0000 (07:42 -0800)] 
Make the determinism tests more robust

The tests weren't explicit enough about comparing under different
unique allocation strategies. This led to some confusion on my part when
I started overriding flags in `testsuite/mk/`.
Includes a `.gitignore` rule.

Test Plan: harbormaster

Reviewers: austin, simonmar, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoFix warning about unused pattern variable
Gabor Greif [Tue, 1 Dec 2015 15:59:39 +0000 (16:59 +0100)] 
Fix warning about unused pattern variable

3 years agoRemove duplicated line
Gabor Greif [Wed, 28 Oct 2015 07:27:58 +0000 (08:27 +0100)] 
Remove duplicated line

3 years agoFix grammar and typo in TcTyDecls
Bartosz Nitka [Mon, 30 Nov 2015 16:44:27 +0000 (08:44 -0800)] 
Fix grammar and typo in TcTyDecls

Summary: It's just a docufix.

Test Plan: just a docufix

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoBuild system: Add stage specific SRC_HC_(WARNING_)OPTS
Thomas Miedema [Mon, 30 Nov 2015 11:35:58 +0000 (12:35 +0100)] 
Build system: Add stage specific SRC_HC_(WARNING_)OPTS

* Add stage specific versions of SRC_HC_OPTS. These are currently only
  used for -Werror. The previous combination of GhcStage2HcOpts and
  GhcLibHcOpts didn't apply to utils/*.

* Add stage specific versions of SRC_HC_WARNING_OPTS. These will later be
  used for new warning supression flags that should not be passed to the
  bootstrap compiler.

* Move -Wall (and -Werror) related code back to mk/, where it
  was before 987d54274. Now all warning related code is nicely together.
  Include mk/ after mk/ to make this work.

Reviewed By: bgamari, hvr

Differential Revision:

3 years agoMkId: Typos in comments
Ömer Sinan Ağacan [Tue, 1 Dec 2015 02:07:24 +0000 (21:07 -0500)] 
MkId: Typos in comments

3 years agoImplement warnings for Semigroups as parent of Monoid
David Luposchainsky [Sun, 29 Nov 2015 21:59:57 +0000 (22:59 +0100)] 
Implement warnings for Semigroups as parent of Monoid

This patch is similar to the AMP patch (#8004), which offered two

  1. Warn when an instance of a class has been given, but the type does
     not have a certain superclass instance
  2. Warn when top-level definitions conflict with future Prelude names

These warnings are issued as part of the new `-Wcompat` warning group.

Reviewers: hvr, ekmett, austin, bgamari

Reviewed By: hvr, ekmett, bgamari

Subscribers: ekmett, thomie

Differential Revision:

GHC Trac Issues: #11139

3 years agoSome improvements on CoreToDos passed to plugins
Ömer Sinan Ağacan [Sun, 29 Nov 2015 21:49:46 +0000 (22:49 +0100)] 
Some improvements on CoreToDos passed to plugins

This patch does two improvements:

- We now show ToDos in `CoreDoPasses`. This is pretty important,
  otherwise `CoreDoPasses` makes debugging impossible in some cases.

- Before running ToDos we run a cleanup pass on ToDos to remove
  `CoreDoNothing`s and flatten `CoreDoPasses`. This removes a lot of
  noise from `[CoreToDo]` argument passed to plugins.

Reviewers: simonpj, bgamari, austin

Reviewed By: bgamari, austin

Subscribers: thomie

Differential Revision:

3 years agoghci: Refactor handling of :show
Ben Gamari [Sun, 29 Nov 2015 21:49:04 +0000 (22:49 +0100)] 
ghci: Refactor handling of :show

In so doing ensure that the help text can't fall out of sync with the

Test Plan: Validate and play in ghci

Reviewers: austin, thomie

Reviewed By: austin, thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11111

3 years agoRemove redundant `#if`s
Herbert Valerio Riedel [Sun, 29 Nov 2015 16:53:56 +0000 (17:53 +0100)] 
Remove redundant `#if`s

`#if __GLASGOW_HASKELL__ > xxx` macros make little sense inside `base`

Reviewed By: austin

Differential Revision:

3 years agoUpdate deepseq submodule
Herbert Valerio Riedel [Sun, 29 Nov 2015 16:52:31 +0000 (17:52 +0100)] 
Update deepseq submodule

This pulls in new NFData instances for NonEmpty and Semigroup newtype wrappers

Differential Revision:

3 years agoUpdate containers submodule
Herbert Valerio Riedel [Sun, 29 Nov 2015 15:42:30 +0000 (16:42 +0100)] 
Update containers submodule

Differential Revision:

3 years agoGHCi should not defer typed holes
Thomas Miedema [Fri, 27 Nov 2015 15:19:24 +0000 (16:19 +0100)] 
GHCi should not defer typed holes

In the function `tcUserStmt` in compiler/typecheck/TcRnDriver.hs, before
going over the different ways ('plans') to lift an expression typed at
the prompt into the GHCi monad, `Opt_DeferTypeErrors` is disabled. Here is
the accompanying comment:

-- Ensure that type errors don't get deferred when type checking the
-- naked expression. Deferring type errors here is unhelpful because the
-- expression gets evaluated right away anyway. It also would potentially
-- emit redundant type-error warnings, one from each plan.
; plan <- unsetGOptM Opt_DeferTypeErrors $

Since `Opt_DeferTypeErrors` implies `Opt_DeferTypedHoles`,
`Opt_DeferTypedHoles` should be disabled here as well. This improves
the error message for T10248 (it doesn't mention ghciStepIO anymore).
This is a partial fix for #10249, and a complete fix for #11130.

Depends on D1526

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj

Differential Revision:

GHC Trac Issues: #10249, #11130

3 years agoRemove deprecated quasiquoter syntax.
Matthew Pickering [Fri, 27 Nov 2015 15:16:39 +0000 (16:16 +0100)] 
Remove deprecated quasiquoter syntax.

In spirit, this reverts 9ba922ee06b048774d7a82964867ff768a78126e

The syntax has been deprecated with a warning since 2010.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoghc-pkg: print version when verbose
Adam Sandberg Eriksson [Fri, 27 Nov 2015 15:16:23 +0000 (16:16 +0100)] 
ghc-pkg: print version when verbose

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoghci: Add support for prompt functions
Ben Gamari [Fri, 27 Nov 2015 13:26:32 +0000 (14:26 +0100)] 
ghci: Add support for prompt functions

This is an updated version of @jlengyel's original patch adding support
for prompt functions.

3 years agoImplement new -XTemplateHaskellQuotes pragma
Herbert Valerio Riedel [Fri, 27 Nov 2015 12:39:18 +0000 (13:39 +0100)] 
Implement new -XTemplateHaskellQuotes pragma

Since f16ddcee0c64a92ab911a7841a8cf64e3ac671fd / D876, `ghc-stage1`
supports a subset of `-XTemplateHaskell`, but since we need Cabal to be
able detect (so `.cabal` files can be specified accordingly, see also
GHC #11102 which omits `TemplateHaskell` from `--supported-extensions`)
whether GHC provides full or only partial `-XTemplateHaskell` support,
the proper way to accomplish this is to split off the
quotation/non-splicing `TemplateHaskell` feature-subset into a new
language pragma `TemplateHaskellQuotes`.

Moreover, `-XTemplateHaskellQuotes` is considered safe under SafeHaskell

This addresses #11121

Reviewers: goldfire, ezyang, dterei, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11121

3 years agoUpdate haskeline & terminfo submodules
Herbert Valerio Riedel [Sat, 28 Nov 2015 17:40:44 +0000 (18:40 +0100)] 
Update haskeline & terminfo submodules

Differential Revision:

3 years agoCheck arity on default decl for assoc types
Simon Peyton Jones [Fri, 27 Nov 2015 15:16:17 +0000 (15:16 +0000)] 
Check arity on default decl for assoc types

Fixes Trac #11136.  We should check arity before
doing tcTyClTyVars, because the latter crahes if
the arity isn't right.

3 years agoUpdate transformers submodule
Herbert Valerio Riedel [Fri, 27 Nov 2015 11:12:59 +0000 (12:12 +0100)] 
Update transformers submodule

Most notably this pulls in `MonadFail` instances
(see also #10751)

- add MonadFail instance for ContT
- re-order methods for consistency
- Add `MonadFail` instances
- Canonicalise Monad instances
- instance Bifunctor Constant

3 years agoLibdw: Handle failure to grab session for location lookup
Ben Gamari [Thu, 26 Nov 2015 11:12:32 +0000 (12:12 +0100)] 
Libdw: Handle failure to grab session for location lookup

This one slipped through testing.

3 years agoLibdwPool: Use poolTryTake
Ben Gamari [Thu, 26 Nov 2015 11:02:47 +0000 (12:02 +0100)] 
LibdwPool: Use poolTryTake

3 years agorts/Pool: Add poolTryTake
Ben Gamari [Thu, 26 Nov 2015 11:02:33 +0000 (12:02 +0100)] 
rts/Pool: Add poolTryTake

3 years agoNote #11108 in the bugs section of users guide
Ben Gamari [Wed, 25 Nov 2015 23:32:21 +0000 (00:32 +0100)] 
Note #11108 in the bugs section of users guide

3 years agoUser documentation for DuplicateRecordFields
Adam Gundry [Wed, 25 Nov 2015 23:28:32 +0000 (00:28 +0100)] 
User documentation for DuplicateRecordFields

This is a first draft of the user manual documentation for
DuplicateRecordFields. Feedback welcome. I've intentionally made this a
minimal change, but I wonder if it might make sense to pull out all the
subsections on record system extensions ("Traditional record syntax",
and "Record field disambiguation" through to "Record wildcards") into a
new section? That is, is it worth breaking down the rather monolithic
"Syntactic extensions" section?

Test Plan: n/a

Reviewers: simonpj, bgamari, austin

Reviewed By: bgamari, austin

Subscribers: thomie

Differential Revision:

3 years agoUser's Guide: Add links to MFP wiki page
Herbert Valerio Riedel [Wed, 25 Nov 2015 23:26:23 +0000 (00:26 +0100)] 
User's Guide: Add links to MFP wiki page

Test Plan: IIAM

Reviewers: austin, bgamari, quchen

Reviewed By: bgamari, quchen

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10751

3 years agoNote STM's vulnerability to non-allocating loops
Ben Gamari [Wed, 25 Nov 2015 23:24:42 +0000 (00:24 +0100)] 
Note STM's vulnerability to non-allocating loops

Test Plan: Read it

Reviewers: austin, fryguybob

Reviewed By: austin

Subscribers: thomie, fryguybob

Differential Revision:

GHC Trac Issues: #10639, #367

3 years agoAdd a simplifier trace for eta-expansion
Simon Peyton Jones [Wed, 25 Nov 2015 16:27:45 +0000 (16:27 +0000)] 
Add a simplifier trace for eta-expansion

3 years agoComments only
Simon Peyton Jones [Wed, 25 Nov 2015 16:26:58 +0000 (16:26 +0000)] 
Comments only

3 years agoRefactor default methods (Trac #11105)
Simon Peyton Jones [Wed, 25 Nov 2015 16:26:23 +0000 (16:26 +0000)] 
Refactor default methods (Trac #11105)

This patch does some signficant refactoring to the treatment
of default methods in class declarations, and more generally
to the type checking of type/class decls.


* When the class has a generic-default method, such as
     class C a where
       op :: a -> a -> Bool
       default op :: Ord a => a -> a -> a
  the ClassOpItem records the type of the generic-default,
  in this case the type (Ord a => a -> a -> a)

* I killed off Class.DefMeth in favour of the very-similar
  BasicTypes.DefMethSpec.  However it turned out to be better
  to use a Maybe, thus
      Maybe (DefMethSpec Type)
  with Nothing meaning "no default method".

* In TcTyClsDecls.tcTyClGroup, we used to accumulate a [TyThing],
  but I found a way to make it much simpler, accumulating only
  a [TyCon].  Much less wrapping and unwrapping.

* On the way I also fixed Trac #10896 in a better way. Instead
  of killing off all ambiguity checks whenever there are any type
  errors (the fix in commit 8e8b9ed), I instead recover in

There was a lot of associated simplification all round

3 years agoupdate link to MonadFail proposal
Herbert Valerio Riedel [Wed, 25 Nov 2015 12:22:47 +0000 (13:22 +0100)] 
update link to MonadFail proposal

[skip ci]

3 years agoDynFlags: Drop stale comment
Ben Gamari [Tue, 24 Nov 2015 15:55:48 +0000 (16:55 +0100)] 
DynFlags: Drop stale comment

3 years agoSimplify the MonadFail code
Simon Peyton Jones [Tue, 24 Nov 2015 15:07:08 +0000 (15:07 +0000)] 
Simplify the MonadFail code

Simplify and tidy up the MonadFail code.
See TcMatches.tcMonadFailOp

Less, code; and more robust.

This incidentally fixes a bug; see the change
to MonadFailErrors.stderr

3 years agoComments only
Simon Peyton Jones [Tue, 24 Nov 2015 13:25:51 +0000 (13:25 +0000)] 
Comments only

3 years agoDynFlags: Update comments to reflect new users guide
Ben Gamari [Tue, 24 Nov 2015 11:41:44 +0000 (12:41 +0100)] 
DynFlags: Update comments to reflect new users guide

3 years agoRewrite checkUniques and incorporate into validate
Ben Gamari [Tue, 24 Nov 2015 11:45:27 +0000 (12:45 +0100)] 
Rewrite checkUniques and incorporate into validate

This should catch duplicate uniques in the future before Bad Things

Test Plan: Introduce a duplicate unique and validate

Reviewers: austin, hvr, thomie

Reviewed By: hvr, thomie

Subscribers: thomie

Differential Revision:

3 years agoAdd -Wcompat warning flag group
David Luposchainsky [Tue, 24 Nov 2015 11:45:00 +0000 (12:45 +0100)] 
Add -Wcompat warning flag group

Reviewers: hvr, austin, thomie, bgamari

Reviewed By: hvr, austin, thomie, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11000

3 years agoRearrange error msgs and add section markers (Trac #11014).
Evan Laforge [Tue, 24 Nov 2015 11:43:18 +0000 (12:43 +0100)] 
Rearrange error msgs and add section markers (Trac #11014).

This puts the "Relevant bindings" section at the end.

It uses a TcErrors.Report Monoid to divide messages by importance and
then mappends them together.  This is not the most efficient way since
there are various intermediate Reports and list appends, but it probably
doesn't matter since error messages shouldn't get that large, and are
usually prepended.  In practice, everything is `important` except
`relevantBindings`, which is `supplementary`.

ErrMsg's errMsgShortDoc and errMsgExtraInfo were extracted into ErrDoc,
which has important, context, and suppelementary fields.  Each of those
three sections is marked with a bullet character, '•' on unicode
terminals and '*' on ascii terminals.  Since this breaks tons of tests,
I also modified testlib.normalise_errmsg to strip out '•'s.

--- Additional notes:

To avoid prepending * to an empty doc, I needed to filter empty docs.
This seemed less error-prone than trying to modify everyone who produces
SDoc to instead produce Maybe SDoc.  So I added `Outputable.isEmpty`.
Unfortunately it needs a DynFlags, which is kind of bogus, but otherwise
I think I'd need another Empty case for SDoc, and then it couldn't be a
newtype any more.

ErrMsg's errMsgShortString is only used by the Show instance, which is
in turn only used by Show HscTypes.SourceError, which is in turn only
needed for the Exception instance.  So it's probably possible to get rid
of errMsgShortString, but that would a be an unrelated cleanup.

Fixes #11014.

Test Plan: see above

Reviewers: austin, simonpj, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: simonpj, nomeata, thomie

Differential Revision:

GHC Trac Issues: #11014

3 years agoImplement new `-fwarn-noncanonical-monad-instances`
Herbert Valerio Riedel [Tue, 24 Nov 2015 11:46:33 +0000 (12:46 +0100)] 
Implement new `-fwarn-noncanonical-monad-instances`

Warn about incoherent/non-canonical 'Applicative'/'Monad' instance
declarations. Specifically the following invariants are checked:

In 'Monad' instances declarations warn if the any of the following
conditions does not hold:

 * If `return` is overridden it must be canonical (i.e. `return = pure`).
 * If `(>>)` is overridden it must be canonical (i.e. `(>>) = (*>)`).

In 'Applicative' instance declarations:

 * Warn if 'pure' is defined backwards (i.e. `pure = return`).
 * Warn if '(*>)' is defined backwards (i.e. `(*>) = (>>)`).

NB, this warning flag is not enabled via `-Wall` nor `-Wcompat`.

This addresses #11128

Reviewers: quchen, austin, bgamari

Reviewed By: bgamari

Differential Revision: