2 years agoCheck for empty entity string in "prim" foreign imports
Sylvain HENRY [Fri, 14 Oct 2016 14:43:30 +0000 (10:43 -0400)] 
Check for empty entity string in "prim" foreign imports

Foreign imports with "prim" convention require a valid symbol identifier
(see linked issue). We check this.

Fix line too long

Test Plan: Validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12355

2 years agoBuild ghc-iserv with --export-dynamic
Simon Marlow [Fri, 14 Oct 2016 14:43:10 +0000 (10:43 -0400)] 
Build ghc-iserv with --export-dynamic

This enables loading dynamic libraries that refer to the RTS.  I just
came across somewhere I needed to do that, and without
`--export-dynamic` it's impossible.

For now we'll only support that when using `-fexternal-interpreter`,
because the dynamic symbol table for GHC itself is much bigger.

Test Plan: validate

Reviewers: niteria, austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: Phyx, thomie

Differential Revision:

2 years agoMake error when deriving an instance for a typeclass less misleading
Ryan Scott [Fri, 14 Oct 2016 14:40:56 +0000 (10:40 -0400)] 
Make error when deriving an instance for a typeclass less misleading

Before, when you attempted to derive an instance for a typeclass,

class C1 (a :: Constraint) where
class C2 where

deriving instance C1 C2

GHC would complain that `C2`'s data constructors aren't in scope. But
makes no sense, since typeclasses don't have constructors! By refining
checks that GHC performs when deriving, we can make the error message a
little more sensible.

This also cleans up a related `DeriveAnyClass` infelicity. Before, you
wouldn't have been able to compile code like this:

import System.IO (Handle)
class C a
deriving instance C Handle

Since GHC was requiring that all data constructors of `Handle` be in
scope. But `DeriveAnyClass` doesn't even generate code that mentions
any data constructors, so this requirement is silly!

Fixes #11509.

Test Plan: make test TEST=T11509

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie, simonpj

Differential Revision:

GHC Trac Issues: #11509

2 years agoAdd missing Semigroup instances for Monoidal datatypes in base
Ryan Scott [Fri, 14 Oct 2016 14:30:54 +0000 (10:30 -0400)] 
Add missing Semigroup instances for Monoidal datatypes in base

There are currently three datatypes that are exposed in `base` that have
`Monoid` instances, but no `Semigroup` instances:

* `IO`
* `Event` (from `GHC.Event`)
* `Lifetime` (from `GHC.Event`)

(There is also `EventLifetime` in `GHC.Event.Internal`, but it is not exported
directly, so I didn't bother with it.)

Adding the `Semigroup` instances for these types directly in the modules in
which they're defined resulted in some horrific import cycles, so I opted to
take the easy approach of defining all of these instances in `Data.Semigroup`.
(When `Semigroup` becomes a superclass of `Monoid`, these instances will have
to be moved somehow.)

Fixes #12464.

Test Plan: It compiles

Reviewers: hvr, ekmett, austin, bgamari

Reviewed By: ekmett

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12464

2 years agoPrelInfo: Fix style
Ben Gamari [Fri, 14 Oct 2016 00:42:59 +0000 (20:42 -0400)] 
PrelInfo: Fix style

2 years agoImprove find_lbl panic message
Ben Gamari [Thu, 13 Oct 2016 23:42:21 +0000 (19:42 -0400)] 
Improve find_lbl panic message

2 years agoMkIface: Turn a foldr into a foldl'
Ben Gamari [Tue, 23 Aug 2016 03:18:02 +0000 (23:18 -0400)] 
MkIface: Turn a foldr into a foldl'

There is no reason why this should be a foldr considering we are
building a map.

2 years agoClean up handling of known-key Names in interface files
Ben Gamari [Fri, 14 Oct 2016 01:53:13 +0000 (21:53 -0400)] 
Clean up handling of known-key Names in interface files

Previously BinIface had some dedicated logic for handling tuple names in
the symbol table. As it turns out, this logic was essentially dead code
as it was superceded by the special handling of known-key things. Here
we cull the tuple code-path and use the known-key codepath for all
tuple-ish things.

This had a surprising number of knock-on effects,

 * constraint tuple datacons had to be made known-key (previously they
   were not)

 * IfaceTopBndr was changed from being a synonym of OccName to a
   synonym of Name (since we now need to be able to deserialize Names
   directly from interface files)

 * the change to IfaceTopBndr complicated fingerprinting, since we need
   to ensure that we don't go looking for the fingerprint of the thing
   we are currently fingerprinting in the fingerprint environment (see
   notes in MkIface). Handling this required distinguishing between
   binding and non-binding Name occurrences in the Binary serializers.

 * the original name cache logic which previously lived in IfaceEnv has
   been moved to a new NameCache module

 * I ripped tuples and sums out of knownKeyNames since they introduce a
   very large number of entries. During interface file deserialization
   we use static functions (defined in the new KnownUniques module) to
   map from a Unique to a known-key Name (the Unique better correspond
   to a known-key name!) When we need to do an original name cache
   lookup we rely on the parser implemented in isBuiltInOcc_maybe.

 * HscMain.allKnownKeyNames was folded into PrelInfo.knownKeyNames.

 * Lots of comments were sprinkled about describing the new scheme.

Updates haddock submodule.

Test Plan: Validate

Reviewers: niteria, simonpj, austin, hvr

Reviewed By: simonpj

Subscribers: simonmar, niteria, thomie

Differential Revision:

GHC Trac Issues: #12532, #12415

2 years agoUnique: Simplify encoding of sum uniques
Ben Gamari [Fri, 14 Oct 2016 01:52:57 +0000 (21:52 -0400)] 
Unique: Simplify encoding of sum uniques

The previous encoding was entropically a bit better, but harder to
encode and decode. Now we just split up the integer part of the unique
into a bitfield.

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

Differential Revision:

2 years agoCabal submodule update.
Edward Z. Yang [Thu, 13 Oct 2016 07:52:20 +0000 (00:52 -0700)] 
Cabal submodule update.

Signed-off-by: Edward Z. Yang <>
2 years agoFurther improve error handling in TcRn monad
Simon Peyton Jones [Thu, 13 Oct 2016 11:24:53 +0000 (12:24 +0100)] 
Further improve error handling in TcRn monad

This patch builds on the one for Trac #12124, by dealing properly
with out-of-scope "hole" errors.

This fixes Trac #12529. The hard error coming from visible type application
is still there, but the out-of-scope error is no longer suppressed.

(Arguably the VTA message should be suppressed somehow, but that's a
battle for another day.)

2 years agoAdd missing @since annotations
Ryan Scott [Thu, 13 Oct 2016 02:22:43 +0000 (22:22 -0400)] 
Add missing @since annotations

2 years agoAdd test for #12456
Ryan Scott [Thu, 13 Oct 2016 01:06:48 +0000 (21:06 -0400)] 
Add test for #12456

Commit f352e5cd7bb629fe0ca3b913bfbe7bee43d62f3a fixed #12456. Let's add a test
to make sure it stays fixed.

2 years agoAdd test for #12589
Ryan Scott [Wed, 12 Oct 2016 23:16:46 +0000 (19:16 -0400)] 
Add test for #12589

Commit af21e38855f7d517774542b360178b05045ecb08 fixed #12598. Let's add a test
to make sure it stays fixed.

2 years agoAdd test for #12411
Ryan Scott [Wed, 12 Oct 2016 18:57:32 +0000 (14:57 -0400)] 
Add test for #12411

The fix for #12584 also fixed the problem in #12411. Let's add a test to ensure
that it stays fixed.

2 years agotestsuite: Bump T1969 allocations
Ben Gamari [Wed, 12 Oct 2016 15:49:55 +0000 (11:49 -0400)] 
testsuite: Bump T1969 allocations

2 years agoRnExpr: Actually fail if patterns found in expression
Ben Gamari [Tue, 11 Oct 2016 13:26:46 +0000 (09:26 -0400)] 
RnExpr: Actually fail if patterns found in expression

This fixes #12584, where wildcard patterns were snuck into an
expression, which then crashed the typechecker in TcExpr since EWildPats
aren't supposed to appear in the AST after renaming.

The problem was that `rnTopSpliceDecl` failed to check for errors from
`rnSplice` (as done by other callers to `rnSplice`).

Thanks to Shayan for reporting this!

Reviewers: simonpj, austin

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #12584

2 years agoComments and equation ordering only
Simon Peyton Jones [Wed, 12 Oct 2016 14:26:24 +0000 (15:26 +0100)] 
Comments and equation ordering only

2 years agoAdd derived shadows only for Wanted constraints
Simon Peyton Jones [Wed, 12 Oct 2016 11:02:04 +0000 (12:02 +0100)] 
Add derived shadows only for Wanted constraints

This patch implements choice (3) of comment:14 on Trac #12660.
It cures an infinite loop (caused by the creation of an infinite
type) in in compiling the 'singletons' package.

See Note [Add derived shadows only for Wanteds] in TcSMonad.

2 years agoAdd a broken test case for #12689
Joachim Breitner [Tue, 11 Oct 2016 20:50:25 +0000 (16:50 -0400)] 
Add a broken test case for #12689

A rule with a phase specification trying to match on a constructor with
a wrapper will fail to match, as the wrapper will be inlined by then.
The fact that it works in the other case is also mostly by accident.
(Split into two test cases so that regressions with regard what works so
far are caught.)

2 years agoAdd test case for #12689
Joachim Breitner [Tue, 11 Oct 2016 20:25:05 +0000 (16:25 -0400)] 
Add test case for #12689

which test a few variants of rules involving constructors, including
nullary constructors, constructors with wrappers, and unsaturated of

At the moment, all the rules work as expected, despite GHC’s compile
time warnings when called with -Wall.

2 years agoMore tests for Trac #12522
Simon Peyton Jones [Mon, 10 Oct 2016 12:57:01 +0000 (13:57 +0100)] 
More tests for Trac #12522

These ones test the variations in coment:15 of the ticket

2 years agoImproved stats for Trac #1969
Simon Peyton Jones [Mon, 10 Oct 2016 12:45:42 +0000 (13:45 +0100)] 
Improved stats for Trac #1969

With my latest commits

  76a5477 Move zonking out of tcFamTyPats
  b255ae7 Orient improvement constraints better

perf has improved slightly for T1969:

allocs:    733M -> 26M
residency: 43M  -> 41M

I don't know exactly why, but hey, it's good

2 years agoMove zonking out of tcFamTyPats
Simon Peyton Jones [Fri, 7 Oct 2016 23:03:53 +0000 (00:03 +0100)] 
Move zonking out of tcFamTyPats

In tcFamTyPats we were zonking from the TcType world to the
Type world, ready to build the results into a CoAxiom (which
should have no TcType stuff.  But the 'thing_inside' for
tcFamTyPats also must be zonked, and that zonking must have
the ZonkEnv from the binders zonked tcFamTyPats.

Ugh.  This caused an assertion failure (with DEBUG on) in
RaeBlobPost and TypeLevelVec, both in tests/dependent, as
shown in Trac #12682.  Why it hasn't shown up before now
is obscure to me.

So I moved the zonking stuff out of tcFamTyPats to its
three call sites, where we can do it all together. Very
slightly longer, but much more robust.

2 years agoDelete orphan where clause
Simon Peyton Jones [Fri, 7 Oct 2016 22:57:29 +0000 (23:57 +0100)] 
Delete orphan where clause

2 years agoRename a parameter; trivial refactor
Simon Peyton Jones [Fri, 7 Oct 2016 22:55:54 +0000 (23:55 +0100)] 
Rename a parameter; trivial refactor

2 years agoOrient improvement constraints better
Simon Peyton Jones [Fri, 7 Oct 2016 22:51:44 +0000 (23:51 +0100)] 
Orient improvement constraints better

This patch fixes an infinite loop in the constraint solver,
shown up by Trac #12522.

The solution is /very/ simple: just reverse the orientation of the
derived constraints arising from improvement using type-family
injectivity.  I'm not very proud of the fix --- it seems fragile
--- but it has the very great merit of simplicity, and it works

See Note [Improvement orientation] in TcInteract, and some
discussion on the Trac ticket.

2 years agoEscape lambda.
Vaibhav Sagar [Sun, 9 Oct 2016 22:21:58 +0000 (18:21 -0400)] 
Escape lambda.

Test Plan: View updated documentation?

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12672

2 years agoTurn on -n4m with -A16m or greater
Simon Marlow [Sun, 9 Oct 2016 22:21:35 +0000 (18:21 -0400)] 
Turn on -n4m with -A16m or greater

Nursery chunks help reduce the cost of GC when capabilities are unevenly
loaded, by ensuring that we use more of the available nursery.

The rationale for enabling this at -A16m is that any negative effects
due to loss of cache locality are less likely to be an issue at -A16m
and above.  It's a conservative guess.  If we had a lot of benchmark
data we could probably do better.

Results for nofib/parallel at -N4 -A32m with and without -n4m:

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
   blackscholes           0.0%     -9.5%     -9.0%    -15.0%     -2.2%
          coins           0.0%     -4.7%     -3.6%     -0.6%    -13.6%
         mandel           0.0%     -0.3%     +7.7%    +13.1%     +0.1%
        matmult           0.0%     +1.5%    +10.0%     +7.7%     +0.1%
          nbody           0.0%     -4.1%     -2.9%     0.085      0.0%
         parfib           0.0%     -1.4%     +1.0%     +1.5%     +0.2%
        partree           0.0%     -0.3%     +0.8%     +2.9%     -0.8%
           prsa           0.0%     -0.5%     -2.1%     -7.6%      0.0%
         queens           0.0%     -3.2%     -1.4%     +2.2%     +1.3%
            ray           0.0%     -5.6%    -14.5%     -7.6%     +0.8%
       sumeuler           0.0%     -0.4%     +2.4%     +1.1%      0.0%
            Min           0.0%     -9.5%    -14.5%    -15.0%    -13.6%
            Max           0.0%     +1.5%    +10.0%    +13.1%     +1.3%
 Geometric Mean          +0.0%     -2.6%     -1.3%     -0.5%     -1.4%

Not conclusive, but slightly better.  This matters a lot more when you
have more cores.

Test Plan: validate, nofib/paralel

Reviewers: niteria, ezyang, nh2, trofi, austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9221

2 years agoDefault +RTS -qn to the number of cores
Simon Marlow [Sun, 9 Oct 2016 22:20:53 +0000 (18:20 -0400)] 
Default +RTS -qn to the number of cores

Setting a -N value that is too large has a dramatic negative effect on
performance, but the new -qn flag can mitigate the worst of the effects
by limiting the number of GC threads.

So now, if you don't explcitly set +RTS -qn, and you set -N larger than
the number of cores (or use setNumCapabilities to do the same), we'll
default -qn to the number of cores.

These are the results from nofib/parallel on my 4-core (2 cores x 2
threads) i7 laptop, comparing -N8 before and after this change.

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
   blackscholes          +0.0%     +0.0%    -72.5%    -72.0%     +9.5%
          coins          +0.0%     -0.0%    -73.7%    -72.2%     -0.8%
         mandel          +0.0%     +0.0%    -76.4%    -75.4%     +3.3%
        matmult          +0.0%    +15.5%    -26.8%    -33.4%     +1.0%
          nbody          +0.0%     +2.4%     +0.7%     0.076      0.0%
         parfib          +0.0%     -8.5%    -33.2%    -31.5%     +2.0%
        partree          +0.0%     -0.0%    -60.4%    -56.8%     +5.7%
           prsa          +0.0%     -0.0%    -65.4%    -60.4%      0.0%
         queens          +0.0%     +0.2%    -58.8%    -58.8%     -1.5%
            ray          +0.0%     -1.5%    -88.7%    -85.6%     -3.6%
       sumeuler          +0.0%     -0.0%    -47.8%    -46.9%      0.0%
            Min          +0.0%     -8.5%    -88.7%    -85.6%     -3.6%
            Max          +0.0%    +15.5%     +0.7%    -31.5%     +9.5%
 Geometric Mean          +0.0%     +0.6%    -61.4%    -63.1%     +1.4%

Test Plan: validate, nofib/parallel benchmarks

Reviewers: niteria, ezyang, nh2, austin, erikd, trofi, bgamari

Reviewed By: trofi, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9221

2 years agoCleanup PosixSource.h
Moritz Angermann [Sun, 9 Oct 2016 22:19:26 +0000 (18:19 -0400)] 
Cleanup PosixSource.h

When trying to build arm64-apple-iso, the build fell over `strdup`, as
the arm64-apple-ios build did not fall into `darwin_HOST_OS`, and would
need `ios_HOST_OS`.

This diff tries to clean up PosixSource.h, instead of layering another
define on top.

As we use `strnlen` in sources that include PosixSource.h, and `strnlen`
is defined in POSIX.1-2008, the `_POSIX_C_SOURCE` and `_XOPEN_SOURCE`
are increased accordingly.

Furthermore the `_DARWIN_C_SOURCE` (required for `u_char`, etc. used in
sysctl.h) define is moved into `OSThreads.h` alongside a similar ifdef
for freebsd.

Test Plan: Build on all supported platforms.

Reviewers: austin, simonmar, erikd, kgardas, bgamari

Reviewed By: simonmar, erikd, kgardas, bgamari

Subscribers: Phyx, hvr, thomie

Differential Revision:

GHC Trac Issues: #12624

2 years agoDo not segfault if no common root can be found
Moritz Angermann [Sun, 9 Oct 2016 22:17:46 +0000 (18:17 -0400)] 
Do not segfault if no common root can be found

When trying to profile a plugin, ghc mysteriously segfaulted.  Upon
closer examination the segfault happend due to a `->prevStack` lookup
on a NULL pointer.

A new CostCentre: Unknown is introduced that is set, if ccsapp and
ccsfn are of equal depth (e.g. 0), and do not have a common CostCentre
in their stacks.

Reviewers: bgamari, simonmar, austin, erikd

Reviewed By: simonmar

Subscribers: Phyx, thomie

Differential Revision:

2 years agoGenerate a unique symbol for signature object stub files, fixes #12673
Edward Z. Yang [Sun, 9 Oct 2016 22:17:32 +0000 (18:17 -0400)] 
Generate a unique symbol for signature object stub files, fixes #12673

Test Plan: validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12673

2 years agoFix build
Csongor Kiss [Sat, 8 Oct 2016 10:28:22 +0000 (11:28 +0100)] 
Fix build

- interaction between backpack and export list refactoring
  introduced a few syntax errors, and constructor arity mismatches
- CPP macro used in backpack was not accepted by clang because of
  extraneous whitespace

Signed-off-by: Csongor Kiss <>
Reviewers: austin, bgamari, mpickering

Reviewed By: mpickering

Subscribers: thomie

Differential Revision:

2 years agoAdd trailing comma to fix the build.
Matthew Pickering [Sat, 8 Oct 2016 09:28:47 +0000 (10:28 +0100)] 
Add trailing comma to fix the build.

2 years agoRework renaming of children in export lists.
Matthew Pickering [Sat, 8 Oct 2016 09:06:01 +0000 (10:06 +0100)] 
Rework renaming of children in export lists.

The target of this patch is exports such as:

module Foo ( T(A, B, C) ) where

Essentially this patch makes sure that we use the correct lookup functions in order
to lookup the names in parent-children export lists. This change
highlighted the complexity of this small part of GHC which accounts for
the scale.

This change was motivated by wanting to
remove the `PatternSynonym` constructor from `Parent`. As with all these
things, it quickly spiraled out of control into a much larger refactor.

Reviewers: simonpj, goldfire, bgamari, austin

Subscribers: adamgundry, thomie

Differential Revision:

GHC Trac Issues: #11970

2 years agoCabal submodule update.
Edward Z. Yang [Fri, 7 Oct 2016 06:20:38 +0000 (23:20 -0700)] 
Cabal submodule update.

Signed-off-by: Edward Z. Yang <>
2 years agoReport that we support Backpack in --info.
Edward Z. Yang [Fri, 7 Oct 2016 06:20:19 +0000 (23:20 -0700)] 
Report that we support Backpack in --info.

Signed-off-by: Edward Z. Yang <>
2 years agoUpdate haddock.Cabal perf for Cabal update.
Edward Z. Yang [Fri, 7 Oct 2016 01:19:22 +0000 (18:19 -0700)] 
Update haddock.Cabal perf for Cabal update.

Signed-off-by: Edward Z. Yang <>
2 years agoMake InstalledUnitId be ONLY a FastString.
Edward Z. Yang [Thu, 6 Oct 2016 20:40:10 +0000 (13:40 -0700)] 
Make InstalledUnitId be ONLY a FastString.

It turns out that we don't really need to be able to
extract a ComponentId from UnitId, except in one case.
So compress UnitId into a single FastString.

The one case where we do need the ComponentId is when
we are compiling an instantiated version of a package;
we need the ComponentId to look up the indefinite
version of this package from the database.  So now we
just pass it in as an argument -this-component-id.

Also: ghc-pkg now no longer will unregister a package if
you register one with the same package name, if the
instantiations don't match.

Cabal submodule update which tracks the same data type

Signed-off-by: Edward Z. Yang <>
2 years agoDistinguish between UnitId and InstalledUnitId.
Edward Z. Yang [Thu, 6 Oct 2016 07:17:15 +0000 (00:17 -0700)] 
Distinguish between UnitId and InstalledUnitId.

Signed-off-by: Edward Z. Yang <>
2 years agoThe Backpack patch.
Edward Z. Yang [Sat, 10 Oct 2015 19:01:14 +0000 (12:01 -0700)] 
The Backpack patch.

This patch implements Backpack for GHC.  It's a big patch but I've tried quite
hard to keep things, by-in-large, self-contained.

The user facing specification for Backpack can be found at:

A guide to the implementation can be found at:

Has a submodule update for Cabal, as well as a submodule update
for filepath to handle more strict checking of cabal-version.

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

Reviewers: simonpj, austin, simonmar, bgamari, goldfire

Subscribers: thomie, mpickering

Differential Revision:

2 years agoExclude Cabal PackageTests from gen_contents_index.
Edward Z. Yang [Thu, 6 Oct 2016 23:20:24 +0000 (16:20 -0700)] 
Exclude Cabal PackageTests from gen_contents_index.

Signed-off-by: Edward Z. Yang <>
2 years agoRemove reexports from ghc-boot, help bootstrap with GHC 8.
Edward Z. Yang [Sun, 2 Oct 2016 19:59:44 +0000 (12:59 -0700)] 
Remove reexports from ghc-boot, help bootstrap with GHC 8.

Signed-off-by: Edward Z. Yang <>
2 years agoNote about external interface changes.
Edward Z. Yang [Tue, 30 Aug 2016 04:20:58 +0000 (21:20 -0700)] 
Note about external interface changes.

Signed-off-by: Edward Z. Yang <>
2 years agoTc267, tests what happens if you forgot to knot-tie.
Edward Z. Yang [Thu, 25 Aug 2016 05:11:07 +0000 (22:11 -0700)] 
Tc267, tests what happens if you forgot to knot-tie.

Signed-off-by: Edward Z. Yang <>
2 years agoSimplify implementation of wWarningFlags
Matthew Pickering [Fri, 7 Oct 2016 14:19:56 +0000 (15:19 +0100)] 
Simplify implementation of wWarningFlags

2 years agoDon't suggest deprecated flags in error messages
Martin Ceresa [Fri, 7 Oct 2016 12:54:10 +0000 (13:54 +0100)] 
Don't suggest deprecated flags in error messages

When looking up flags, we make sure to lookup the non-deprecated flags first
by ordering the list of flags.

Reviewers: bgamari, austin, mpickering

Reviewed By: mpickering

Subscribers: mpickering, thomie

Differential Revision:

GHC Trac Issues: #12574

2 years agoFix memory leak from #12664
Bartosz Nitka [Thu, 6 Oct 2016 12:40:24 +0000 (05:40 -0700)] 
Fix memory leak from #12664

This fixes the leak with `setProgArgv`. The problem was
that `setProgArgv` would not free the objects pointed
to by `prog_argc`, `prog_argv` when the globals were
changed resulting in a leak.

The only strictly necessary change is in `rts/RtsFlags.c`, but
the code in `System.Environment` was a bit confusing and not
exception safe, so I refactored it.

Test Plan: ./validate

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

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12664

2 years agoAdd compact to packages so it gets cleaned on make clean.
Edward Z. Yang [Thu, 6 Oct 2016 23:48:56 +0000 (16:48 -0700)] 
Add compact to packages so it gets cleaned on make clean.

Signed-off-by: Edward Z. Yang <>
2 years agoRemove dead code “mkHsConApp”
Joachim Breitner [Wed, 5 Oct 2016 20:14:59 +0000 (16:14 -0400)] 
Remove dead code “mkHsConApp”

Differential Revision:

2 years agoRegAlloc: Make some pattern matched complete
Joachim Breitner [Thu, 6 Oct 2016 03:37:03 +0000 (23:37 -0400)] 
RegAlloc: Make some pattern matched complete

these actually are complete, but due to the use of pattern guards, the
compiler does not see that. Refactor the code that it does.

Differential Revision:

2 years agoRefactor TcDeriv and TcGenDeriv
Ryan Scott [Thu, 6 Oct 2016 13:14:49 +0000 (09:14 -0400)] 
Refactor TcDeriv and TcGenDeriv

Keeping a promise I made to Simon to clean up these modules.

This change splits up the massive `TcDeriv` and `TcGenDeriv` modules into
somewhat more manageable pieces. The new modules are:

* `TcGenFunctor`: This contains the deriving machinery for `Functor`,
  `Foldable`, and `Traversable` (which all use the same underlying algorithm).
* `TcDerivInfer`: This is the new home for `inferConstraints`,
  `simplifyInstanceContexts`, and related functions, whose role is to come up
  with the derived instance context and subsequently simplify it.
* `TcDerivUtils`: This is a grab-bag module that contains several
  error-checking utilities originally in `TcDeriv`, as well as some functions
  that `TcDeriv` and `TcDerivInfer` both need.

The end result is that `TcDeriv` is now less than 1,600 SLOC (originally 2,686
SLOC), and `TcGenDeriv` is now about 2,000 SLOC (originally 2,964).

In addition, this also implements a couple of tiny refactorings:

* I transformed `type Condition = (DynFlags, TyCon) -> Validity` into
  `type Condition = DynFlags -> TyCon -> Validity`
* I killed the `DerivSpecGeneric` constructor for `DerivSpecMechanism`, and
  merged its functionality into `DerivSpecStock`. In addition,
  `hasStockDeriving` now contains key-value pairs for `Generic` and `Generic1`,
  so they're no longer treated as an awkward special case in `TcDeriv`.

Test Plan: ./validate

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: thomie, mpickering

Differential Revision:

2 years agoRemove unused T12124.srderr
Ryan Scott [Thu, 6 Oct 2016 13:12:05 +0000 (09:12 -0400)] 
Remove unused T12124.srderr

This was (accidentally?) introduced in 465c6c5d15f8fb54afb78408f3a79e75e74d2cd4

2 years agoImprove error handling in TcRnMonad
Simon Peyton Jones [Wed, 5 Oct 2016 21:00:02 +0000 (22:00 +0100)] 
Improve error handling in TcRnMonad

See Note [Constraints and errors] in TcRnMonad.  This
patch fixes Trac #12124 in quite a neat way.

2 years agoBring Note in TcDeriv up to date
Ryan Scott [Wed, 5 Oct 2016 20:13:29 +0000 (16:13 -0400)] 
Bring Note in TcDeriv up to date

Comments only.

[ci skip]

2 years agoMark zipWithAndUnzipM as INLINABLE rather than INLINE
Matthew Pickering [Tue, 4 Oct 2016 21:36:55 +0000 (22:36 +0100)] 
Mark zipWithAndUnzipM as INLINABLE rather than INLINE

It is a self-recursive function and hence a loop-breaker.

2 years agogenapply: update source file in autogenerated text
Sergei Trofimovich [Tue, 4 Oct 2016 20:13:51 +0000 (21:13 +0100)] 
genapply: update source file in autogenerated text

Signed-off-by: Sergei Trofimovich <>
2 years agorunghc: Fix import of System.Process on Windows
Ben Gamari [Sun, 2 Oct 2016 23:40:56 +0000 (19:40 -0400)] 
runghc: Fix import of System.Process on Windows

This apparently should have been an import of rawSystem instead of
runProcess. Oops.

Fixes D2538.

Test Plan: Validate on Linux and Windows.

Reviewers: austin, snowleopard

Reviewed By: snowleopard

Subscribers: thomie

Differential Revision:

2 years agoUpdate Cabal submodule to latest version.
Edward Z. Yang [Fri, 30 Sep 2016 23:50:52 +0000 (16:50 -0700)] 
Update Cabal submodule to latest version.

Note that Cabal needs one more bugfix which is in PR to
fix GHC bootstrapping. But the rest of the patch is
ready for review.

Needs a filepath submodule update because cabal check
became more strict.

This patch handles the abstract-ification of Version and

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

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision:

2 years agotestsuite: Mark test for #12355 as unbroken on Darwin.
Ben Gamari [Sun, 2 Oct 2016 17:47:03 +0000 (13:47 -0400)] 
testsuite: Mark test for #12355 as unbroken on Darwin.

Somehow this testcase works on Darwin but not on Linux. This deserves
further investigation.

2 years agoDynFlags: Fix absolute import path to generated header
Ben Gamari [Sun, 2 Oct 2016 17:46:12 +0000 (13:46 -0400)] 
DynFlags: Fix absolute import path to generated header

Test Plan: Validate

Reviewers: austin, snowleopard

Reviewed By: snowleopard

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #8040.

2 years agoIgnore output from derefnull and divbyzero on Darwin
Ben Gamari [Sun, 2 Oct 2016 16:01:21 +0000 (12:01 -0400)] 
Ignore output from derefnull and divbyzero on Darwin

The output contains the pid and executable path of the bash process
which spawned the failing process. It doesn't seem worth the effort to
cleanse this output; just ignore it.

2 years agoMark #6132 as broken on OS X
Ben Gamari [Sun, 2 Oct 2016 15:53:54 +0000 (11:53 -0400)] 
Mark #6132 as broken on OS X

It currently fails with,

    =====> T6132(normal) 1 of 1 [0, 0, 0]
    cd "./runghc/" && "/Users/bgamari/ghc/inplace/test
    spaces/ghc-stage2" -c T6132.hs -dcore-lint -dcmm-lint
    -no-user-package-db -rtsopts -fno-warn-missed-specialisations
    -fshow-warning-groups -dno-debug-output
    Compile failed (exit code 1) errors were:

    T6132.hs:1:2: error: parse error on input ‘#!/’

    *** unexpected failure for T6132(normal)

2 years agorunghc: use executeFile to run ghc process on POSIX
Michael Snoyman [Sun, 2 Oct 2016 01:24:05 +0000 (21:24 -0400)] 
runghc: use executeFile to run ghc process on POSIX

This means that, on POSIX systems, there will be only one ghc process
used for running scripts, as opposed to the current situation of a
runghc process and a ghc process. Beyond minor performance benefits of
not having an extra fork and resident process, the more important impact
of this is automatically getting proper signal handling. I noticed this
problem myself when running runghc as PID1 inside a Docker container.

I attempted to create a shim library for executeFile that would work for
both POSIX and Windows, but unfortunately I ran into issues with exit
codes being propagated correctly (see Therefore, this patch
leaves the Windows behavior unchanged. Given that signals are a POSIX
issue, this isn't too bad a trade-off. If someone has suggestions for
better Windows _exec support, please let me know.

Reviewers: erikd, austin, bgamari

Reviewed By: bgamari

Subscribers: Phyx, thomie

Differential Revision:

2 years agovalidate: Add --build-only
Ben Gamari [Sun, 2 Oct 2016 00:11:03 +0000 (20:11 -0400)] 
validate: Add --build-only

This will allow us to split up Harbormaster output for the build and
test stages of validation.

Test Plan: `./validate --build-only && ./validate --testsuite-only`

Reviewers: thomie, hvr, austin

Differential Revision:

2 years agoDisallow standalone deriving declarations involving unboxed tuples or sums
Ryan Scott [Sat, 1 Oct 2016 21:58:44 +0000 (17:58 -0400)] 
Disallow standalone deriving declarations involving unboxed tuples or sums

There was an awful leak where GHC permitted standalone `deriving`
declarations to create instances for unboxed sum or tuple types. This
fortifies the checks that GHC performs to catch this scenario and give
an appropriate error message.

Fixes #11509.

Test Plan: ./validate

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11509

2 years agoEliminate some unsafeCoerce#s with deriving strategies
Ryan Scott [Sat, 1 Oct 2016 21:58:27 +0000 (17:58 -0400)] 
Eliminate some unsafeCoerce#s with deriving strategies

Currently, `Foreign.C.Types`, `Foreign.Ptr`, and `System.Posix.Types`
define `Read` and `Show` instances for the newtypes in those modules by
using `unsafeCoerce#`. We can clean up this hack by using the `newtype`
deriving strategy.

Reviewers: hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

2 years agoTurn `__GLASGOW_HASKELL_LLVM__` into an integer again
Nicolas Trangez [Sat, 1 Oct 2016 21:58:11 +0000 (17:58 -0400)] 
Turn `__GLASGOW_HASKELL_LLVM__` into an integer again

In GHC < 8.0.1, the value of `__GLASGOW_HASKELL_LLVM__`, exposed
through the preprocessor when compiled with `-fllvm`, was an integer
value, encoded according to some rules specified in the user guide.

Due to an oversight, in GHC 8.0.1 the value of this define became a
tuple, exposed as e.g. `(3, 7)`. This was an unintended regression.

This patch turns the value of the `__GLASGOW_HASKELL_LLVM__` definition
into a single integer again, but changes the formatting of said number
slightly. Before, any LLVM version where the major or minor component >=
10 would cause ambiguous values for `__GLASGOW_HASKELL_LLVM__`. With
this patch, the value is in line with `__GLASGOW_HASKELL__`, adding a
padding `0` in-between major and minor component if applicable (we
assume no minors >= 100 will ever exist).

The documentation in the user guide is updated accordingly, and a
reference is made in the 8.0.2 release notes.

Test Plan: validate

Reviewers: bgamari, erikd

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12628

2 years agoghc-pkg: Allow unregistering multiple packages in one call
Niklas Hambüchen [Sat, 1 Oct 2016 21:57:32 +0000 (17:57 -0400)] 
ghc-pkg: Allow unregistering multiple packages in one call

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12637

2 years agoDo not warn about unused underscore-prefixed fields (fixes Trac #12609)
Adam Gundry [Sat, 1 Oct 2016 21:56:58 +0000 (17:56 -0400)] 
Do not warn about unused underscore-prefixed fields (fixes Trac #12609)

When DuplicateRecordFields is enabled, the mangling of selector names
was causing them to be reported as unused even if prefixed by an
underscore. This corrects the OccName used by the check.

Test Plan: New test overloadedrecflds/should_compile/T12609

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12609

2 years agoPPC/CodeGen: fix lwa instruction generation
Peter Trommler [Sat, 1 Oct 2016 21:56:31 +0000 (17:56 -0400)] 
PPC/CodeGen: fix lwa instruction generation

Opcode lwa is a 64-bit opcode and allows a DS-form only.  This patch
generates lwa opcodes only when the offset is a multiple of 4.

Fixes #12621

Test Plan: validate

Reviewers: erikd, hvr, simonmar, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12621

2 years agoDon't warn about name shadowing when renaming the patten in a PatSyn decl
Matthew Pickering [Sat, 1 Oct 2016 21:55:26 +0000 (17:55 -0400)] 
Don't warn about name shadowing when renaming the patten in a PatSyn decl

Previously the renamer assumed that *any* time we renamed a pattern, the
pattern was introducing new binders. This isn't true in pattern synonym
declarations where the pattern is used as part of a definition.

We add a special case to not warn in this situation.

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #12615

2 years agoFix interaction of record pattern synonyms and record wildcards
Matthew Pickering [Sat, 1 Oct 2016 21:55:04 +0000 (17:55 -0400)] 
Fix interaction of record pattern synonyms and record wildcards

We were missing an appropiate *ConLike lookup in the case when
the pattern synonym was defined in a different module.

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #11987

2 years agoAdd NUMA support for Windows
Tamar Christina [Sun, 25 Sep 2016 19:00:31 +0000 (20:00 +0100)] 
Add NUMA support for Windows

NOTE: I have been able to do simple testing on emulated NUMA nodes.
           Real hardware would be needed for a proper test.

D2199 Added NUMA support for Linux, I have just filled in the missing pieces following
the description of the Linux APIs.

Test Plan:
Use `bcdedit.exe /set groupsize 2` to modify the kernel again (Similar to D2533).

This generates some NUMA nodes:

Logical Processor to NUMA Node Map:
NUMA Node 0:
NUMA Node 1:

Approximate Cross-NUMA Node Access Cost (relative to fastest):
     00  01
00: 1.1 1.1
01: 1.0 1.0

run ` ../test-numa.exe +RTS --numa -RTS`

and check PerfMon for NUMA allocations.

Reviewers: simonmar, erikd, bgamari, austin

Reviewed By: simonmar

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12602

2 years agoUse check stacking on Windows.
Tamar Christina [Sat, 17 Sep 2016 21:25:00 +0000 (22:25 +0100)] 
Use check stacking on Windows.

#8870 added as a temporary work around a much higher initial reserve
and committed stack space of 2mb. This is causing problems with other windows applications.

The hack was supposed to be temporary untill we could emit `__chkstk` instructions.
But GCC can emit stack checks automatically for us if `-fstack-check` is passed.

This will then emit calls to `___chkstk_ms` before stack allocations.

  633de0:       48 83 e0 f0             and    $0xfffffffffffffff0,%rax
  633de4:       e8 07 0c 0d 00          callq  7049f0 <___chkstk_ms>
  633de9:       48 29 c4                sub    %rax,%rsp

The hack is now no longer needed.

Test Plan: ./validate

Reviewers: austin, erikd, awson, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12186

2 years agoMark T11978a as broken due to #12019
Ben Gamari [Sat, 1 Oct 2016 21:02:49 +0000 (17:02 -0400)] 
Mark T11978a as broken due to #12019

Test Plan: `validate --slow`

Reviewers: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12019

2 years agoMove -dno-debug-output to the end of the test flags
Matthew Pickering [Sat, 1 Oct 2016 04:28:43 +0000 (00:28 -0400)] 
Move -dno-debug-output to the end of the test flags

It is often convenient to copy the test invocation and remove this flag
in order to see compiler traces. Moving it to the end makes it easier to

Remove trailing whitespace

Reviewers: austin, thomie, bgamari

Reviewed By: bgamari

Differential Revision:

2 years agoRecognise US spelling for specialisation flags.
Tim McGilchrist [Sat, 1 Oct 2016 04:28:26 +0000 (00:28 -0400)] 
Recognise US spelling for specialisation flags.

The user guide says that we allow the user to use `specialise` or
`specialize` interchangeably but this wasn't the case for the relevant
flags. This patch adds aliases for the flags which control

Reviewers: erikd, austin, mpickering, bgamari

Reviewed By: mpickering, bgamari

Subscribers: mpickering, thomie

Differential Revision:

GHC Trac Issues: #12575

2 years agoSupport more than 64 logical processors on Windows
Tamar Christina [Sat, 1 Oct 2016 04:26:52 +0000 (00:26 -0400)] 
Support more than 64 logical processors on Windows

Windows support for more than 64 logical processors are implemented
using processor groups.

Essentially what it's doing is keeping the existing maximum of 64
processors and keeping the affinity mask a 64 bit value, but adds an
hierarchy above that.

This support was added to Windows 7 and so we need to at runtime detect
if the APIs are still there due to our minimum supported version being
Windows Vista.

The Maximum number of groups supported at this time is 4, so 256 logical
cores.  The group indices are 0 based. One thread can have affinity with
multiple groups.

and particularly helpful is the whitepaper: 'Supporting Systems that
have more than 64 processors' at

Processor groups are not guaranteed to be uniformly distributed nor
guaranteed to be filled before a next group is needed. The OS will
assign processors to groups based on physical proximity and will never
partially assign cores from one physical cpu to more than one group. If
one has two 48 core CPUs then you'd end up with two groups of 48 logical
cpus. Now add a 3rd CPU with 10 cores and the group it is assigned to
depends where the socket is on the board.

Test Plan:
./validate or make test -c . in the rts test folder.

This tests for regressions, to test this particular functionality

   <program> +RTS -N -qa -RTS

Test is detailed in description.

Reviewers: bgamari, simonmar, austin, erikd

Reviewed By: simonmar

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #11054

2 years agoGHCi: Don't remove shadowed bindings from typechecker scope.
mniip [Sat, 1 Oct 2016 04:26:04 +0000 (00:26 -0400)] 
GHCi: Don't remove shadowed bindings from typechecker scope.

The shadowed out bindings are accessible via qualified names like  Since they are accessable in the renamer the typechecker
should be able to see them too.  As a consequence they show up in :show

This fixes T11547

Test Plan:
Fixed current tests to accomodate to new stuff in :show bindings
Added a test that verifies that the typechecker doesn't crash

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #11547

2 years agoCodeGen X86: fix unsafe foreign calls wrt inlining
Sylvain HENRY [Sat, 1 Oct 2016 04:25:49 +0000 (00:25 -0400)] 
CodeGen X86: fix unsafe foreign calls wrt inlining

Foreign calls (unsafe and safe) interact badly with inlining and
register passing ABIs (see #11792 and #12614):
the inlined code to compute a parameter of the call may overwrite a
register already set to pass a preceding parameter.

With this patch, we compute all parameters which are not simple
expressions before assigning them to fixed registers required by the

Test Plan:
   - Add test (test both reg and stack parameters)
   - Validate

Reviewers: osa1, bgamari, austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11792, #12614

2 years agoImplement deriving strategies
Ryan Scott [Sat, 1 Oct 2016 00:15:25 +0000 (20:15 -0400)] 
Implement deriving strategies

Allows users to explicitly request which approach to `deriving` to use
via keywords, e.g.,

newtype Foo = Foo Bar
  deriving Eq
  deriving stock    Ord
  deriving newtype Show

Fixes #10598. Updates haddock submodule.

Test Plan: ./validate

Reviewers: hvr, kosmikus, goldfire, alanz, bgamari, simonpj, austin,
erikd, simonmar

Reviewed By: alanz, bgamari, simonpj

Subscribers: thomie, mpickering, oerjan

Differential Revision:

GHC Trac Issues: #10598

2 years agoDocument Safe Haskell restrictions on Generic instances
Ryan Scott [Fri, 30 Sep 2016 19:52:02 +0000 (15:52 -0400)] 
Document Safe Haskell restrictions on Generic instances

Commit 578fbeca31dd3d755e24e910c3a7327f92bc4ee3 disallowed hand-written
`Generic` instances in Safe Haskell, but this wasn't documented anywhere.

2 years agoCorrect spelling in note references
Gabor Greif [Fri, 30 Sep 2016 14:37:53 +0000 (16:37 +0200)] 
Correct spelling in note references

2 years agoMake tcrun042 fail
Simon Peyton Jones [Fri, 30 Sep 2016 13:33:19 +0000 (14:33 +0100)] 
Make tcrun042 fail

This test uses wholesale impredicative polymorphism, and now fails.
That's ok.

2 years agoAdd missing stderr file
Simon Peyton Jones [Fri, 30 Sep 2016 12:32:51 +0000 (13:32 +0100)] 
Add missing stderr file

..accidentally omitted from previous commit.

2 years agoComments only
Simon Peyton Jones [Tue, 27 Sep 2016 16:16:57 +0000 (17:16 +0100)] 
Comments only

2 years agoFix impredicativity (again)
Simon Peyton Jones [Sun, 25 Sep 2016 14:50:18 +0000 (15:50 +0100)] 
Fix impredicativity (again)

This patch fixes Trac #12616.

Dignosis.  In TcUnify.tc_sub_type_ds we were going to some trouble to
support co- and contra-variance even for impredicative types.  With
-XImpredicativeTYpes, this allowed a unification variable to be
unified with a polytype (probably wrongly) and that caused later
trouble in the constraint solver, where -XImpredicativeTypes was /not/
on.  In effect, -XImpredicativeTypes can't be switched on locally.

Why did we want ImpredicativeTypes locally?  Because the program
generated by GND for a higher-rank method involved impredicative
instantation of 'coerce':
      op = coerce op   -- where op has a higher rank type
See Note [Newtype-deriving instances] in TcGenDeriv.


1.  It is ghastly to rely on ImpredicativeTypes (a 100% flaky
    feature) to instantiate coerce polymorphically.  Happily we
    now have Visible Type Application, so I've used that instead
    which should be solid and reliable.

2.  I deleted the code in tc_sub_type_ds that allows the constraint
    solver to "look through" a unification variable to find a
    polytype.  That used to be essential in the days of ReturnTv,
    but it's utterly unreliable and should be consigned to the dustbin
    of history.  (We have ExpType now for the essential uses.)

Tests involving ImpredicativeTypes are affected, but I'm not worried
about them... it's advertised as a feature you can't rely on, and
I want to reform it outright.

2 years agoAdd Outputable Report in TcErrors
Simon Peyton Jones [Sun, 25 Sep 2016 14:48:29 +0000 (15:48 +0100)] 
Add Outputable Report in TcErrors

...just for debug output

2 years agoFix a bug in occurs checking
Simon Peyton Jones [Thu, 22 Sep 2016 21:18:22 +0000 (22:18 +0100)] 
Fix a bug in occurs checking

1. Trac #12593 exposed a long-standing bug in the occurs
   checking machinery.  When unifying two type variables
          a ~ b
   where a /= b, we were assuming that there could be
   no occurs-check error.  But there can: 'a' can occur
   in b's kind!  When the RHS was a non-tyvar we used
   occurCheckExpand, which /did/ look in kinds, but not
   when the RHS was a tyvar.

   This bug has been lurking ever since TypeInType, maybe
   longer.  And it was present both in TcUnify (the on-the-fly
   unifier), and in TcInteract.

   I ended up refactoring both so that the tyvar/tyvar
   path naturally goes through the same occurs-check as
   non-tyvar rhss.  It's simpler and more robust now.

   One good thing is that both unifiers now share
   previously they had different logic for the same goals

2. Fixing this bug exposed another!  In T11635 we end
   up unifying
   (alpha :: forall k. k->*) ~ (beta :: forall k. k->*)
   Now that the occurs check is done for tyvars too, we
   look inside beta's kind.  And then reject the program
   becuase of the forall inside there.  But in fact that
   forall is fine -- it does not count as impredicative
   polymoprhism.   See Note [Checking for foralls]
   in TcType.

3. All this fuss around occurrence checking forced me
   to look at TcUnify.checkTauTvUpdate
          and TcType.occurCheckExpand
   There's a lot of duplication there, and I managed
   to elminate quite a bit of it. For example,
   checkTauTvUpdate called a local 'defer_me'; and then
   called occurCheckExpand, which then used a very
   similar 'fast_check'.

   Things are better, but there is more to do.

2 years agoFix desugaring of pattern bindings (again)
Simon Peyton Jones [Fri, 16 Sep 2016 21:33:20 +0000 (22:33 +0100)] 
Fix desugaring of pattern bindings (again)

This patch fixes Trac #12595.  The problem was with a
pattern binding like
     !x = e
For a start it's silly to match that pattern and build
a unit tuple (the General Case of mkSelectorBinds); but
that's what was happening because the bang fell through
to the general case.  But for a variable pattern building
any auxiliary bindings is stupid.  So the patch
introduces a new case in mkSelectorBinds for variable

Then it turned out that if 'e' was a plain variable, and
moreover was imported GlobalId, then matchSinglePat made
it a /bound/ variable, which should never happen.  That
ultimately caused a linker error, but the original bug
was much earlier.

2 years agoA bit of tracing about flattening
Simon Peyton Jones [Sat, 24 Sep 2016 03:42:18 +0000 (04:42 +0100)] 
A bit of tracing about flattening

2 years agoCheck.hs: Use actual import lists instead of comments
Ömer Sinan Ağacan [Thu, 29 Sep 2016 15:03:24 +0000 (11:03 -0400)] 
Check.hs: Use actual import lists instead of comments

2 years agoTest Trac #12634
Simon Peyton Jones [Thu, 29 Sep 2016 08:23:11 +0000 (09:23 +0100)] 
Test Trac #12634

2 years agoComments and manual only: spelling
Gabor Greif [Wed, 28 Sep 2016 13:28:38 +0000 (15:28 +0200)] 
Comments and manual only: spelling

2 years agoTH: Use atomicModifyIORef' for fresh names
Erik de Castro Lopo [Tue, 27 Sep 2016 21:37:33 +0000 (07:37 +1000)] 
TH: Use atomicModifyIORef' for fresh names

This prevents the possibility of race conditions when creating fresh

Test Plan: validate

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

2 years agoFix layout of MultiWayIf expressions (#10807)
Ömer Sinan Ağacan [Mon, 26 Sep 2016 21:09:01 +0000 (17:09 -0400)] 
Fix layout of MultiWayIf expressions (#10807)

With this patch we stop generating virtual semicolons in MultiWayIf
guards. Fixes #10807.

Test Plan:

Reviewers: simonmar, austin, bgamari

Reviewed By: simonmar

Subscribers: mpickering, thomie

Differential Revision:

GHC Trac Issues: #10807

2 years agoRemove #ifdef with never fulfilled condition
Joachim Breitner [Mon, 26 Sep 2016 17:49:42 +0000 (13:49 -0400)] 
Remove #ifdef with never fulfilled condition

__GLASGOW_HASKELL is a typo (should be __GLASGOW_HASKELL__), obviously,
but nobody noticed.

2 years agoPrint foralls in user format
Simon Peyton Jones [Mon, 26 Sep 2016 07:37:47 +0000 (08:37 +0100)] 
Print foralls in user format

This fixes Trac #12597: in RnNames.warnMissingSignatures,
use pprSigmaType not pprType