3 years agoProvide Uniquable version of SCC
Bartosz Nitka [Tue, 14 Jun 2016 10:28:30 +0000 (03:28 -0700)] 
Provide Uniquable version of SCC

We want to remove the `Ord Unique` instance because there's
no way to implement it in deterministic way and it's too
easy to use by accident.

We sometimes compute SCC for datatypes whose Ord instance
is implemented in terms of Unique. The Ord constraint on
SCC is just an artifact of some internal data structures.
We can have an alternative implementation with a data
structure that uses Uniquable instead.

This does exactly that and I'm pleased that I didn't have
to introduce any duplication to do that.

Test Plan:
I looked at performance tests and it's a tiny bit better.

Reviewers: bgamari, simonmar, ezyang, austin, goldfire

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoHave Core linter accept programs using StaticPointers and -fhpc.
Facundo Domínguez [Wed, 22 Jun 2016 17:09:57 +0000 (14:09 -0300)] 
Have Core linter accept programs using StaticPointers and -fhpc.

This patch uses collectArgsTicks instead of collectArgs to test that
StaticPtr only occurs at the top of RHSs of top-level expressions.

Ticks introduced by -fhpc would interfere otherwise.

Test Plan: ./validate

Reviewers: thomie, austin, goldfire, bgamari, simonpj

Reviewed By: simonpj

Differential Revision:

GHC Trac Issues: #12207

3 years agoNarrow the use of record wildcards slightly
Simon Peyton Jones [Thu, 23 Jun 2016 08:02:00 +0000 (09:02 +0100)] 
Narrow the use of record wildcards slightly

In reviewing the fix to Trac #12130 I found the wild-card
fill-in code for ".." notation in record constructions hard
to understand.  It went to great contortions (including the
find_tycon code) to allow
    data T = C { x, y :: Int }
    f x = C { .. }
to expand to
    f x = C { x = x, y = y }
where 'y' is an /imported function/!  That seems way over the top
for what record wildcards are supposed to do.

So I have narrowed the record-wildcard expansion to include only
/locally-bound/ variables; i.e. not top level, and certainly not

I don't think anyone is using record wildcards in this bizarre way, so
I don't expect any fallout. Even if there is, you can easily
initialise fields with eponymous but imported values by hand.

An intermediate position would be to allow /local/ top-level
definitions.  But I doubt anyone is doing that either.

Let's see if there's any fallout.  It's a local change, easy to
revert, so I've just gone ahead to save everyone's time.

3 years agoNarrow the warning for simplifiable constraints
Simon Peyton Jones [Thu, 23 Jun 2016 07:50:45 +0000 (08:50 +0100)] 
Narrow the warning for simplifiable constraints

In Trac #11948 I added the warning
which warns if the class constraints in a type signature are

But in fact the fragility it warns about only happens with
NoMonoLocalBinds, so this patch switches off the warning if
you have MonoLocalBinds (and suggests using it in the error

See Note [Simplifiable given constraints] in TcValidity.

3 years agoRemove unused import
Simon Peyton Jones [Thu, 23 Jun 2016 07:49:28 +0000 (08:49 +0100)] 
Remove unused import

3 years agoGive lookupGRE_Name a better API
Simon Peyton Jones [Thu, 23 Jun 2016 07:47:31 +0000 (08:47 +0100)] 
Give lookupGRE_Name a better API

lookupGRE_Name should return either zero or one GREs, never
several. This is a consequence of INVARIANT 1 on GlobalRdrEnv.

So it's better if it returns a Maybe; the panic on multiple results
is put in one place, instead of being scattered or ignored.

Just refactoring, no change in behaviour

3 years agoTest Trac #12163
Simon Peyton Jones [Wed, 22 Jun 2016 21:28:55 +0000 (22:28 +0100)] 
Test Trac #12163

3 years agoExpand given superclasses more eagerly
Simon Peyton Jones [Wed, 22 Jun 2016 13:17:58 +0000 (14:17 +0100)] 
Expand given superclasses more eagerly

This patch fixes Trac #12175, another delicate corner case of
Note [Instance and Given overlap] in TcInteract.

In #12175 we were not expanding given superclasses eagerly
enough. It was easy to fix, and is actually rather neater than

See Note [Eagerly expand given superclasses] in TcCanonical.
The main change is to move the eager expansion of given superclasses
to canClassNC.

3 years agoRemove unused arg to tcSuperClasses
Simon Peyton Jones [Wed, 22 Jun 2016 13:12:08 +0000 (14:12 +0100)] 
Remove unused arg to tcSuperClasses

We don't need the FamInstEnvs argument any more.
Just a tiny refactor.

3 years agoImprove error message in deriving( Functor )
Simon Peyton Jones [Wed, 22 Jun 2016 13:10:53 +0000 (14:10 +0100)] 
Improve error message in deriving( Functor )

Fixes Trac #12163.  Pretty simple.

3 years agoComments only
Simon Peyton Jones [Wed, 22 Jun 2016 13:09:11 +0000 (14:09 +0100)] 
Comments only

3 years agoAccept new (lower) allocations for T7257
Simon Marlow [Wed, 22 Jun 2016 19:54:59 +0000 (20:54 +0100)] 
Accept new (lower) allocations for T7257

3 years agoMake the Ord Module independent of Unique order (2nd try)
Bartosz Nitka [Thu, 9 Jun 2016 15:50:32 +0000 (08:50 -0700)] 
Make the Ord Module independent of Unique order (2nd try)

The `Ord Module` instance currently uses `Unique`s for comparison.
We don't want to use the `Unique` order because it can introduce
This switches `Ord ModuleName` and `Ord UnitId` to use lexicographic
ordering making `Ord Module` deterministic transitively.

I've run `nofib` and it doesn't make a measurable difference.

See also Note [ModuleEnv determinism and performance].

This fixes #12191 - the regression, that the previous version of this
patch had.

Test Plan:
run nofib: P112

Reviewers: simonmar, bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012, #12191

3 years agoDon't error on GCC inlining warning in rts
Bartosz Nitka [Wed, 22 Jun 2016 13:22:45 +0000 (06:22 -0700)] 
Don't error on GCC inlining warning in rts

The warning for reference:
rts/RaiseAsync.c: In function ‘throwToMsg’:

rts/SMPClosureOps.h:65:0: error:
     error: inlining failed in call to ‘lockClosure’: call is unlikely
and code size would grow

rts/RaiseAsync.c:305:0: error:  error: called from here

rts/SMPClosureOps.h:65:0: error:
     error: inlining failed in call to ‘lockClosure’: call is unlikely
and code size would grow

This warning triggers on `gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-16)`
and it doesn't trigger with new GCCs.

Test Plan: build ghc/rts

Reviewers: bgamari, simonmar, austin

Subscribers: thomie

Differential Revision:

3 years agoMore typos in comments [skip ci]
Gabor Greif [Tue, 21 Jun 2016 14:16:20 +0000 (16:16 +0200)] 
More typos in comments [skip ci]

3 years agoTypos in comments [skip ci]
Gabor Greif [Tue, 21 Jun 2016 14:11:10 +0000 (16:11 +0200)] 
Typos in comments [skip ci]

3 years agoHopefully fix all the rebase-induced breakage
Simon Marlow [Wed, 22 Jun 2016 09:32:12 +0000 (10:32 +0100)] 
Hopefully fix all the rebase-induced breakage

3 years agoFix build breakage due to rebase
Simon Marlow [Wed, 22 Jun 2016 09:19:42 +0000 (10:19 +0100)] 
Fix build breakage due to rebase

3 years agoSecond attempt to fix sizeExpr
Simon Marlow [Fri, 17 Jun 2016 10:21:52 +0000 (11:21 +0100)] 
Second attempt to fix sizeExpr

* sizeExpr was calculating expressions like ((e `cast` T) x) wrongly
* Fixing it caused regressions in compile performance, and one nofib
  program (k-nucleotide)

I managed to fix the source of the compiler regressions.  I think it was
due to traceTc not being inlined, which I fixed in a more robust way by
putting an export list on TcRnMonad.

The k-nucleotide regression is more difficult.  I don't think anything
is actually going wrong, but this program has been highly tuned and is
quite sensitive to changing in inlining behaviour.  I managed to recover
most of the performance by manual lambda-lifting which makes it a bit
less fragile, but the end result was a bit slower.  I don't think this
is disastrous, the program is pretty horrible to begin with and we could
probably make a faster one by starting from scratch.

Test Plan: validate, nofib

Reviewers: simonpj, bgamari, niteria, austin, erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11564

3 years agoMake checkFamInstConsistency less expensive
Bartosz Nitka [Tue, 21 Jun 2016 22:54:00 +0000 (15:54 -0700)] 
Make checkFamInstConsistency less expensive

Doing canonicalization on every comparison turned
out to be very expensive.

Caching the canonicalization through the smart `modulePair` constructor
gives `8%` reduction in allocations on `haddock.compiler` and
`8.5%` reduction in allocations on `haddock.Cabal`.
Possibly other things as well, but it's really visible in Haddock.

Test Plan: ./validate

Reviewers: jstolarek, simonpj, austin, simonmar, bgamari

Reviewed By: simonpj, simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12191

3 years agoDelete commented-out code
Simon Peyton Jones [Mon, 20 Jun 2016 14:50:53 +0000 (15:50 +0100)] 
Delete commented-out code

Richard: in a previous commit I combined the two case for


This commit just deletes the old code. I'm afraid it'll leave you
with a merge conflict though, with your stuff on generalisation.

3 years agoDon't quantify over Refl in a RULE
Simon Peyton Jones [Mon, 20 Jun 2016 14:48:09 +0000 (15:48 +0100)] 
Don't quantify over Refl in a RULE

This fixes Trac #12212.  It's quite hard to provoke, but I've
added a standalone test case that does so.

The issue is explained in Note [Evidence foralls] in Specialise.

3 years agoTypos in comments
Gabor Greif [Tue, 21 Jun 2016 10:31:55 +0000 (12:31 +0200)] 
Typos in comments

3 years agoExpand and clarify the docs for ApplicativeDo (#11835)
Simon Marlow [Mon, 20 Jun 2016 14:30:34 +0000 (15:30 +0100)] 
Expand and clarify the docs for ApplicativeDo (#11835)

3 years agoTestsuite: assume timeout_prog always exists
Thomas Miedema [Mon, 20 Jun 2016 11:07:19 +0000 (13:07 +0200)] 
Testsuite: assume timeout_prog always exists

Merge the following functions into one:
  * rawSystem
  * rawSystemWithTimeout
  * runCmd
  * runCmdFor
  * runCmdExitCode

I don't know why this wasn't done before.

3 years agoTestsuite: delete dead code + cleanup
Thomas Miedema [Sat, 18 Jun 2016 16:58:02 +0000 (18:58 +0200)] 
Testsuite: delete dead code + cleanup

* Set config settings directly in mk/, instead of indirectly in
* passing --hpcdir for WAY=hpc is unnecessary

3 years agoTestsuite: remove `-Wno-warn-tabs` from default flags
Thomas Miedema [Sat, 18 Jun 2016 21:28:26 +0000 (23:28 +0200)] 
Testsuite: remove `-Wno-warn-tabs` from default flags

This allows the removal of the override_flags stuff in

3 years agoTestsuite: delete TEST_HC_OPTS_NO_RECOMP
Thomas Miedema [Sat, 18 Jun 2016 17:45:22 +0000 (19:45 +0200)] 
Testsuite: delete TEST_HC_OPTS_NO_RECOMP

The previous commits removed `-fforce-recomp` from TEST_HC_OPTS, so

3 years agoTestsuite: remove `-fforce-recomp` from default flags (#11980)
Thomas Miedema [Sat, 18 Jun 2016 17:00:15 +0000 (19:00 +0200)] 
Testsuite: remove `-fforce-recomp` from default flags (#11980)

There is no need for this flag anymore, since each test runs in a
newly created directory. Removing it cleans up a bit.

There is a small risk that this renders some tests useless. It's hard to
know. Those tests should have specified -fforce-recomp` explicitly
anyway, so I'm not going to worry about it. I've fixed the ones that
failed without -fforce-recomp.

Reviewed by: bgamari

Differential Revision:

3 years agoTestsuite: mark tests expect broken
Thomas Miedema [Sun, 19 Jun 2016 11:03:47 +0000 (13:03 +0200)] 
Testsuite: mark tests expect broken

* CgStaticPointers, GcStaticPointers, ListStaticPointers,
  TcStaticPointers01, TcStaticPointers02:  #12207
* T11535: #12210
* ffi017/ffi021: #12209
* T11108: #11108
* T9646: #9646

3 years agoTestsuite: *do* replace backslashes in config.libdir
Thomas Miedema [Sun, 19 Jun 2016 22:54:38 +0000 (00:54 +0200)] 
Testsuite: *do* replace backslashes in config.libdir

See `Note [Replacing backward slashes in config.libdir]`

There is one caveat: in ae4acbd1ba4168b867a1b5fe8de50c0199dfc1f4
I mentioned:

  > Changing backwards slashes to forward slashes apparently confuses
  > msys2/mingw magic path handling.

I can not reproduce that problem anymore, however.

This patch validates for me, and fixes all tests that use config.libdir
for WAY=ghci. We'll see how it goes.

3 years agoTestsuite: fix WAY=ghci when LOCAL=0
Thomas Miedema [Sun, 19 Jun 2016 12:58:46 +0000 (14:58 +0200)] 
Testsuite: fix WAY=ghci when LOCAL=0

3 years agoTestsuite: recover from utf8 decoding errors
Thomas Miedema [Mon, 20 Jun 2016 08:30:12 +0000 (10:30 +0200)] 
Testsuite: recover from utf8 decoding errors

3 years agoTestsuite: tabs -> spaces [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:44:19 +0000 (22:44 +0200)] 
Testsuite: tabs -> spaces [skip ci]

3 years agoTestsuite: tabs -> spaces [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:44:19 +0000 (22:44 +0200)] 
Testsuite: tabs -> spaces [skip ci]

3 years agoTestsuite: tabs -> spaces [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:44:19 +0000 (22:44 +0200)] 
Testsuite: tabs -> spaces [skip ci]

3 years agoTestsuite: tabs -> spaces [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:44:19 +0000 (22:44 +0200)] 
Testsuite: tabs -> spaces [skip ci]

3 years agoTestsuite: tabs -> spaces [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:44:19 +0000 (22:44 +0200)] 
Testsuite: tabs -> spaces [skip ci]

3 years agoTestsuite: tabs -> spaces [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:44:19 +0000 (22:44 +0200)] 
Testsuite: tabs -> spaces [skip ci]

3 years agoTestsuite: remove Windows CR [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:08:53 +0000 (22:08 +0200)] 
Testsuite: remove Windows CR [skip ci]

3 years agoTestsuite: remove Windows CR [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:07:49 +0000 (22:07 +0200)] 
Testsuite: remove Windows CR [skip ci]

3 years agoTestsuite: remove Windows CR again.. [skip ci]
Thomas Miedema [Sat, 18 Jun 2016 20:05:51 +0000 (22:05 +0200)] 
Testsuite: remove Windows CR again.. [skip ci]

3 years agoFix double-free in T5644 (#12208)
Simon Marlow [Mon, 20 Jun 2016 12:33:13 +0000 (13:33 +0100)] 
Fix double-free in T5644 (#12208)

3 years agoApplicativeDo: allow "return $ e"
Simon Marlow [Sat, 18 Jun 2016 13:51:04 +0000 (14:51 +0100)] 
ApplicativeDo: allow "return $ e"

There's a precedent for special-casing $, as we already have special
typing rules for it.

Test Plan: validate; new test cases

Reviewers: ezyang, austin, niteria, bgamari, simonpj, erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11835

3 years agoRemove use of KProxy in GHC.Generics
Ryan Scott [Mon, 20 Jun 2016 13:25:55 +0000 (09:25 -0400)] 
Remove use of KProxy in GHC.Generics

With `-XTypeInType`, the singletons machinery that `GHC.Generics` uses
no longer needs `KProxy` to hack around the use of `k` as both a type
and a kind. This is simply changing the code to match what's currently
in the upstream `singletons` repo.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie, goldfire

Differential Revision:

3 years agollvmGen: Add strictness to metadata fields
Ben Gamari [Sat, 18 Jun 2016 10:57:29 +0000 (12:57 +0200)] 
llvmGen: Add strictness to metadata fields

3 years agoPPC NCG: Fix and refactor TOC handling.
Peter Trommler [Sat, 18 Jun 2016 10:29:12 +0000 (12:29 +0200)] 
PPC NCG: Fix and refactor TOC handling.

In a call to a fixed function the TOC does not need to be saved.
The linker handles TOC saving.

Refactor TOC handling by folding the two functions toc_before and
toc_after into the code generating the call sequence. This saves
repeating the case distinction in those two functions.

Test Plan: validate on PowerPC 32-bit Linux and AIX

Reviewers: hvr, simonmar, austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoPPC NCG: Fix float parameter passing on 64-bit.
Peter Trommler [Sat, 18 Jun 2016 10:28:41 +0000 (12:28 +0200)] 
PPC NCG: Fix float parameter passing on 64-bit.

On Linux 64-bit PowerPC the first 13 floating point parameters are
passed in registers. We only passed the first 8 floating point params.

The alignment of a floating point single precision value in ELF v1.9 is
the second word of a doubleword. For ELF v2 we support only little
endian and the least significant word of a doubleword is the first word,
so no special handling is required.

Add a regression test.

Test Plan: validate on powerpc Linux and AIX

Reviewers: erikd, hvr, austin, simonmar, bgamari

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12134

3 years agoFix trac #10647: Notice about lack of SIMD support
Seraphime Kirkovski [Sat, 18 Jun 2016 10:28:19 +0000 (12:28 +0200)] 
Fix trac #10647: Notice about lack of SIMD support

Fixes #10647. Changes the error message when a SIMD size
variable is required in the native code generation backend.

Test Plan:
Try compiling the test case given in the ticket :

{-# LANGUAGE MagicHash #-}
module Foo where
import GHC.Prim
data V = V Int8X16#

GHC should give a clearer error message

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10647

3 years agoAvoid find_tycon panic if datacon is not in scope
Adam Gundry [Sat, 18 Jun 2016 10:27:47 +0000 (12:27 +0200)] 
Avoid find_tycon panic if datacon is not in scope

When using TH to splice expressions involving record field construction,
the parent datacon may not be in scope.  We shouldn't panic about this,
because we will be renaming Exact RdrNames which don't require any

Test Plan: new test th/T12130

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12130

3 years agoRefactor derived Generic instances to reduce allocations
Ryan Scott [Sat, 18 Jun 2016 10:23:12 +0000 (12:23 +0200)] 
Refactor derived Generic instances to reduce allocations

Previously, derived implementations of `to`/`from` in `Generic`
instances were wastefully putting extra `M1`s in every case, which led
to an O(n) increase in the number of coercions, resulting in a slowdown
during the typechecker phase.

This factors out the common `M1` in every case of a `to`/`from`
definition so that the typechecker has far fewer coercions to deal with.
For a datatype with 300 constructors, this change has been observed to
save almost 3 seconds of compilation time.

This is one step towards coming up with a solution for #5642.

Test Plan: ./validate

Reviewers: hvr, austin, simonpj, bgamari

Reviewed By: bgamari

Subscribers: basvandijk, carter, thomie, osa1

Differential Revision:

GHC Trac Issues: #5642

3 years agoAdd Bifoldable and Bitraversable to base
Ryan Scott [Sat, 18 Jun 2016 10:17:24 +0000 (12:17 +0200)] 
Add Bifoldable and Bitraversable to base

This adds `Data.Bifoldable` and `Data.Bitraversable` from the
`bifunctors` package to `base`, completing the migration started in
D336.  This is fairly straightforward, although there were a suprising
amount of reinternal organization in `base` that was needed for this to

* `Data.Foldable`, `Data.Traversable`, `Data.Bifoldable`, and
  `Data.Bitraversable` share some nonexported datatypes (e.g., `StateL`,
  `StateR`, `Min`, `Max`, etc.) to implement some instances. To avoid
  code duplication, I migrated this internal code to a new hidden
  module, `Data.Functor.Utils` (better naming suggestions welcome).

* `Data.Traversable` and `Data.Bitraversable` also make use of an
  identity newtype, so I modified them to use
  `Data.Functor.Identity.Identity`. This has a ripple effect on several
  other modules, since I had to move instances around in order to avoid
  dependency cycles.

Fixes #10448.

Reviewers: ekmett, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9682, #10448

3 years agoVarEnv: Comment only
Ömer Sinan Ağacan [Sat, 18 Jun 2016 16:10:19 +0000 (16:10 +0000)] 
VarEnv: Comment only

3 years agoValidate: use `rm -f` instead of `rm`
Thomas Miedema [Sat, 18 Jun 2016 11:36:41 +0000 (13:36 +0200)] 
Validate: use `rm -f` instead of `rm`

3 years agoTestsuite: validate the tests/stage1 directory with the stage1 compiler
Thomas Miedema [Thu, 16 Jun 2016 17:45:57 +0000 (19:45 +0200)] 
Testsuite: validate the tests/stage1 directory with the stage1 compiler

* See `Note [Why is there no stage1 setup function?]`.
* Move T2632 to the tests/stage1 directory (#10382).

Reviewed by: ezyang, nomeata, bgamari

Differential Revision:

GHC Trac Issues: #12197

3 years agoTestsuite: write "\n" instead of "\r\n" when using mingw Python
Thomas Miedema [Fri, 17 Jun 2016 13:23:34 +0000 (15:23 +0200)] 
Testsuite: write "\n" instead of "\r\n" when using mingw Python

Mingw style Python uses '\r\n' by default for newlines. This is
annoying, because it means that when a GHC developer on Windows uses
mingw Python to `make accept` a test, every single line of the
.stderr file is touched. This makes it difficult to spot the real
changes, and it leads to unnecessary git history bloat.

Prevent this from happening by using instead of open.
See `Note [Universal newlines]`

Reviewed by: Phyx

Differential Revision:

3 years agoTestsuite: run tests in <testdir>.run instead of /tmp
Thomas Miedema [Wed, 15 Jun 2016 14:57:05 +0000 (16:57 +0200)] 
Testsuite: run tests in <testdir>.run instead of /tmp

As discussed in Phab:D1187, this approach makes it a bit easier to
inspect the test directory while working on a new test.

The only tests that needed changes are the ones that refer to files in
ancestor directories. Those files are now copied directly into the test

validate still runs the tests in a temporary directory in /tmp, see
`Note [Running tests in /tmp]` in testsuite/driver/

Update submodule hpc.

Reviewed by: simonmar

Differential Revision:

GHC Trac Issues: #11980

3 years agoDriver: `ghc ../Test` (without file extension) should work
Thomas Miedema [Mon, 13 Jun 2016 22:10:19 +0000 (00:10 +0200)] 
Driver: `ghc ../Test` (without file extension) should work

Reviewed by: bgamari

Differential Revision:

GHC Trac Issues: #12192

3 years agoRevert accidental submodule updates
Thomas Miedema [Fri, 17 Jun 2016 15:37:37 +0000 (17:37 +0200)] 
Revert accidental submodule updates

Commit 77bb09270c70455bbd547470c4e995707d19f37d seems to have
accidentally set some submodules to earlier versions. Undo this.

3 years agollvmGen: Consolidate MetaExpr pretty-printing
Ben Gamari [Fri, 17 Jun 2016 21:52:39 +0000 (23:52 +0200)] 
llvmGen: Consolidate MetaExpr pretty-printing

Previously this logic was duplicated needlessly.

3 years agollvmGen: Make metadata ids a newtype
Ben Gamari [Fri, 17 Jun 2016 20:57:38 +0000 (22:57 +0200)] 
llvmGen: Make metadata ids a newtype

These were previously just represented as Ints which was needlessly

3 years agoCmmNode: Make CmmTickScope's Unique strict
Ben Gamari [Fri, 17 Jun 2016 19:29:56 +0000 (21:29 +0200)] 
CmmNode: Make CmmTickScope's Unique strict

There is no reason why we need laziness here and making it strict
enables unpacking.

3 years agoCoreLint: Slightly improve case type annotation error msgs
Ömer Sinan Ağacan [Fri, 17 Jun 2016 21:23:15 +0000 (21:23 +0000)] 
CoreLint: Slightly improve case type annotation error msgs

3 years agoNUMA cleanups
Simon Marlow [Sat, 11 Jun 2016 10:07:14 +0000 (11:07 +0100)] 
NUMA cleanups

- Move the numaMap and nNumaNodes out of RtsFlags to Capability.c
- Add a test to tests/rts

3 years agoRemove dead code: countOnce, countMany
Joachim Breitner [Mon, 2 May 2016 10:34:25 +0000 (12:34 +0200)] 
Remove dead code: countOnce, countMany

and export Count abstractly (the constructors are not used anywhere).

3 years agoAbort the build when a Core plugin pass is specified in stage1 compiler
Ömer Sinan Ağacan [Fri, 17 Jun 2016 07:54:28 +0000 (07:54 +0000)] 
Abort the build when a Core plugin pass is specified in stage1 compiler

This also makes the behavior the same with frontend plugin errors --
frontend was failing with an exception (`CmdLineError`) while the
simplifier was just ignoring plugins. Now we abort with `CmdLineError`
in both cases with a slightly improved error message.

Test Plan:
- add tests (will add tests once #12197 is implemented)
- validate (done)

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11690

3 years agoCoreMonad: Update error msg function docs
Ömer Sinan Ağacan [Thu, 16 Jun 2016 08:51:55 +0000 (08:51 +0000)] 
CoreMonad: Update error msg function docs

3 years agoMajor patch to introduce TyConBinder
Simon Peyton Jones [Wed, 15 Jun 2016 12:27:12 +0000 (13:27 +0100)] 
Major patch to introduce TyConBinder

Before this patch, following the TypeInType innovations,
each TyCon had two lists:
  - tyConBinders :: [TyBinder]
  - tyConTyVars  :: [TyVar]

They were in 1-1 correspondence and contained
overlapping information.  More broadly, there were many
places where we had to pass around this pair of lists,
instead of a single list.

This commit tidies all that up, by having just one list of
binders in a TyCon:

  - tyConBinders :: [TyConBinder]

The new data types look like this:

     data TyVarBndr tyvar vis = TvBndr tyvar vis
     data VisibilityFlag = Visible | Specified | Invisible
     type TyVarBinder = TyVarBndr TyVar VisibilityFlag

     type TyConBinder = TyVarBndr TyVar TyConBndrVis

     data TyConBndrVis
       = NamedTCB VisibilityFlag
       | AnonTCB

     data TyBinder
       = Named TyVarBinder
       | Anon Type

Note that Var.TyVarBdr has moved from TyCoRep and has been
made polymorphic in the tyvar and visiblity fields:

     type TyVarBinder = TyVarBndr TyVar VisibilityFlag
        -- Used in ForAllTy
     type TyConBinder = TyVarBndr TyVar TyConBndrVis
        -- Used in TyCon

     type IfaceForAllBndr  = TyVarBndr IfaceTvBndr VisibilityFlag
     type IfaceTyConBinder = TyVarBndr IfaceTvBndr TyConBndrVis
         -- Ditto, in interface files

There are a zillion knock-on changes, but everything
arises from these types.  It was a bit fiddly to get the
module loops to work out right!

Some smaller points
* Nice new functions
  which help you make the tyvar binders for dependently-typed
  TyCons.  See comments with their definition.

* The change showed up a bug in TcGenGenerics.tc_mkRepTy, where the code
  was making an assumption about the order of the kind variables in the
  kind of GHC.Generics.(:.:).  I fixed this; see TcGenGenerics.mkComp.

3 years agoRe-add FunTy (big patch)
Simon Peyton Jones [Fri, 27 May 2016 14:26:46 +0000 (15:26 +0100)] 
Re-add FunTy (big patch)

With TypeInType Richard combined ForAllTy and FunTy, but that was often
awkward, and yielded little benefit becuase in practice the two were
always treated separately.  This patch re-introduces FunTy.  Specfically

* New type
    data TyVarBinder = TvBndr TyVar VisibilityFlag
  This /always/ has a TyVar it.  In many places that's just what
  what we want, so there are /lots/ of TyBinder -> TyVarBinder changes

* TyBinder still exists:
    data TyBinder = Named TyVarBinder | Anon Type

* data Type = ForAllTy TyVarBinder Type
            | FunTy Type Type
            |  ....

There are a LOT of knock-on changes, but they are all routine.

The Haddock submodule needs to be updated too

3 years agoFix testsuite wibble
Simon Peyton Jones [Wed, 15 Jun 2016 12:33:57 +0000 (13:33 +0100)] 
Fix testsuite wibble typecheck/should_run/T7861

Was concealed behind the haddock perf noise

3 years agoRevert "Make the Ord Module independent of Unique order"
Simon Peyton Jones [Wed, 15 Jun 2016 07:44:11 +0000 (08:44 +0100)] 
Revert "Make the Ord Module independent of Unique order"

This reverts commit 0497ee504cc9ac5d6babee9b98bf779b3fc50b98.

Reason: See Trac #12191.  I'm reverting pending Bartosz's
investigation of what went wrong.

3 years agoSimplify readProcessEnvWithExitCode + set LANGUAGE=C
Thomas Miedema [Sat, 11 Jun 2016 08:43:59 +0000 (10:43 +0200)] 
Simplify readProcessEnvWithExitCode + set LANGUAGE=C

`readProcessEnvWithExitCode` was added in
4d4d07704ee78221607a18b8118294b0aea1bac4, to start an external process
after making some modifications to the environment.

Since then, the `process` library has exposed
`readCreateProcessWithExitCode`, which allows for the refactoring we do

Also change "en" to "C", as suggested in ticket:8825#comment:11.

Reviewed by: trofi

Differential Revision:

GHC Trac Issues: #8825

3 years agoRename cmpType to nonDetCmpType
Bartosz Nitka [Tue, 14 Jun 2016 15:59:07 +0000 (08:59 -0700)] 
Rename cmpType to nonDetCmpType

This makes it obvious that it's nondeterministic and hopefully
will prevent someone from using it accidentally.

GHC Trac: #4012

3 years agoDon't GC sparks for CAFs
Simon Marlow [Fri, 10 Jun 2016 16:07:13 +0000 (17:07 +0100)] 
Don't GC sparks for CAFs

We can't tell whether the CAF is actually garbage or not.

3 years agoTestsuite: enable ghci.prog010 (#2542)
Thomas Miedema [Mon, 13 Jun 2016 12:48:24 +0000 (14:48 +0200)] 
Testsuite: enable ghci.prog010 (#2542)

This test didn't have a `.T` file, so the testsuite driver never ran it.
Luckily the features it tested for didn't break in the past 8 years.

3 years agoBuild system: mention ghc version in bindist's `configure --help` docdir
Thomas Miedema [Tue, 14 Jun 2016 10:32:37 +0000 (12:32 +0200)] 
Build system: mention ghc version in bindist's `configure --help` docdir

This is a follow up to a74a3846c84ad55de3deeed8b2401a2ed514b2e1
, which made the same change but for the toplevel

Reviewed by: erikd

Differential Revision:

GHC Trac Issues: #11659

3 years agoAdjust error message slightly
Simon Peyton Jones [Tue, 14 Jun 2016 06:55:01 +0000 (07:55 +0100)] 
Adjust error message slightly

3 years agoUpdate Haddock to follow change in LHsSigWcType
Simon Peyton Jones [Mon, 13 Jun 2016 17:28:30 +0000 (18:28 +0100)] 
Update Haddock to follow change in LHsSigWcType

Update submodule to accompany this commit:

    commit 15b9bf4ba4ab47e6809bf2b3b36ec16e502aea72
    Author: Simon Peyton Jones <>
    Date:   Sat Jun 11 23:49:27 2016 +0100

        Improve typechecking of let-bindings

Sorry it's late!

3 years agoMake the Ord Module independent of Unique order
Bartosz Nitka [Thu, 9 Jun 2016 15:50:32 +0000 (08:50 -0700)] 
Make the Ord Module independent of Unique order

The `Ord Module` instance currently uses `Unique`s for comparison.
We don't want to use the `Unique` order because it can introduce nondeterminism.
This switches `Ord ModuleName` and `Ord UnitId` to use lexicographic ordering
making `Ord Module` deterministic transitively.

I've run `nofib` and it doesn't make a measurable difference.

See also Note [ModuleEnv determinism and performance].

Test Plan:
run nofib: P112

Reviewers: simonpj, simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoUse UniqFM for SigOf
Bartosz Nitka [Mon, 13 Jun 2016 14:35:32 +0000 (07:35 -0700)] 
Use UniqFM for SigOf

The Ord instance for ModuleName is currently implemented in
terms of Uniques causing potential determinism problems.
I plan to change it to use the actual FastStrings and in
preparation for that I'm switching to UniqFM where it's
possible (you need *one* Unique per key, and you can't get
the keys back), so that the performance doesn't suffer.

Test Plan: ./validate

Reviewers: simonmar, austin, ezyang, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoKill unused foldModuleEnv
Bartosz Nitka [Mon, 13 Jun 2016 11:53:43 +0000 (04:53 -0700)] 
Kill unused foldModuleEnv

With the current implementation, it's nondeterministic
because Ord Module is nondeterministic.

3 years agoAdd thin library support to Windows too
Tamar Christina [Mon, 13 Jun 2016 11:29:17 +0000 (13:29 +0200)] 
Add thin library support to Windows too

Code already existed in the RTS to add thin library support for non-Windows
operating systems. This adds it to Windows as well.

ar thin libraries have the exact same format as normal archives except they
have a different magic string and they don't copy the object files into the

Instead each header entry points to the location of the object file on disk.
This is useful when a library is only created to satisfy a compile time dependency
instead of to be distributed. This saves the time required for copying.

Test Plan: ./validate and new test T11788

Reviewers: austin, bgamari, simonmar, erikd

Reviewed By: bgamari, simonmar

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #11788

3 years agoA second test for Trac #12055
Simon Peyton Jones [Mon, 13 Jun 2016 11:02:54 +0000 (12:02 +0100)] 
A second test for Trac #12055

This one omits the extension, thereby making GHC 8.0 produce
"GHC internal error".

3 years agoTest Trac #12055
Simon Peyton Jones [Mon, 13 Jun 2016 10:56:44 +0000 (11:56 +0100)] 
Test Trac #12055

3 years agoAdd to .gitignore
Simon Peyton Jones [Sun, 12 Jun 2016 21:32:31 +0000 (22:32 +0100)] 
Add to .gitignore

This adds
  *.stackdump    (Windows)
  foo*           (simonpj uses foo* for junk files)

3 years agoRemove some traceTc calls
Simon Peyton Jones [Sun, 12 Jun 2016 21:01:49 +0000 (22:01 +0100)] 
Remove some traceTc calls

During the kind-checking "knot" we have to be careful not
to print too eagerly.

3 years agoBeef up isPredTy
Simon Peyton Jones [Sat, 11 Jun 2016 23:06:31 +0000 (00:06 +0100)] 
Beef up isPredTy

isPredTy can be called on ill-kinded types, especially (of course) if
there is a kind error.  We don't wnat it to crash, but it was, in

This patch introduces piResultTy_maybe, and uses it in isPredTy.

Ugh.  I dislike this code.  It's mainly used to know when we should
print types with '=>', and we should probably have a better way to
signal that.

3 years agoFix the in-scope set for extendTvSubstWithClone
Simon Peyton Jones [Sat, 11 Jun 2016 23:04:30 +0000 (00:04 +0100)] 
Fix the in-scope set for extendTvSubstWithClone

We'd forgotten the variables free in the kind.

Ditto extendCvSubstWithClone

3 years agoBeef up mkNakedCastTy
Simon Peyton Jones [Sat, 11 Jun 2016 23:00:53 +0000 (00:00 +0100)] 
Beef up mkNakedCastTy

By spotting Refl coercions we can avoid building an awful
lot of CastTys.  Simple and effective.

3 years agoMove the constraint-kind validity check
Simon Peyton Jones [Sat, 11 Jun 2016 22:56:42 +0000 (23:56 +0100)] 
Move the constraint-kind validity check

For type synonyms, we need to check that if the RHS has
kind Constraint, then we have -XConstraintKinds.  For
some reason this was done in checkValidType, but it makes
more sense to do it in checkValidTyCon.

I can't remember quite why I made this change; maybe it fixes
a Trac ticket, but if so I forget which.  But it's a modest
improvement anyway.

3 years agoGet in-scope set right in top_instantiate
Simon Peyton Jones [Sat, 11 Jun 2016 22:55:10 +0000 (23:55 +0100)] 
Get in-scope set right in top_instantiate

...thereby being able to replace substThetaUnchecked
with substTheta

3 years agoTidy up zonkQuantifiedTyVar
Simon Peyton Jones [Sat, 11 Jun 2016 22:51:44 +0000 (23:51 +0100)] 
Tidy up zonkQuantifiedTyVar

I managed to eliminate the strange zonkQuantifiedTyVarOrType,
which is no longer used.

3 years agoImprove typechecking of let-bindings
Simon Peyton Jones [Sat, 11 Jun 2016 22:49:27 +0000 (23:49 +0100)] 
Improve typechecking of let-bindings

This major commit was initially triggered by #11339, but it spiraled
into a major review of the way in which type signatures for bindings
are handled, especially partial type signatures.  On the way I fixed a
number of other bugs, namely

The main change is that I completely reorganised the way in which type
signatures in bindings are handled. The new story is in TcSigs
Note [Overview of type signatures].  Some specific:

* Changes in the data types for signatures in TcRnTypes:
  TcIdSigInfo and new TcIdSigInst

* New module TcSigs deals with typechecking type signatures
  and pragmas. It contains code mostly moved from TcBinds,
  which is already too big

* HsTypes: I swapped the nesting of HsWildCardBndrs
  and HsImplicitBndsrs, so that the wildcards are on the
  oustide not the insidde in a LHsSigWcType.  This is just
  a matter of convenient, nothing deep.

There are a host of other changes as knock-on effects, and
it all took FAR longer than I anticipated :-).  But it is
a significant improvement, I think.

Lots of error messages changed slightly, some just variants but
some modest improvements.

New tests

* typecheck/should_compile
    * SigTyVars: a scoped-tyvar test
    * ExPat, ExPatFail: existential pattern bindings
    * T12069
    * T11700
    * T11339

* partial-sigs/should_compile
    * T12033
    * T11339a
    * T11670

One thing to check:

* Small change to output from ghc-api/landmines.
  Need to check with Alan Zimmerman

3 years agoKill off redundant SigTv check in occurCheckExpand
Simon Peyton Jones [Mon, 16 May 2016 21:08:08 +0000 (22:08 +0100)] 
Kill off redundant SigTv check in occurCheckExpand

This patch simply deletes code, the SigTv check in
occurCheckExpand.  As the new comment says

In the past we also rejected a SigTv matched with a non-tyvar
But it is wrong to reject that for Givens;
and SigTv is in any case handled separately by
   - TcUnify.checkTauTvUpdate (on-the-fly unifier)
   - TcInteract.canSolveByUnification (main constraint solver)

3 years agorts: Fix NUMA when cross compiling
Erik de Castro Lopo [Mon, 13 Jun 2016 09:24:18 +0000 (19:24 +1000)] 
rts: Fix NUMA when cross compiling

The NUMA code was enabled whenever numa.h and numaif.h are detected.
Unfortunately, the hosts' header files were being detected even then
cross compiling in the absence of a target libnuma.

Fix that by relying on the the presence of libnuma instead of the
presence of the header files. The test for libnuma does `AC_TRY_LINK`
which will fail if the test program (compiled for the target) can't
be linked against libnuma.

Test Plan:
Build on x86_64/linux and make sure NUMA works and cross compile to

Reviewers: austin, bgamari, hvr, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

3 years agoDisable T12031 on linux
Tamar Christina [Sun, 12 Jun 2016 12:41:18 +0000 (14:41 +0200)] 
Disable T12031 on linux

3 years agoFix incorrect calculated relocations on Windows x86_64
Tamar Christina [Sat, 11 Jun 2016 08:18:19 +0000 (10:18 +0200)] 
Fix incorrect calculated relocations on Windows x86_64

See #12031 for analysis, but essentially what happens is:

To sum up the issue, the reason this seems to go wrong is because
of how we initialize the `.bss` section for Windows in the runtime linker.

The first issue is where we calculate the zero space for the section:

zspace = stgCallocBytes(1, bss_sz, "ocGetNames_PEi386(anonymous bss)");
sectab_i->PointerToRawData = ((UChar*)zspace) - ((UChar*)(oc->image));

UInt32 PointerToRawData;

This means we're stuffing a `64-bit` value into a `32-bit` one. Also `zspace`
can be larger than `oc->image`. In which case it'll overflow and
then get truncated in the cast.

The address of a value in the `.bss` section is then calculated as:

addr = ((UChar*)(oc->image))
     + (sectabent->PointerToRawData
     + symtab_i->Value);

If it does truncate then this calculation won't be correct (which is what is happening).

We then later use the value of `addr` as the `S` (Symbol) value for the relocations

S = (size_t) lookupSymbol_( (char*)symbol );

Now the majority of the relocations are `R_X86_64_PC32` etc.
e.g. They are guaranteed to fit in a `32-bit` value.

The `R_X86_64_64` introduced for these pseudo-relocations so they can use
the full `48-bit` addressing space isn't as lucky.
As for why it sometimes work has to do on whether the value is truncated or not.

`PointerToRawData` can't be changed because it's size is fixed by the PE specification.

Instead just like with the other platforms, we now use `section` on Windows as well.
This gives us a `start` parameter of type `void*` which solves the issue.

This refactors the code to use `section.start` and to fix the issues.

Test Plan: ./validate and new test added T12031

Reviewers: RyanGlScott, erikd, bgamari, austin, simonmar

Reviewed By: simonmar

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12031, #11317

3 years agoSkip retc001 on OSX
Matthew Pickering [Sun, 12 Jun 2016 10:03:43 +0000 (11:03 +0100)] 
Skip retc001 on OSX

See #11204, this test sometimes fails and sometimes passes on OSX
which causes intermittent validate failures if it is run.

3 years agorts: Fix build when USE_LARGE_ADDRESS_SPACE is undefined
Erik de Castro Lopo [Sun, 12 Jun 2016 07:50:39 +0000 (17:50 +1000)] 
rts: Fix build when USE_LARGE_ADDRESS_SPACE is undefined

The recently added NUMA related functions were mistakenly defined
within a `#ifdef USE_LARGE_ADDRESS_SPACE` ... `#endif` block. Moving
them outside this block fixes the build on PowerPC and Arm Linux.

Test Plan: Build on PowerPC or Arm Linux

Reviewers: hvr, austin, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

3 years agoModuleSet: Use an actual set instead of map to units
Ömer Sinan Ağacan [Sat, 11 Jun 2016 14:01:49 +0000 (10:01 -0400)] 
ModuleSet: Use an actual set instead of map to units