2 years agoTemplate Haskell support for COMPLETE pragmas
Matthew Pickering [Sat, 21 Jan 2017 19:29:49 +0000 (19:29 +0000)] 
Template Haskell support for COMPLETE pragmas

Reviewers: RyanGlScott, austin, goldfire, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13098

2 years agoCOMPLETE pragmas for enhanced pattern exhaustiveness checking
Matthew Pickering [Wed, 18 Jan 2017 13:25:30 +0000 (13:25 +0000)] 
COMPLETE pragmas for enhanced pattern exhaustiveness checking

This patch adds a new pragma so that users can specify `COMPLETE` sets of
`ConLike`s in order to sate the pattern match checker.

A function which matches on all the patterns in a complete grouping
will not cause the exhaustiveness checker to emit warnings.

pattern P :: ()
pattern P = ()

{-# COMPLETE P #-}

foo P = ()

This example would previously have caused the checker to warn that
all cases were not matched even though matching on `P` is sufficient to
make `foo` covering. With the addition of the pragma, the compiler
will recognise that matching on `P` alone is enough and not emit
any warnings.

Reviewers: goldfire, gkaracha, alanz, austin, bgamari

Reviewed By: alanz

Subscribers: lelf, nomeata, gkaracha, thomie

Differential Revision:

GHC Trac Issues: #8779

2 years agoUpdate Win32 submodule to fix Windows build
Matthew Pickering [Wed, 25 Jan 2017 14:53:55 +0000 (14:53 +0000)] 
Update Win32 submodule to fix Windows build

Reviewers: RyanGlScott, austin, Phyx, bgamari

Subscribers: thomie

Differential Revision:

2 years agoAdd myself [ci skip]
Gabor Greif [Wed, 25 Jan 2017 11:19:49 +0000 (12:19 +0100)] 
Add myself [ci skip]

2 years agoTypos in comments [ci skip]
Gabor Greif [Tue, 24 Jan 2017 13:54:31 +0000 (14:54 +0100)] 
Typos in comments [ci skip]

2 years agoUpdate .mailmap
Matthew Pickering [Wed, 25 Jan 2017 10:30:13 +0000 (10:30 +0000)] 
Update .mailmap

2 years agotestsuite: Bump compiler allocations of T5837
Ben Gamari [Tue, 24 Jan 2017 21:48:18 +0000 (16:48 -0500)] 
testsuite: Bump compiler allocations of T5837

Gipeda suggests that this is due to the recent top-level string literals in Core

2 years agoBump Win32 version.
Ben Gamari [Mon, 23 Jan 2017 19:52:36 +0000 (14:52 -0500)] 
Bump Win32 version.

Bump the version of `Win32` to `` which is a major update and includes
fixes for wrong alignments and wrong 64-bit types. Strangely enough this also
seems to resolve #12713, where `T10858` was failing due to too-low allocations.

The underlying type aliases have changed, so there is a potential
for user programs not to compile anymore, but the types were incorrect.

This also requires a bump in the `directory`, `Cabal`, and `process`

Original author: Tamar Christina <>

Test Plan: ./validate

Reviewers: bgamari, RyanGlScott, austin

Subscribers: hvr, RyanGlScott, thomie, #ghc_windows_task_force

Differential Revision:

2 years agoHscTypes: Use foldl' instead of foldr
Ben Gamari [Tue, 24 Jan 2017 17:52:06 +0000 (12:52 -0500)] 
HscTypes: Use foldl' instead of foldr

In this case we are building a map, for which `foldl'` is much better
suited. This has a small but consistent impact on compiler allocations,
        -1 s.d.                -----          -0.161%
        +1 s.d.                -----          -0.011%
        Average                -----          -0.086%

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

Differential Revision:

2 years agonativeGen: Use `foldl'` instead of `foldr` in free register accumulation
Ben Gamari [Tue, 24 Jan 2017 17:51:26 +0000 (12:51 -0500)] 
nativeGen: Use `foldl'` instead of `foldr` in free register accumulation

Manipulations of `FreeRegs` values are all just bit-operations on a
word. Turning these `foldr`s into `foldl'`s has a very small but consistent
effect on compiler allocations,
        -1 s.d.                -----          -0.065%
        +1 s.d.                -----          -0.018%
        Average                -----          -0.042%

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

Differential Revision:

2 years agoUniqSet: Implement unionManyUniqSets in terms of foldl' instead of foldr
Ben Gamari [Tue, 24 Jan 2017 17:50:00 +0000 (12:50 -0500)] 
UniqSet: Implement unionManyUniqSets in terms of foldl' instead of foldr

foldr generally isn't a good choice for folds where the result can't be
consumed incrementally. This gives a very modest improvement in
compiler allocations,
        -1 s.d.                -----          -0.182%
        +1 s.d.                -----          -0.050%
        Average                -----          -0.116%
This is clearly semantics-preserving since we are constructing a set.

Test Plan: Validate

Reviewers: austin

Subscribers: dfeuer, thomie

Differential Revision:

2 years agoPartially revert D3001
David Feuer [Tue, 24 Jan 2017 20:59:39 +0000 (15:59 -0500)] 
Partially revert D3001

D3001 accidentally changed the meaning of `containsSpan`. Revert
that change.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

2 years agoDon't put foralls in front of TH-spliced GADT constructors that don't need them
Ryan Scott [Tue, 24 Jan 2017 15:16:38 +0000 (10:16 -0500)] 
Don't put foralls in front of TH-spliced GADT constructors that don't need them

It turns out that D2974 broke this program

{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -ddump-splices #-}
module Bug where

import GHC.Exts (Constraint)

$([d| data Dec13 :: (* -> Constraint) -> * where
        MkDec13 :: c a => a -> Dec13 c

This was actually due to a long-standing bug in `hsSyn/Convert` that put
unnecessary `forall`s in front of GADT constructors that didn't have any
explicitly quantified type variables.

This cargo-cults the code in `Convert` that handles `ForallT` and adapts
it to `ForallC`. Fixes #13123 (for real this time).

Test Plan: make test TEST=T13123

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13123

2 years agoSkip path_with_commas when dyn unavailable
Bartosz Nitka [Tue, 24 Jan 2017 14:45:54 +0000 (06:45 -0800)] 
Skip path_with_commas when dyn unavailable

RyanGlScott reported a failure:
Could not find module 'Prelude'; Perhaps you haven't
installed the "dyn" libraries for package ‘base-’?
This might fix it.

Test Plan: harbormaster

Reviewers: austin, bgamari, thomie, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: thomie, simonmar

Differential Revision:

2 years agoRemove unused LOCAL_GHC_PKG definition from a test Makefile
Reid Barton [Tue, 24 Jan 2017 03:00:11 +0000 (22:00 -0500)] 
Remove unused LOCAL_GHC_PKG definition from a test Makefile

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

2 years agoAdd a failing test for #13102
Reid Barton [Tue, 24 Jan 2017 02:59:39 +0000 (21:59 -0500)] 
Add a failing test for #13102

Test Plan: harbormaster

Reviewers: austin, ezyang, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13102

2 years agoDocument -fspecialise-aggressively
Matthew Pickering [Tue, 24 Jan 2017 02:58:45 +0000 (21:58 -0500)] 
Document -fspecialise-aggressively

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12979

2 years agoRe-sort case alternatives after scrutinee constant folding (#13170)
Reid Barton [Tue, 24 Jan 2017 02:57:53 +0000 (21:57 -0500)] 
Re-sort case alternatives after scrutinee constant folding (#13170)

Commit d3b546b1a605 added a "scrutinee constant folding" pass
that rewrites a case expression whose scrutinee is an expression like
x +# 3#. But case expressions are supposed to have their alternatives in
sorted order, so when the scrutinee is (for example) negateInt# x#, we
need to re-sort the alternatives after mapping their values.

This showed up as a core lint failure when compiling System.Process.Posix:

    isSigIntQuit n = sig == sigINT || sig == sigQUIT
        where sig = fromIntegral (-n)

Data.List.sortBy is supposed to be linear-time on sorted or reverse-sorted
input, so it is probably not worth doing anything more clever than this.

Test Plan: Added a new test T13170 for the above case.

Reviewers: austin, hsyl20, simonpj, bgamari

Reviewed By: hsyl20, simonpj, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13170

2 years agoEnsure that scrutinee constant folding wraps numbers
Sylvain Henry [Tue, 24 Jan 2017 02:57:38 +0000 (21:57 -0500)] 
Ensure that scrutinee constant folding wraps numbers

Test Plan: T13172

Reviewers: rwbarton, simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #13172

2 years agousers-guide: Document -dppr-ticks
Ben Gamari [Mon, 23 Jan 2017 21:17:41 +0000 (16:17 -0500)] 
users-guide: Document -dppr-ticks

2 years agotypecheck: Fix note
Ben Gamari [Tue, 24 Jan 2017 02:52:46 +0000 (21:52 -0500)] 
typecheck: Fix note

2 years agoMake tickishContains faster
Bartosz Nitka [Mon, 23 Jan 2017 14:51:31 +0000 (09:51 -0500)] 
Make tickishContains faster

This just reorders some inequality checks to make the common case

The results are quite dramatic for #11095, but that's probably because
something else is causing it to do too much work.

Before (full
  13,589,495,832 bytes allocated in the heap

After (full
   7,885,575,872 bytes allocated in the heap

This is with `BuildFlavour = devel2`, so take it with a
a grain of salt.

For reference, with no `-g` I get:
155,703,112 bytes allocated in the heap
so we're still quite a way off.

Test Plan:
I still have to test locally

Reviewers: austin, bgamari

Subscribers: thomie, simonmar

Differential Revision:

GHC Trac Issues: #11095

2 years agoRecord evaluated-ness on workers and wrappers
Simon Peyton Jones [Fri, 13 Jan 2017 08:56:53 +0000 (08:56 +0000)] 
Record evaluated-ness on workers and wrappers

This patch is a refinement of the original commit (which
was reverted):

  commit 6b976eb89fe72827f226506d16d3721ba4e28bab
  Date:   Fri Jan 13 08:56:53 2017 +0000
      Record evaluated-ness on workers and wrappers

In Trac #13027, comment:20, I noticed that wrappers created after
demand analysis weren't recording the evaluated-ness of strict
constructor arguments.  In the ticket that led to a (debatable)
Lint error but in general the more we know about evaluated-ness
the better we can optimise.

This commit adds that info
  * both in the worker (on args)
  * and in the wrapper (on CPR result patterns).
See Note [Record evaluated-ness in worker/wrapper] in WwLib

On the way I defined Id.setCaseBndrEvald, and used it to shorten
the code in a few other places

Then I added test T13077a to test the CPR aspect of this patch,
but I found that Lint failed!

Reason: simpleOptExpr was discarding evaluated-ness info on
lambda binders because zapFragileIdInfo was discarding an
Unfolding of (OtherCon _).  But actually that's a robust
unfolding; there is no need to discard it. To fix this:

* zapFragileIdInfo only zaps fragile unfoldings

* Replace isClosedUnfolding with isFragileUnfolding (the latter
  is just the negation of the former, but the nomenclature is
  more consistent).  Better documentation too
       Note [Fragile unfoldings]

* And Simplify.simplLamBndr can now look at isFragileUnfolding
  to decide whether to use the longer route of simplUnfolding.

For some reason perf/compiler/T9233 improves in compile-time
allocation by 10%.  Hooray

Nofib: essentially no change:

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
      cacheprof          +0.0%     -0.3%     +0.9%     +0.4%     +0.0%
            Min          +0.0%     -0.3%     -2.4%     -2.4%     +0.0%
            Max          +0.0%     +0.0%     +9.8%    +11.4%     +2.4%
 Geometric Mean          +0.0%     -0.0%     +1.1%     +1.0%     +0.0%

2 years agoDon't quantify implicit type variables when quoting type signatures in TH
Ryan Scott [Mon, 23 Jan 2017 14:06:04 +0000 (09:06 -0500)] 
Don't quantify implicit type variables when quoting type signatures in TH

A bug was introduced in GHC 8.0 in which Template Haskell-quoted type
signatures would quantify _all_ their type variables, even the implicit ones.
This would cause splices like this:

$([d| idProxy :: forall proxy (a :: k). proxy a -> proxy a
      idProxy x = x

To splice back in something that was slightly different:

idProxy :: forall k proxy (a :: k). proxy a -> proxy a
idProxy x = x

Notice that the kind variable `k` is now explicitly quantified! What's worse,
this now requires the `TypeInType` extension to be enabled.

This changes the behavior of Template Haskell quoting to never explicitly
quantify type variables which are implicitly quantified in the source.

There are some other places where this behavior pops up too, including
class methods, type ascriptions, `SPECIALIZE` pragmas, foreign imports,
and pattern synonynms (#13018), so I fixed those too.

Fixes #13018 and #13123.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari

Reviewed By: simonpj, goldfire

Subscribers: simonpj, mpickering, thomie

Differential Revision:

GHC Trac Issues: #13018, #13123

2 years agoMake checkFamInstConsistency faster
Bartosz Nitka [Mon, 23 Jan 2017 12:56:21 +0000 (04:56 -0800)] 
Make checkFamInstConsistency faster

We've noticed that `checkFamInstConsistency` takes 6% of
overall build time on our codebase.
I've poked around for a bit and most of type family
instances are `Rep` from `Generics`. I think those are
unavoidable, so I don't think we can have less of them.

I also looked at the code and noticed a simple algorithmic
improvement can be made. The algorithm is pretty simple:
we take all the family instances from one module (`M1`)
and test it against another module (`M2`).
The cost of that is dominated by the size of `M1`, because
for each instance in `M1` we look it up in the type family
env from `M2`, and lookup is cheap.
If `M1` is bigger than `M2`, that's suboptimal, so after
my change we always iterate through the smaller set.

This drives down the cost of `checkFamInstConsistency`
to 2%.

Test Plan: harbormaster

Reviewers: simonmar, simonpj, goldfire, rwbarton, bgamari, ezyang, austin

Reviewed By: rwbarton, ezyang

Subscribers: ezyang, thomie

Differential Revision:

2 years agoTypos and grammar in manual/comments
Gabor Greif [Mon, 23 Jan 2017 08:38:15 +0000 (09:38 +0100)] 
Typos and grammar in manual/comments

2 years agoApply the right substitution in ty-fam improvement
Simon Peyton Jones [Fri, 20 Jan 2017 23:47:28 +0000 (23:47 +0000)] 
Apply the right substitution in ty-fam improvement

Trac #13135 showed that we were failing to apply the
correct substitution to the un-substituted tyvars during
type-family improvement using injectivity.  Specifically
in TcInteractlinjImproveEqns we need to use instFlexiX.

An outright bug, easy to fix.

Slight refactoring along the way.  The quantified tyars of the axiom are
readily to hand; we don't need to take the free tyvars of the LHS

2 years agoImprove pretty-printing of IfaceCoercions
Simon Peyton Jones [Fri, 20 Jan 2017 23:37:21 +0000 (23:37 +0000)] 
Improve pretty-printing of IfaceCoercions

For some reason, unless you have -fprint-explicit-coercions, when
printing an explicit coercion we were then going to special trouble to
suppress the unique of a hole (which only happens during debugging
anyway).  This is bizarre.

So I deleted three lines of code -- hooray.

2 years agoFailing test for #13149.
Edward Z. Yang [Sun, 22 Jan 2017 20:11:05 +0000 (12:11 -0800)] 
Failing test for #13149.

Signed-off-by: Edward Z. Yang <>
2 years agoRewrite Backpack comments on never-exported TyThings.
Edward Z. Yang [Thu, 19 Jan 2017 06:54:35 +0000 (22:54 -0800)] 
Rewrite Backpack comments on never-exported TyThings.

While thesing, I realized this part of the implementation
didn't make very much sense, so I started working on some
documentation updates to try to make things more explainable.

The new docs are organized around the idea of a
"never exported TyThing" (a non-implicit TyThing that never
occurs in the export list of a module).  I also removed
some outdated information that predated the change of
ModIface to store Names rather than OccNames.

Signed-off-by: Edward Z. Yang <>
Reviewers: simonpj, bgamari, austin

Subscribers: thomie

Differential Revision:

2 years agoPreserve coercion axioms when thinning.
Edward Z. Yang [Thu, 19 Jan 2017 00:17:04 +0000 (16:17 -0800)] 
Preserve coercion axioms when thinning.

Forgot to handle these!  In they go, plus a test case.

Signed-off-by: Edward Z. Yang <>
2 years agoRemove clean_cmd and extra_clean usage from .T files
Thomas Miedema [Sun, 22 Jan 2017 18:24:13 +0000 (13:24 -0500)] 
Remove clean_cmd and extra_clean usage from .T files

The `clean_cmd` and `extra_clean` setup functions don't do anything.
Remove them from .T files.

Created using This
diff is a test for the .T-file parser/processor/pretty-printer in that

    find . -name '*.T' -exec ~/refactor-ghc-testsuite/Main "{}" \;

Tests containing inline comments or multiline strings are not modified.

Preparation for #12223.

Test Plan: Harbormaster

Reviewers: austin, hvr, simonmar, mpickering, bgamari

Reviewed By: mpickering

Subscribers: mpickering

Differential Revision:

GHC Trac Issues: #12223

2 years agotestsuite: Bump allocations on T5321Fun and T12707
Ben Gamari [Sun, 22 Jan 2017 18:21:47 +0000 (13:21 -0500)] 
testsuite: Bump allocations on T5321Fun and T12707

These are only failing on Darwin, strangely enough, but do so quite

2 years Eliminate stray close bracket
Ben Gamari [Sat, 21 Jan 2017 21:57:14 +0000 (16:57 -0500)] Eliminate stray close bracket

2 years agoRevert "Remove unnecessary isTyVar tests in TcType"
Ryan Scott [Sun, 22 Jan 2017 17:57:08 +0000 (12:57 -0500)] 
Revert "Remove unnecessary isTyVar tests in TcType"

This reverts commit a0899b2f66a4102a7cf21569889381446ce63833. This is because
removing these checks prompts panics in at least two different programs
reported in #12785.

Test Plan: ./validate

Reviewers: simonpj, goldfire, bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12785

2 years agoAlways use -Xlinker for -rpath
Bartosz Nitka [Sat, 21 Jan 2017 17:59:55 +0000 (09:59 -0800)] 
Always use -Xlinker for -rpath

Currently we use `-Wl` which takes a list of
comma-separated options. Unfortunately that
breaks when you use it with `-rpath` and
a path that has commas in them.
Buck, the build system, produces paths with
commas in them.

`-Xlinker` doesn't have this disadvantage
and as far as I can tell is supported by
both `gcc` and `clang`. Anecdotally `nvcc`
supports `-Xlinker`, but not `-Wl`.

Test Plan: ./validate, harbourmaster

Reviewers: nomeata, simonmar, austin, bgamari, hvr

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

2 years agoWarn on missing home modules
Yuras Shumovich [Fri, 20 Jan 2017 21:53:45 +0000 (16:53 -0500)] 
Warn on missing home modules

Introduce a warning, -Wmissing-home-modules, to warn about home modules,
not listed in command line.

It is usefull for cabal when user fails to list a module in
`exposed-modules` and `other-modules`.

Test Plan: make TEST=MissingMod

Reviewers: mpickering, austin, bgamari

Reviewed By: bgamari

Subscribers: simonpj, mpickering, thomie

Differential Revision:

GHC Trac Issues: #13129

2 years agoClean up some shell code and M4 quoting
Demi Obenour [Fri, 20 Jan 2017 21:49:53 +0000 (16:49 -0500)] 
Clean up some shell code and M4 quoting

Test Plan: GHC CI

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie, erikd

Differential Revision:

2 years agotestsuite: Don't fail if "target has RTS linker" field is missing
Reid Barton [Fri, 20 Jan 2017 21:49:37 +0000 (16:49 -0500)] 
testsuite: Don't fail if "target has RTS linker" field is missing

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

2 years agoAdd a failing test for #13099
Reid Barton [Fri, 20 Jan 2017 20:03:44 +0000 (15:03 -0500)] 
Add a failing test for #13099

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13099

2 years agoShow explicit quantifiers in conflicting definitions error
Phil de Joux [Fri, 20 Jan 2017 19:59:44 +0000 (14:59 -0500)] 
Show explicit quantifiers in conflicting definitions error

This fixes #12441, where definitions in a Haskell module and its boot
file which differed only in their quantifiers produced a confusing error
message. Here we teach GHC to always show quantifiers for these errors.

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

Reviewed By: bgamari

Subscribers: snowleopard, simonpj, mpickering, thomie

Differential Revision:

GHC Trac Issues: #12441

2 years agoAllow top-level string literals in Core (#8472)
Takano Akio [Wed, 18 Jan 2017 23:26:47 +0000 (18:26 -0500)] 
Allow top-level string literals in Core (#8472)

This commits relaxes the invariants of the Core syntax so that a
top-level variable can be bound to a primitive string literal of type

This commit:

* Relaxes the invatiants of the Core, and allows top-level bindings whose
  type is Addr# as long as their RHS is either a primitive string literal or
  another variable.

* Allows the simplifier and the full-laziness transformer to float out
  primitive string literals to the top leve.

* Introduces the new StgGenTopBinding type to accomodate top-level Addr#

* Introduces a new type of labels in the object code, with the suffix "_bytes",
  for exported top-level Addr# bindings.

* Makes some built-in rules more robust. This was necessary to keep them
  functional after the above changes.

This is a continuation of D2554.

Rebasing notes:
This had two slightly suspicious performance regressions:

* T12425: bytes allocated regressed by roughly 5%
* T4029: bytes allocated regressed by a bit over 1%
* T13035: bytes allocated regressed by a bit over 5%

These deserve additional investigation.

Rebased by: bgamari.

Test Plan: ./validate --slow

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

Reviewed By: trofi, simonpj, bgamari

Subscribers: trofi, simonpj, gridaphobe, thomie

Differential Revision:

GHC Trac Issues: #8472

2 years agoBump Cabal submodule
Ben Gamari [Fri, 20 Jan 2017 15:30:04 +0000 (10:30 -0500)] 
Bump Cabal submodule

2 years agoAdd 'type family (m :: Symbol) <> (n :: Symbol)'
Oleg Grenrus [Thu, 19 Jan 2017 20:19:25 +0000 (15:19 -0500)] 
Add 'type family (m :: Symbol) <> (n :: Symbol)'

Reviewers: dfeuer, austin, bgamari, hvr

Subscribers: dfeuer, mpickering, RyanGlScott, ekmett, yav, lelf,
simonpj, thomie

Differential Revision:

GHC Trac Issues: #12162

2 years change rb'foo' to br'foo' for Python 3.2 compatibility
Reid Barton [Fri, 20 Jan 2017 18:04:58 +0000 (13:04 -0500)] change rb'foo' to br'foo' for Python 3.2 compatibility

2 years agoTest Trac #11444
Simon Peyton Jones [Fri, 20 Jan 2017 14:22:22 +0000 (14:22 +0000)] 
Test Trac #11444

2 years agoSimplify and improve CSE
Simon Peyton Jones [Fri, 20 Jan 2017 12:05:16 +0000 (12:05 +0000)] 
Simplify and improve CSE

Trac #13156 showed a lost opportunity for CSE. I found that it was
easy to fix, and it had the nice side effect of rendering a previous
nasty case, described in Note [Corner case for case expressions],

Simpler code, does more.  Great.

2 years agoFix a nasty bug in exprIsExpandable
Simon Peyton Jones [Fri, 20 Jan 2017 11:02:36 +0000 (11:02 +0000)] 
Fix a nasty bug in exprIsExpandable

This bug has been lurking for ages: Trac #13155

The important semantic change is to ensure that exprIsExpandable
returns False for primop calls.  Previously exprIsExpandable used
exprIsCheap' which always used primOpIsCheap.

I took the opportunity to combine the code for exprIsCheap' (two
variants: exprIsCheap and exprIsExpandable) with that for
exprIsWorkFree.  Result is simpler, tighter, easier to understand.
And correct (at least wrt this bug)!

2 years agoAdd explicit foldMap implementation for Maybe
David Feuer [Thu, 19 Jan 2017 21:40:06 +0000 (16:40 -0500)] 
Add explicit foldMap implementation for Maybe

Eric Mertens pointed out that using the default `foldMap`
implementation for `Maybe` led to an efficiency problem by
implementing `foldMap f (Just x)` as `f x <> mempty` rather than
as `f x`. This should solve the problem.

Reviewers: hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: glguy, thomie

Differential Revision:

2 years agoDon't error on missing Perl, just warn and disable object splitting.
Demi Obenour [Thu, 19 Jan 2017 21:18:30 +0000 (16:18 -0500)] 
Don't error on missing Perl, just warn and disable object splitting.

If Perl isn't needed, we don't need to error out.  Since all Perl is
used for is the splitter, we can just warn.

Test Plan: GHC CI

Reviewers: bgamari, hvr, austin

Reviewed By: bgamari

Subscribers: thomie, erikd

Differential Revision:

GHC Trac Issues: #13141

2 years agoFix the GHC 7.10 build
Ryan Scott [Thu, 19 Jan 2017 19:43:25 +0000 (14:43 -0500)] 
Fix the GHC 7.10 build

Following e7985ed23ddc68b6a2e4af753578dc1d9e8ab4c9. HasDebugCallStack now
appears in IdInfo, which requires `FlexibleContexts` to be enabled when built
with GHC 7.10.

2 years agoUpdate levity polymorphism
Richard Eisenberg [Thu, 15 Dec 2016 02:37:43 +0000 (21:37 -0500)] 
Update levity polymorphism

This commit implements the proposal in and

Here are some of the pieces of that proposal:

* Some of RuntimeRep's constructors have been shortened.

* TupleRep and SumRep are now parameterized over a list of RuntimeReps.
* This
means that two types with the same kind surely have the same
Previously, all unboxed tuples had the same kind, and thus the fact
above was

* RepType.typePrimRep and friends now return a *list* of PrimReps. These
functions can now work successfully on unboxed tuples. This change is
necessary because we allow abstraction over unboxed tuple types and so
always handle unboxed tuples specially as we did before.

* We sometimes have to create an Id from a PrimRep. I thus split PtrRep
* into
LiftedRep and UnliftedRep, so that the created Ids have the right

* The RepType.RepType type was removed, as it didn't seem to help with
* much.

* The RepType.repType function is also removed, in favor of typePrimRep.

* I have waffled a good deal on whether or not to keep VoidRep in
TyCon.PrimRep. In the end, I decided to keep it there. PrimRep is *not*
represented in RuntimeRep, and typePrimRep will never return a list
VoidRep. But it's handy to have in, e.g., ByteCodeGen and friends. I can
imagine another design choice where we have a PrimRepV type that is
with an extra constructor. That seemed to be a heavier design, though,
and I'm
not sure what the benefit would be.

* The last, unused vestiges of # (unliftedTypeKind) have been removed.

* There were several pretty-printing bugs that this change exposed;
* these are fixed.

* We previously checked for levity polymorphism in the types of binders.
* But we
also must exclude levity polymorphism in function arguments. This is
hard to check
for, requiring a good deal of care in the desugarer. See Note [Levity
checking] in DsMonad.

* In order to efficiently check for levity polymorphism in functions, it
* was necessary
to add a new bit of IdInfo. See Note [Levity info] in IdInfo.

* It is now safe for unlifted types to be unsaturated in Core. Core Lint
* is updated

* We can only know strictness after zonking, so several checks around
* strictness
in the type-checker (checkStrictBinds, the check for unlifted variables
under a ~
pattern) have been moved to the desugarer.

* Along the way, I improved the treatment of unlifted vs. banged
* bindings. See
Note [Strict binds checks] in DsBinds and #13075.

* Now that we print type-checked source, we must be careful to print
* ConLikes correctly.
This is facilitated by a new HsConLikeOut constructor to HsExpr.
Particularly troublesome
are unlifted pattern synonyms that get an extra void# argument.

* Includes a submodule update for haddock, getting rid of #.

* New testcases:

* Fixed tickets:

* This also adds a test case for #13105. This test case is
* "compile_fail" and
succeeds, because I want the testsuite to monitor the error message.
When #13105 is fixed, the test case will compile cleanly.

2 years agoFix get_op in the case of an unambiguous record selector (#13132)
Reid Barton [Wed, 18 Jan 2017 21:24:28 +0000 (16:24 -0500)] 
Fix get_op in the case of an unambiguous record selector (#13132)

Test Plan: validate

Reviewers: simonpj, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13132

2 years agoAdd CBool to Foreign.C.Types
Ryan Scott [Wed, 18 Jan 2017 21:24:17 +0000 (16:24 -0500)] 
Add CBool to Foreign.C.Types

This adds a `CBool` type wrapping C99's `bool`, i.e., an `unsigned

Fixes #13136.

Test Plan: ./validate on Tier-1 platforms

Reviewers: austin, hvr, simonmar, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie, erikd

Differential Revision:

GHC Trac Issues: #13136

2 years agoImprove suggestion for misspelled flag including '=' (fixes #11789)
Daishi Nakajima [Wed, 18 Jan 2017 21:23:55 +0000 (16:23 -0500)] 
Improve suggestion for misspelled flag including '=' (fixes #11789)

Test Plan:
Added 2 test cases, verified that  ghc can suggest in the following

  - for misspelled flag containing '=', ghc suggests flags that doesn't
    contain '='
  - for misspelled flag containing '=', ghc suggests flags that
    contains '='

Reviewers: austin, dfeuer, bgamari

Reviewed By: dfeuer, bgamari

Subscribers: dfeuer, mpickering, thomie

Differential Revision:

GHC Trac Issues: #11789

2 years agoModify ForeignPtr documentation in light of plusForeignPtr
Shea Levy [Wed, 18 Jan 2017 21:22:18 +0000 (16:22 -0500)] 
Modify ForeignPtr documentation in light of plusForeignPtr

Reviewers: austin, rwbarton, simonmar, hvr, bgamari

Reviewed By: rwbarton, simonmar

Subscribers: thomie

Differential Revision:

2 years agoClean up RTS Linker Windows.
Tamar Christina [Wed, 18 Jan 2017 21:21:40 +0000 (16:21 -0500)] 
Clean up RTS Linker Windows.

Clean up the linker code for PE.

1. Stop copying structures from the windows header
   and use those that are in the headers. There's no
   point in copying them and we got a few types wrong.

2. Replace custom typedef with C99 types. If we're not
   going to use the Windows type aliases, at least use
   standard ones.

Test Plan: ./validate

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: simonmar, bgamari

Subscribers: dfeuer, thomie, #ghc_windows_task_force

Differential Revision:

2 years agotestsuite: Really fix recomp001
Ben Gamari [Wed, 18 Jan 2017 20:42:00 +0000 (15:42 -0500)] 
testsuite: Really fix recomp001

The fix in D2964 wasn't quite right; the sleep was in the wrong place, as
pointed out by @gracjan.

2 years agoSpelling fixes in comments [ci skip]
Gabor Greif [Wed, 18 Jan 2017 16:07:40 +0000 (17:07 +0100)] 
Spelling fixes in comments [ci skip]

2 years agoTypos in comments only [ci skip]
Gabor Greif [Tue, 17 Jan 2017 16:39:33 +0000 (17:39 +0100)] 
Typos in comments only [ci skip]

2 years agoUnbreak build with ghc-7.10.1
Yuras Shumovich [Tue, 17 Jan 2017 20:55:59 +0000 (15:55 -0500)] 
Unbreak build with ghc-7.10.1

Test Plan: build with ghc-7.10.1

Reviewers: austin, bgamari, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

Differential Revision:

GHC Trac Issues: #13120

2 years agoSplit mkInlineUnfolding into two functions
David Feuer [Tue, 17 Jan 2017 20:55:39 +0000 (15:55 -0500)] 
Split mkInlineUnfolding into two functions

Previously, `mkInlineUnfolding` took a `Maybe` argument indicating
whether the caller requested a specific arity.  This was not
self-documenting at call sites. Now we distinguish between
`mkInlineUnfolding` and `mkInlineUnfoldingWithArity`.

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie

Differential Revision:

2 years agoUnquote ‘import’ in bad import error message
Phil Ruffwind [Tue, 17 Jan 2017 20:55:28 +0000 (15:55 -0500)] 
Unquote ‘import’ in bad import error message

    In module ‘Prelude’:
      ‘True’ is a data constructor of ‘Bool’
    To import it use
      ‘import’ Prelude( Bool( True ) )

The quotes around `import` don't make any sense.

Test Plan: manual

Reviewers: austin, mpickering, bgamari

Reviewed By: mpickering, bgamari

Subscribers: dfeuer, thomie

Differential Revision:

2 years agoevent manager: Don't worry if attempt to wake dead manager fails
Ben Gamari [Tue, 17 Jan 2017 20:52:37 +0000 (15:52 -0500)] 
event manager: Don't worry if attempt to wake dead manager fails

This fixes #12038, where the TimerManager would attempt to wake up a
manager that was already dead, resulting in setnumcapabilities001
occassionally failing during shutdown with unexpected output on stderr.

I'm frankly still not entirely confident in this solution but perhaps it
will help to get a few more eyes on this.

My hypothesis is that the TimerManager is racing:

  thread                   TimerManager worker
  -------                  --------------------
  requests that thread
  manager shuts down

                           begins to clean up,
                           closing eventfd

  calls wakeManager,
  which tries to write
  to closed eventfd

To prevent this `wakeManager` will need to synchronize with the
TimerManger worker to ensure that the worker doesn't clean up the
`Control` while another thread is trying to send a wakeup. However, this
would add a bit of overhead on every timer interaction, which feels
rather costly for what is really a problem only at shutdown.  Moreover,
it seems that the event manager (e.g.  `GHC.Event.Manager`) is also
afflicted by a similar race.

This patch instead simply tries to catch the write failure after it has
happened and silence it in the case that the fd has vanished. It feels
rather hacky but it seems to work.

Test Plan: Run `setnumcapabilities001` repeatedly

Reviewers: hvr, austin, simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12038

2 years agoSome 8.2.1 release notes for my stuff
Simon Marlow [Tue, 17 Jan 2017 20:48:37 +0000 (15:48 -0500)] 
Some 8.2.1 release notes for my stuff

Test Plan: Built it and looked at it

Reviewers: niteria, erikd, dfeuer, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: dfeuer, thomie, erikd

Differential Revision:

2 years agotestsuite: Bump allocations for T12234
Ben Gamari [Tue, 17 Jan 2017 14:49:22 +0000 (09:49 -0500)] 
testsuite: Bump allocations for T12234

Unfortunately it's not clear why but this has been failing on Harbormaster.

2 years agoBitmap: Use foldl' instead of foldr
Ben Gamari [Wed, 11 Jan 2017 21:33:40 +0000 (16:33 -0500)] 
Bitmap: Use foldl' instead of foldr

These are producing StgWords so foldl' is the natural choice. I'm not
sure how I didn't notice this when I wrote D1041.

Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #7450

2 years agotestsuite/recomp001: Sleep to ensure that GHC notices file change
Ben Gamari [Tue, 17 Jan 2017 20:48:09 +0000 (15:48 -0500)] 
testsuite/recomp001: Sleep to ensure that GHC notices file change

Some operating systems (e.g. Darwin) have very poor file timestamp
resolution.  On these systems GHC often fails to notice that B.hs
changes in this testsuite, leading to sporatic test failures. Add a
sleep to ensure the change is noticed.

Test Plan: Validate

Reviewers: ezyang, austin

Subscribers: mpickering, gracjan, thomie

Differential Revision:

2 years agoFix API Annotations for unboxed sums
Alan Zimmerman [Tue, 10 Jan 2017 18:16:34 +0000 (20:16 +0200)] 
Fix API Annotations for unboxed sums

An unboxed tuple such as

    (# | b | | | | | #)

Ends up in the parser via `tup_exprs` as

    Sum 2 7 lexp

where `lexp` is a `LHsExpr`

From an API annotation perspective, the 5 `AnnVbar`s after the `b` were attached
to `lexp`, but the leading `AnnVbar`s did not have a home.

This patch attaches them all to the the parent tuple expression. The first (alt
- 1) of them come before `lexp`, and the remaining (arity - alt) come after.

Test Plan: ./validate

Reviewers: osa1, austin, bgamari

Subscribers: thomie, mpickering

Differential Revision:

GHC Trac Issues: #12417

2 years agoTypos in manual and comments [ci skip]
Gabor Greif [Tue, 17 Jan 2017 10:25:49 +0000 (11:25 +0100)] 
Typos in manual and comments [ci skip]

2 years agoComments about TyBinders (only)
Simon Peyton Jones [Fri, 13 Jan 2017 15:58:06 +0000 (15:58 +0000)] 
Comments about TyBinders (only)

2 years agoRefine exprOkForSpeculation
Simon Peyton Jones [Fri, 13 Jan 2017 14:20:15 +0000 (14:20 +0000)] 
Refine exprOkForSpeculation

This patch implements two related changes, both inspired by
the discussion on Trac #13027, comment:23:

* exprOkForSpeculation (op# a1 .. an), where op# is a primop,
  now skips over arguments ai of lifted type.  See the comments
  at Note [Primops with lifted arguments] in CoreUtils.

  There is no need to treat dataToTag# specially any more.

* dataToTag# is now treated as a can-fail primop.  See
  Note [dataToTag#] in primops.txt.pp

I don't expect this to have a visible effect on anything, but
it's much more solid than before.

2 years agoUnbreak libGHCi by adding missing symbol.
Tamar Christina [Mon, 16 Jan 2017 08:14:28 +0000 (08:14 +0000)] 
Unbreak libGHCi by adding missing symbol.

Someone committed a new public symbol `purgeObj` again
without adding it to the symbols table.

Test Plan: ./validate

Reviewers: austin, bgamari, simonmar, erikd

Reviewed By: erikd

Subscribers: thomie

Differential Revision:

2 years agoAdd missing test files for T13082.
Tamar Christina [Mon, 16 Jan 2017 03:11:44 +0000 (03:11 +0000)] 
Add missing test files for T13082.

Add two missing test files for T13082.
The reason they were missing is because the .gitignore
contains a very harmful and broad wildcard `foo*`. Why?

Test Plan: make test TEST="T13082_good T13082_fail"

Reviewers: austin, bgamari, simonmar, erikd

Reviewed By: erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13082

2 years agoAdd dump-parsed-ast flag and functionality
Alan Zimmerman [Wed, 11 Jan 2017 09:57:35 +0000 (11:57 +0200)] 
Add dump-parsed-ast flag and functionality

This flag causes a dump of the ParsedSource as an AST in textual form, similar
to the ghc-dump-tree on hackage.

Test Plan: ./validate

Reviewers: mpickering, bgamari, austin

Reviewed By: mpickering

Subscribers: nominolo, thomie

Differential Revision:

GHC Trac Issues: #11140

2 years agoLLVM: Tweak TBAA metadata codegen
Erik de Castro Lopo [Sun, 15 Jan 2017 19:17:17 +0000 (06:17 +1100)] 
LLVM: Tweak TBAA metadata codegen

This change is requred for llvm 4.0. GHC doesn't use that version yet,
but this change is just as valid for versions eariler than 4.0.

Two changes needed:

* Previously, GHC defined a `topN` node in the TBAA heiarchy and some IR
  instructions referenced that node. With LLVM 4.0 the root node can no
  longer be referenced by IR instructions, so we introduce a new element
  `rootN` and make `topN` a child of that.

* Previously the root TBAA node was rendered as "!0 = !{!"root", null}".
  With LLVM 4.0 that needs to be "!0 = !{!"root"}" which is also
  accepted by earlier versions.

Test Plan: Build with quick-llvm BuildFlavor and run tests

Reviewers: bgamari, drbo, austin, angerman, michalt, DemiMarie

Reviewed By: DemiMarie

Subscribers: mpickering, DemiMarie, thomie

Differential Revision:

2 years agoRevert "Record evaluated-ness on workers and wrappers"
Matthew Pickering [Sun, 15 Jan 2017 17:33:30 +0000 (17:33 +0000)] 
Revert "Record evaluated-ness on workers and wrappers"

This reverts commit 6b976eb89fe72827f226506d16d3721ba4e28bab.

Ben, Ryan and I decided to revert this for now due to T12234 failing
and causing all harbormaster builds to fail.

2 years agoImprove access violation reporting on Windows
Ryan Scott [Sun, 15 Jan 2017 16:54:41 +0000 (11:54 -0500)] 
Improve access violation reporting on Windows

This patch is courtesy of @awson.

Currently, whenever GHC catches a segfault on Windows, it simply reports the
somewhat uninformative message
`Segmentation fault/access violation in generated code`. This patch adds to
the message the type of violation (read/write/dep) and location information,
which should help debugging segfaults in the future.

Fixes #13108.

Test Plan: Build on Windows

Reviewers: austin, erikd, bgamari, simonmar, Phyx

Reviewed By: bgamari, Phyx

Subscribers: awson, thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #13108

2 years agoProperly introduce CTimer to System.Posix.Types
Ryan Scott [Sun, 15 Jan 2017 16:53:34 +0000 (11:53 -0500)] 
Properly introduce CTimer to System.Posix.Types

In ffc2327070dbb664bdb407a804121eacb2a7c734, an attempt was made at
adding a Haskell wrapper around the C `timer_t` type. Unfortunately, GHC's
autoconf macros weren't sophisticated enough at the time to properly detect
that `timer_t` is represented by a `void *` (i.e., a pointer) on most OSes.

This is a second attempt at `CTimer`, this time using `AC_COMPILE_IFELSE` to
detect if a type is a pointer type by compiling the following program:

type val;

This also only derives a small subset of class instances for `CTimer` that are
known to be compatible with `Ptr` using a new `OPAQUE_TYPE_WITH_CTYPE` macro.

Test Plan: ./validate

Reviewers: erikd, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12795, #12998

2 years agoFix abort and import lib search on Windows
Tamar Christina [Sun, 15 Jan 2017 13:07:36 +0000 (13:07 +0000)] 
Fix abort and import lib search on Windows

Apparently `sysErrorBelch` doesn't terminate the program anymore making
previously unreachable code now execute. If a dll is not found the error
message we return needs to be a heap value.

Secondly also allow the pattern `lib<name>` to be allowed for finding an
import library with the name `lib<name>.dll.a`.

Test Plan: ./validate, new tests T13082_good and T13082_fail

Reviewers: austin, RyanGlScott, hvr, erikd, simonmar, bgamari

Reviewed By: RyanGlScott, bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #13082

2 years agoUse latin1 code page on Windows for response files.
Tamar Christina [Sun, 15 Jan 2017 12:52:14 +0000 (12:52 +0000)] 
Use latin1 code page on Windows for response files.

D2917 added a change that will make paths on Windows response files
use DOS 8.3 shortnames to get around the fact that `libiberty` assumes
a one byte per character encoding.

This is actually not the problem, the actual problem is that GCC on
Windows doesn't seem to support Unicode at all.

This comes down to how unicode characters are handled between POSIX and
Windows. On Windows, Unicode is only supported using a multibyte character
encoding such as `wchar_t` with calls to the appropriate wide version of
APIs (name post-fixed with the `W` character). On Posix I believe the standard
`char` is used and based on the value it is decoded to the correct string.

GCC doesn't seem to make calls to the Wide version of the Windows APIs,
and even if it did, it's character representation would be wrong. So I
believe GCC just does not support utf-8 paths on Windows.

So the hack in D2917 is the only way to get Unicode support. The problem is
however that `GCC` is not the only tool with this issue and we don't use response
files for every invocation of the tools. Most of the tools probably don't support it.

Furthermore, DOS 8.1 shortnames only exist when the path or file physically exists on
disk. We pass lots of paths to GCC that don't exist yet, like the output file.
D2917 works around this by splitting the path from the file and try shortening that.

But this may not always work.

In short, even if we do Unicode correctly (which we don't atm, the GCC driver we build
uses `char` instead of `wchar_t`) we won't be able to compile using unicode paths that
need to be passed to `GCC`. So not sure about the point of D2917.

What we can do is support the most common non-ascii characters by writing the response
files out using the `latin1` code page.

Test Plan: compile + make test TEST=T12971

Reviewers: austin, bgamari, erikd

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12971

2 years agoDesugar static forms to makeStatic calls.
Facundo Domínguez [Mon, 9 Jan 2017 17:29:32 +0000 (14:29 -0300)] 
Desugar static forms to makeStatic calls.

Using makeStatic instead of applications of the StaticPtr data
constructor makes possible linting core when unboxing strict

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari, hvr

Reviewed By: simonpj

Subscribers: RyanGlScott, mboes, thomie

Differential Revision:

GHC Trac Issues: #12622

2 years agoRequire python3 like everywhere else too
Gabor Greif [Fri, 13 Jan 2017 15:37:28 +0000 (16:37 +0100)] 
Require python3 like everywhere else too

2 years agoSimplify CPP logic as we now need v7.10 for bootstrapping
Gabor Greif [Thu, 12 Jan 2017 16:44:38 +0000 (17:44 +0100)] 
Simplify CPP logic as we now need v7.10 for bootstrapping

2 years agoSpelling fixes in non-exported data type
Gabor Greif [Thu, 12 Jan 2017 16:42:30 +0000 (17:42 +0100)] 
Spelling fixes in non-exported data type

2 years agoTypos in comments
Gabor Greif [Thu, 12 Jan 2017 14:10:48 +0000 (15:10 +0100)] 
Typos in comments

2 years agoRecord evaluated-ness on workers and wrappers
Simon Peyton Jones [Fri, 13 Jan 2017 08:56:53 +0000 (08:56 +0000)] 
Record evaluated-ness on workers and wrappers

In Trac #13027, comment:20, I noticed that wrappers created after
demand analysis weren't recording the evaluated-ness of strict
constructor arguments.  In the ticket that led to a (debatable)
Lint error but in general the more we know about evaluated-ness
the better we can optimise.

This commit adds that info both in the worker (on args) and in
the wrapper (on CPR result patterns).

See Note [Record evaluated-ness in worker/wrapper] in WwLib

On the way I defined Id.setCaseBndrEvald, and used it to shorten
the code in a few other places

2 years agoFix top-level constraint handling (Trac #12921)
Simon Peyton Jones [Thu, 12 Jan 2017 10:59:08 +0000 (10:59 +0000)] 
Fix top-level constraint handling (Trac #12921)

Some out-of-scope errors were not being reported if anyone
throws an un-caught exception in the TcM monad.  That led to

  ghc: panic! (the 'impossible' happened)
initTc: unsolved constraints

I fixed this

* Splitting captureConstraints to use an auxilliary
  tryCaptureConstraints (which never fails)

* Define a new TcSimplify.captureTopConstraints (replacing
  the old TcRnMonad.captureTopConstraints), which reports
  any unsolved out-of-scope constraints before propagating
  the exception

That in turn allowed me to do some tidying up of the static-constraint
machinery, reducing duplication.

Also solves #13106.

2 years agoSmall refactoring in TcErrors
Simon Peyton Jones [Thu, 12 Jan 2017 10:57:25 +0000 (10:57 +0000)] 
Small refactoring in TcErrors

No change in behaviour

2 years agoTypos in manual, comments and tests
Gabor Greif [Wed, 11 Jan 2017 16:52:20 +0000 (17:52 +0100)] 
Typos in manual, comments and tests

2 years agoAdd mkUserGuidePart.cabal to .gitignore
Ryan Scott [Wed, 11 Jan 2017 23:17:25 +0000 (18:17 -0500)] 
Add mkUserGuidePart.cabal to .gitignore

Following fe75d2d4db44cee72d505bba24bd44c1a2a75613.

2 years agoImprove coment in typecheckIfacesForMerging.
Edward Z. Yang [Tue, 10 Jan 2017 22:16:28 +0000 (14:16 -0800)] 
Improve coment in typecheckIfacesForMerging.

Signed-off-by: Edward Z. Yang <>
2 years agoFix handling of closed type families in Backpack.
Edward Z. Yang [Fri, 6 Jan 2017 04:33:02 +0000 (20:33 -0800)] 
Fix handling of closed type families in Backpack.

A few related problems:

- CoAxioms, like DFuns, are implicit and never exported,
  so we have to make sure we treat them the same way as
  DFuns: in RnModIface we need to rename references to
  them with rnIfaceImplicit and in mergeSignatures we need
  to NOT check them directly for compatibility (the
  test on the type family will do this check for us.)

- But actually, we weren't checking if the axioms WERE
  consistent.  This is because we were forwarding all
  embedded CoAxiom references in the type family TyThing
  to the merged version, but that reference was what
  checkBootDeclM was using as a comparison point.
  This is similar to a problem we saw with DFuns.

  To fix this, I refactored the handling of implicit entities in TcIface
  for Backpack.  See Note [The implicit TypeEnv] for the gory details.
  Instead of passing the TypeEnv around explicitly, we stuffed it in

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

Reviewers: bgamari, simonpj, austin

Subscribers: thomie

Differential Revision:

2 years agoRewrite module signature documentation.
Edward Z. Yang [Thu, 5 Jan 2017 04:33:13 +0000 (23:33 -0500)] 
Rewrite module signature documentation.

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

Reviewers: bgamari, simonpj, austin, goldfire

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10262

2 years agoRevamp Backpack/hs-boot handling of type class signatures.
Edward Z. Yang [Thu, 5 Jan 2017 21:52:12 +0000 (13:52 -0800)] 
Revamp Backpack/hs-boot handling of type class signatures.

A basket of fixes and improvements:

- The permissible things that one can write in a type
  class definition in an hsig file has been reduced
  to encompass the following things:

    - Methods
    - Default method signatures (but NOT implementation)
    - MINIMAL pragma

  It is no longer necessary nor encouraged to specify
  that a method has a default if it is mentioned in
  a MINIMAL pragma; the MINIMAL pragma is assumed to
  provide the base truth as to what methods need to
  be implemented when writing instances of a type

- Handling of default method signatures in hsig was
  previously buggy, as these identifiers were not exported,
  so we now treat them similarly to DFuns.

- Default methods are merged, where methods with defaults
  override those without.

- MINIMAL pragmas are merged by ORing together pragmas.

- Matching has been relaxed: a method with a default can
  be used to fill a signature which did not declare the
  method as having a default, and a more relaxed MINIMAL
  pragma can be used (we check if the signature pragma
  implies the final implementation pragma, on the way
  fixing a bug with BooleanFormula.implies, see #13073)

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

Reviewers: simonpj, bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13041

2 years agoImprove Backpack support for fixities.
Edward Z. Yang [Thu, 5 Jan 2017 09:09:29 +0000 (01:09 -0800)] 
Improve Backpack support for fixities.

Two major bug-fixes:

    - Check that fixities match between hsig and implementation

    - Merge and preserve fixities when merging signatures

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

Reviewers: bgamari, simonpj, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #13066

2 years agoWarn if you explicitly export an identifier with warning attached.
Edward Z. Yang [Fri, 30 Dec 2016 05:39:27 +0000 (21:39 -0800)] 
Warn if you explicitly export an identifier with warning attached.

This won't stop people from attempting to use this identifier
(since it is still always going to be in the export list), but
having an explicit reference to something people shouldn't
use is a smell, so warn about it.

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

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

Differential Revision:

2 years agoAttach warnings to non-PVP compatible uses of signatures.
Edward Z. Yang [Fri, 30 Dec 2016 02:58:22 +0000 (18:58 -0800)] 
Attach warnings to non-PVP compatible uses of signatures.

If you use an inherited signature from another package in your own code,
the only valid PVP bound you can specify for this package is an *exact*
version bound.  This is because the signature is used both covariantly
(it provides declarations for import) and contravariantly (it specifies
what is required).  However, this is a bit distressing if you want to
use a PVP-style bound that allows for upgrading a package.  So there is
a dichotomy:

    1. Any signatures that come from packages with exact bounds
    (this includes, in particular, signature packages, who are
    included solely to make declarations available), can be
    used without problem by modules, but

    2. Any signatures that come from packages that are version
    bounded (i.e., any package that also provides modules) must
    NOT be used, because if they were used, they could break
    under a PVP policy that allows relaxations in the needed

To help users avoid situation (2), I've added a warning to all
signature declarations that come solely from (2).  This is not
perfect; you might still end up relying on some type identity
specified by a signature in a version-bounded package, but it
should help catch major errors.

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

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

Differential Revision:

2 years agoSupport for using only partial pieces of included signatures.
Edward Z. Yang [Tue, 27 Dec 2016 02:39:01 +0000 (18:39 -0800)] 
Support for using only partial pieces of included signatures.

Generally speaking, it's not possible to "hide" a requirement from a
package you include, because if there is some module relying on that
requirement, well, you can't just wish it out of existence.

However, some packages don't have any modules.  For these, we can
validly thin out requirements; indeed, this is very convenient if
someone has published a large signature package but you only want
some of the definitions.

This patchset tweaks the interpretation of export lists in
signatures: in particular, they no longer need to refer to
entities that are defined locally; they range over both the current
signature as well as any signatures that were inherited from
signature packages (defined by having zero exposed modules.)

In the process of doing this, I cleaned up a number of other

* rnModIface and rnModExports now report errors that occurred
  during renaming and can propagate these to the TcM monad.
  This is important because in the current semantics, you can
  thin out a type which is referenced by a value you keep;
  in this situation, we need to error (to ensure that all
  types in signatures are rooted, so that we can determine
  their identities).

* I ended up introducing a new construct 'dependency signature;
  to bkp files, to make it easier to tell if we were depending
  on a signature package.  It's not difficult for Cabal to
  figure this out (I already have a patch for it.)

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

Reviewers: simonpj, austin, bgamari

Subscribers: thomie, mpickering

Differential Revision:

GHC Trac Issues: #12994

2 years agoRevert "event manager: Don't worry if attempt to wake dead manager fails"
Ben Gamari [Wed, 11 Jan 2017 04:40:33 +0000 (23:40 -0500)] 
Revert "event manager: Don't worry if attempt to wake dead manager fails"

This broke the OS X build.

This reverts commit 6de7613604216f65fae92d8066a078bf9cd3c088.