3 years agoTrac #11554 fix loopy GADTs
Alexander Vieth [Mon, 20 Jun 2016 07:22:18 +0000 (09:22 +0200)] 
Trac #11554 fix loopy GADTs

Summary: Fixes T11554

Reviewers: goldfire, thomie, simonpj, austin, bgamari

Reviewed By: thomie, simonpj, bgamari

Subscribers: simonpj, goldfire, thomie

Differential Revision:

GHC Trac Issues: #11554

3 years agoUpdates to handle new Cabal
Edward Z. Yang [Mon, 20 Jun 2016 07:02:34 +0000 (09:02 +0200)] 
Updates to handle new Cabal

Specifically per-component macros and multiple libraries.

Contains Cabal submodule update.

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

Reviewers: austin, bgamari

Reviewed By: austin, bgamari

Subscribers: hvr, thomie

Differential Revision:

3 years agoAxe RecFlag on TyCons.
Edward Z. Yang [Fri, 24 Jun 2016 18:03:47 +0000 (11:03 -0700)] 
Axe RecFlag on TyCons.

This commit removes the information about whether or not
a TyCon is "recursive", as well as the code responsible
for calculating this information.

The original trigger for this change was complexity regarding
how we computed the RecFlag for hs-boot files.  The problem
is that in order to determine if a TyCon is recursive or
not, we need to determine if it was defined in an hs-boot
file (if so, we conservatively assume that it is recursive.)

It turns that doing this is quite tricky.  The "obvious"
strategy is to typecheck the hi-boot file (since we are
eventually going to need the typechecked types to check
if we properly implemented the hi-boot file) and just extract
the names of all defined TyCons from the ModDetails, but
this actually does not work well if Names from the hi-boot
file are being knot-tied via if_rec_types: the "extraction"
process will force thunks, which will force the typechecking
process earlier than we have actually defined the types

Rather than work around all this trickiness (it certainly
can be worked around, either by making interface loading
MORE lazy, or just reading of the set of defined TyCons
directly from the ModIface), we instead opted to excise
the source of the problem, the RecFlag.

For one, it is not clear if the RecFlag even makes sense,
in the presence of higher-orderness:

    data T f a = MkT (f a)

T doesn't look recursive, but if we instantiate f with T,
then it very well is!  It was all very shaky.

So we just don't bother anymore.  This has two user-visible

1. is_too_recursive now assumes that all TyCons are
recursive and will bail out in a way that is still mysterious
to me if there are too many TyCons.

2. checkRecTc, which is used when stripping newtypes to
get to representation, also assumes all TyCons are
recursive, and will stop running if we hit the limit.

The biggest risk for this patch is that we specialize less
than we used to; however, the codeGen tests still seem to
be passing.

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

Subscribers: goldfire, thomie

Differential Revision:

3 years agoRemove ufmToList
Bartosz Nitka [Thu, 30 Jun 2016 15:20:41 +0000 (08:20 -0700)] 
Remove ufmToList

This documents nondeterminism in code generation and removes
the nondeterministic ufmToList function. In the future someone
will have to use nonDetUFMToList (with proper explanation)
or pprUFMWithKeys.

3 years agoReorganize some determinism tests
Bartosz Nitka [Thu, 30 Jun 2016 14:18:22 +0000 (07:18 -0700)] 
Reorganize some determinism tests

This directory structure makes it easier to find the tests

3 years agoAdd a new determinism test
Bartosz Nitka [Thu, 30 Jun 2016 13:59:02 +0000 (06:59 -0700)] 
Add a new determinism test

This is one of the testcases that I forgot to commit

3 years agoDelete Ord Unique
Bartosz Nitka [Wed, 29 Jun 2016 14:34:55 +0000 (07:34 -0700)] 
Delete Ord Unique

Ord Unique can be a source of invisible, accidental
nondeterminism as explained in Note [No Ord for Unique].
This removes it, leaving a note with rationale.

It's unfortunate that I had to write Ord instances for
codegen data structures by hand, but I believe that it's a
right trade-off here.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoTestsuite: do not depend on sys.stdout.encoding
Thomas Miedema [Wed, 29 Jun 2016 20:56:58 +0000 (22:56 +0200)] 
Testsuite: do not depend on sys.stdout.encoding

The cause of #12213 is in dump_stdout and dump_stderr:


Commit 6f6f515401a29d26eaa5daae308b8e700abd4c04 changed read_no_crs to
return a unicode string. Printing a unicode strings works fine as long
as sys.stdout.encoding is 'UTF-8'.

There are two reasons why sys.stdout.encoding might not be 'UTF-8'.

* When output is going to a file, sys.stdout and sys.stdout do not respect
  the locale:

  $ LC_ALL=en_US.utf8 python -c 'import sys; print(sys.stderr.encoding)'
  $ LC_ALL=en_US.utf8 python -c 'import sys; print(sys.stderr.encoding)' 2>/dev/null

* When output is going to the terminal, explicitly reopening sys.stdout has
  the side-effect of changing sys.stdout.encoding from 'UTF-8' to 'None'.

      sys.stdout = os.fdopen(sys.__stdout__.fileno(), "w", 0)

  We currently do this to set a buffersize of 0 (the actual
  buffersize used is irrelevant for the sys.stdout.encoding problem).

Solution: fix dump_stdout and dump_stderr to not use read_no_crs.

3 years agoFix pretty-printer for IfaceCo
Simon Peyton Jones [Wed, 29 Jun 2016 22:21:49 +0000 (23:21 +0100)] 
Fix pretty-printer for IfaceCo

As Trac #12242 showed, there was a missing case in
the pretty printer for IfaceCo. I've refactored it
so that the pattern-match ovelap checker will spot
it next time.

3 years agoTestsuite: use ignore_stderr/stdout instead of ignore_output
Thomas Miedema [Fri, 24 Jun 2016 18:45:04 +0000 (20:45 +0200)] 
Testsuite: use ignore_stderr/stdout instead of ignore_output

The problem with ignore_output is that it hides errors for WAY=ghci.
GHCi always returns with exit code 0 (unless it is broken itself).

For example: ghci015 must have been failing with compile errors for
years, but we didn't notice because all output was ignored.

Therefore, replace all uses of ignore_output with either ignore_stderr
or ignore_stdout. In some cases I opted for adding the expected output.

Update submodule hpc and stm.

Reviewed by: simonmar

Differential Revision:

3 years agoDouble the file descriptor limit for openFile008
Bartosz Nitka [Wed, 29 Jun 2016 13:10:20 +0000 (06:10 -0700)] 
Double the file descriptor limit for openFile008

I have get test failures on `openFile008` with
`openFile: resource exhausted (Too many open files)` when running
inside `./validate`, but not when I run the test individually.
I suspect that's because with `./validate` parallelism of 33 threads
I go just above the `1024` file descriptor limit.
This is probably related to the recent change:
`58f0086b70f2: Testsuite: open/close stdin/stdout/stderr explicitly`
but I haven't looked deep enough to understand exactly how.
I think bumping this is harmless, but I don't really know why it's
necessary at all.

Test Plan: ./validate

Reviewers: austin, thomie, hvr, bgamari, simonmar

Reviewed By: simonmar

Subscribers: simonmar

Differential Revision:

3 years agoRefactor match to not use Unique order
Bartosz Nitka [Wed, 29 Jun 2016 10:27:49 +0000 (03:27 -0700)] 
Refactor match to not use Unique order

Unique order can introduce nondeterminism.
As a step towards removing the Ord Unique instance
I've refactored the code to use deterministic sets instead.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoTestsuite: fixes for python2.6 support
Thomas Miedema [Wed, 29 Jun 2016 11:16:05 +0000 (13:16 +0200)] 
Testsuite: fixes for python2.6 support

3 years agoTest Trac #12185
Simon Peyton Jones [Wed, 29 Jun 2016 09:41:55 +0000 (10:41 +0100)] 
Test Trac #12185

3 years agoStop the simplifier from removing StaticPtr binds.
Facundo Domínguez [Tue, 28 Jun 2016 01:30:50 +0000 (22:30 -0300)] 
Stop the simplifier from removing StaticPtr binds.

We have the FloatOut pass create exported ids for floated StaticPtr
bindings. The simplifier doesn't try to remove those.

This patch also improves on 7fc20b by making a common definition
collectStaticPtrSatArgs to test for StaticPtr binds.

Fixes #12207.

Test Plan: ./validate

Reviewers: simonpj, austin, bgamari, simonmar, goldfire

Reviewed By: simonpj

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12207

3 years agoWibble error message for #11471
Simon Peyton Jones [Tue, 28 Jun 2016 12:39:51 +0000 (13:39 +0100)] 
Wibble error message for #11471

I'm not quite sure why this changed with my two recent commits,
but it /has/ changed (in a benign way) so I'm accepting it.
Maybe it wasn't me anyway... but life is short and I'm not inclined
to dig further.

3 years agoDeal correctly with unused imports for 'coerce'
Simon Peyton Jones [Tue, 28 Jun 2016 11:13:13 +0000 (12:13 +0100)] 
Deal correctly with unused imports for 'coerce'

We only do newtype unwrapping for Coercible constraints if
the newtype's data constructor is in scope.  We were trying to
record the fact that the data constructor was thereby 'used', so
that an import statement would not be flagged as unnecsssary
(by -Wunused-imports).

But the code was simply wrong. It was wrong because it assumed
that only one level of unwrapping happened, whereas
tcTopNormaliseNewTypeTF_maybe actually unwraps multiple layers.
So we need to return a /list/ of data constructors that are used.

This entailed a bit of refactoring, as usual.

Fixes Trac #12067

3 years agoDon't omit any evidence bindings
Simon Peyton Jones [Fri, 24 Jun 2016 14:49:05 +0000 (15:49 +0100)] 
Don't omit any evidence bindings

This fixes Trac #12156, where we were omitting to make an
evidence binding (because cec_suppress was on), but yet the
program was compiled and run.

The fix is easy, and involves deleting code :-).

3 years agoTestsuite: mark tests expect_broken
Thomas Miedema [Mon, 27 Jun 2016 21:12:19 +0000 (23:12 +0200)] 
Testsuite: mark tests expect_broken

* T7837 is still broken for prof_ways (#9406)
* T11627b is broken on Windows for WAY=prof_hc_hb (#12236)
* T8089 is also broken for WAY=profasm on Windows

3 years agoTestsuite: do not add -debug explicitly in .T file
Thomas Miedema [Mon, 27 Jun 2016 22:21:58 +0000 (00:21 +0200)] 
Testsuite: do not add -debug explicitly in .T file

This prevents `cannot find -lHSrts_debug_p` when running `make
TEST=T9078 WAY=profasm` (#9078).

3 years agoTestsuite: run all indexed-types ways on ./validate --slow
Thomas Miedema [Mon, 27 Jun 2016 21:11:48 +0000 (23:11 +0200)] 
Testsuite: run all indexed-types ways on ./validate --slow

I don't know why some ways were omitted before.

3 years agoTestsuite: framework failure improvements (#11165)
Thomas Miedema [Fri, 24 Jun 2016 14:18:05 +0000 (16:18 +0200)] 
Testsuite: framework failure improvements (#11165)

* add framework failures to unexpected results list
* report errors in .T files as framework failures (show in summary)
* don't report missing tests when framework failures in .T files

3 years agoTestsuite: cleanup printing of summary
Thomas Miedema [Tue, 21 Jun 2016 16:35:42 +0000 (18:35 +0200)] 
Testsuite: cleanup printing of summary

Just use a simple list of tuples, instead of a nested map.

-90 lines of code.

3 years agoTestsuite: open/close stdin/stdout/stderr explicitly
Thomas Miedema [Mon, 20 Jun 2016 12:36:03 +0000 (14:36 +0200)] 
Testsuite: open/close stdin/stdout/stderr explicitly

This allows run_command's to contain `|`, and `no_stdin` isn't necessary

Unfortunately it doesn't fix T7037 on Windows which I had hoped it would
(testsuite driver tries to read a file that it just created itself, but
the OS says it doesn't exist).

The only drawback of this commit is that the command that the testsuite
prints to the terminal (for debugging purposes) doesn't mention the
files that stdout and stderr are redirected to anymore. This is probably

Update submodule unix.

Differential Revision:

3 years agoTestsuite: do not print timeout message
Thomas Miedema [Tue, 28 Jun 2016 09:58:33 +0000 (11:58 +0200)] 
Testsuite: do not print timeout message

This is a followup to e1293bbfb1fa1fdeb56446a7b957d6f628042e71, but then
for Windows timeout.

3 years agoTestsuite: simplify extra_file handling
Thomas Miedema [Tue, 21 Jun 2016 16:58:50 +0000 (18:58 +0200)] 
Testsuite: simplify extra_file handling

Before, `extra_files(['.hpc/Main.mix'])` meant copy `Main.mix` to
`<testdir>/.hpc/Main.mix`. This feature wasn't really necessary, so now
it just means copy `Main.mix` to `<testdir>/Main.mix`. This simplifies
the implementation.

Some small other cleanups as well. -40 lines of code.

3 years agoTestsuite: remove one level of indentation [skip ci]
Thomas Miedema [Tue, 21 Jun 2016 11:56:21 +0000 (13:56 +0200)] 
Testsuite: remove one level of indentation [skip ci]

Refactoring only. Move try/except out of do_test.

3 years agoTestsuite: report duplicate testnames when `make TEST=<name>`
Thomas Miedema [Tue, 21 Jun 2016 10:32:04 +0000 (12:32 +0200)] 
Testsuite: report duplicate testnames when `make TEST=<name>`

3 years agoTestsuite: never pick up .T files in .run directories
Thomas Miedema [Tue, 21 Jun 2016 07:52:36 +0000 (09:52 +0200)] 
Testsuite: never pick up .T files in .run directories

And use os.walk instead of calling os.listdir many times. The testsuite
driver should be able to handle backward slashes on Windows now.

3 years agorts/Linker.c: Rename ONLY_USED_x86_64_HOST_ARCH macro
Erik de Castro Lopo [Mon, 27 Jun 2016 09:37:06 +0000 (19:37 +1000)] 
rts/Linker.c: Rename ONLY_USED_x86_64_HOST_ARCH macro

Rename it to `USED_IF_x86_64_HOST_ARCH` to make it more like the existing
`USED_IF` macros as suggested by Simon Marlow.

Test Plan: Build on x86_64 windows

Reviewers: Phyx, bgamari, simonmar, austin

Subscribers: thomie

Differential Revision:

3 years agoTypos in user manual and code: recurisve -> recursive
Ömer Sinan Ağacan [Mon, 27 Jun 2016 09:50:37 +0000 (09:50 +0000)] 
Typos in user manual and code: recurisve -> recursive

3 years agoRemove some `undefined`s
Ömer Sinan Ağacan [Mon, 27 Jun 2016 09:15:39 +0000 (09:15 +0000)] 
Remove some `undefined`s

These get annoying when `undefined` is actually used as placeholder in WIP code.
Some of these were also completely redundant (just call `deAnnotate'` instead of
`deAnnotate` etc.).

3 years agoDon't run the run_command tests with ext-interp
Simon Marlow [Sun, 26 Jun 2016 05:54:26 +0000 (06:54 +0100)] 
Don't run the run_command tests with ext-interp

3 years agoMake T8761 deterministic, I hope
Simon Marlow [Sun, 26 Jun 2016 05:53:56 +0000 (06:53 +0100)] 
Make T8761 deterministic, I hope

T8761 seems to get different interleaving in its output on
Phabricator, so this switches it to use stderr consistently.

Test Plan: worksforme

Reviewers: goldfire, austin, bgamari, erikd

Subscribers: thomie

Differential Revision:

3 years agorts/Linker.c: Improve ugly C pre-processor hack
Erik de Castro Lopo [Sun, 26 Jun 2016 18:54:47 +0000 (04:54 +1000)] 
rts/Linker.c: Improve ugly C pre-processor hack

Test Plan: Build on x86_64/linux, x86_64/darwin and powerpc/linux

Reviewers: Phyx, bgamari, simonmar, austin

Reviewed By: Phyx

Subscribers: thomie

Differential Revision:

3 years agoAllow building static libs.
Moritz Angermann [Sat, 25 Jun 2016 16:07:57 +0000 (17:07 +0100)] 
Allow building static libs.

Commit 90538d86af579595987826cd893828d6f379f35a, seems to have broken static linking.
The introduction of `argFixup` in `runLink` rearranges libs, and considers
anything with an `-l` prefix or `.a` suffix a lib, which fails for libs that are
just being linked together (e.g. `-o lib.a`).

The proposed solution explicitly checks for the existance of the `-o` flag.

Reviewers: rwbarton, erikd, Phyx, bgamari, austin

Reviewed By: Phyx

Subscribers: thomie

Differential Revision:

3 years agoRefactor tcInferArgs and add comments.
Richard Eisenberg [Fri, 24 Jun 2016 23:25:07 +0000 (19:25 -0400)] 
Refactor tcInferArgs and add comments.

This removes an unnecessary loop looking for invisible binders
and tries to clarify what the very closely-related functions
tcInferArgs, tc_infer_args, tcInferApps all do.

3 years agos/Invisible/Inferred/g s/Visible/Required/g
Richard Eisenberg [Thu, 23 Jun 2016 20:26:29 +0000 (16:26 -0400)] 
s/Invisible/Inferred/g s/Visible/Required/g

This renames VisibilityFlag from

> data VisibilityFlag = Visible | Specified | Invisible


> data ArgFlag = Required | Specified | Inferred

The old name was quite confusing, because both Specified
and Invisible were invisible! The new names are hopefully clearer.

3 years agoAdd template-haskell changelog note for #8761
Ryan Scott [Fri, 24 Jun 2016 18:48:09 +0000 (14:48 -0400)] 
Add template-haskell changelog note for #8761

3 years agoClean up outdated comments in template-haskell changelog
Ryan Scott [Fri, 24 Jun 2016 18:42:26 +0000 (14:42 -0400)] 
Clean up outdated comments in template-haskell changelog

* Replaced 2.11's *TBA* with *May 2016*
* Removed an outdated TODO comment
* Removed lines which incorrectly stated that some strictness-related
  functions had been removed (they have been deprecated instead)

3 years agoFix typo in Data.Bitraverse Haddocks
Ryan Scott [Fri, 24 Jun 2016 18:40:42 +0000 (14:40 -0400)] 
Fix typo in Data.Bitraverse Haddocks

3 years agoTest Trac #12229
Simon Peyton Jones [Fri, 24 Jun 2016 10:31:32 +0000 (11:31 +0100)] 
Test Trac #12229

3 years agoFix T8761 (#12219, #12077)
Simon Marlow [Thu, 23 Jun 2016 17:20:06 +0000 (18:20 +0100)] 
Fix T8761  (#12219, #12077)

3 years agoRemote GHCi: comments only
Simon Marlow [Thu, 23 Jun 2016 08:22:32 +0000 (09:22 +0100)] 
Remote GHCi: comments only

Summary: Add more Notes and signposts across the codebase to help navigation.

Test Plan: validate

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

Subscribers: thomie

Differential Revision:

3 years agoRemote GHCi: separate out message types
Simon Marlow [Wed, 22 Jun 2016 17:13:48 +0000 (18:13 +0100)] 
Remote GHCi: separate out message types

From a suggestion by @goldfire: clean up the message types, so that
rather than one Message type with all the messages, we have a separate
THMessage type for messages sent back to GHC during TH execution.  At
the same time I also removed the QDone/QFailed/QException messages
into their own type, and made the result type of RunTH more accurate.

Test Plan: validate

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

Subscribers: thomie, goldfire

Differential Revision:

3 years agoRun all TH tests with -fexternal-interpreter (#12219)
Simon Marlow [Wed, 22 Jun 2016 12:47:36 +0000 (13:47 +0100)] 
Run all TH tests with -fexternal-interpreter (#12219)

3 years agoImplement ReifyConStrictness for -fexternal-interpreter (#12219)
Simon Marlow [Wed, 22 Jun 2016 12:46:27 +0000 (13:46 +0100)] 
Implement ReifyConStrictness for -fexternal-interpreter (#12219)

Fixes  T10697_decided_1 [exit code non-0] (ext-interp)  T10697_decided_2 [exit code non-0] (ext-interp)  T10697_decided_3 [exit code non-0] (ext-interp)

3 years agoImprove pretty-printing of Avail
Simon Peyton Jones [Fri, 24 Jun 2016 08:03:01 +0000 (09:03 +0100)] 
Improve pretty-printing of Avail

3 years agoRemove bogus comment on ForAllTy
Simon Peyton Jones [Fri, 24 Jun 2016 08:02:49 +0000 (09:02 +0100)] 
Remove bogus comment on ForAllTy

3 years agoFix renamer panic
Simon Peyton Jones [Fri, 24 Jun 2016 07:59:20 +0000 (08:59 +0100)] 
Fix renamer panic

This patch fixes Trac #12216 and #12127.  The 'combine' function
in 'imp_occ_env' in RnNames.filterImports checked for an empty
field-selector list, which was (a) unnecessary and (b) wrong.

I've elaborated the comments.

This does NOT fix #11959 which is related but not the same
(it concerns bundling of pattern synonyms).

3 years agoComments around invisibility
Simon Peyton Jones [Thu, 23 Jun 2016 13:54:24 +0000 (14:54 +0100)] 
Comments around invisibility

Very minor

3 years agoImprove typechecking of instance defaults
Simon Peyton Jones [Thu, 23 Jun 2016 13:51:22 +0000 (14:51 +0100)] 
Improve typechecking of instance defaults

In an instance declaration when you don't specify the code for a
method, GHC fills in from the default binding in the class.
The type of the default method can legitmiately be ambiguous ---
see Note [Default methods in instances] in TcInstDcls --- so
typechecking it can be tricky.

Trac #12220 showed that although we were dealing with that ambiguity
for /vanilla/ default methods, we were not doing so for /generic/
default methods.  Moreover we were dealing with it clumsily, by
generating post-typechecked code.

This patch fixes the bug AND deletes code!  We now use the same code
path for both vanilla and generic default methods; and generate
/pre-typechecked/ code in both cases.  The key trick is that we can use
Visible Type Application to deal with the ambiguity, which wasn't
possible before.  Hooray.

There is a small hit to performance in compiler/perf/T1969 which
consists of nothing BUT instance declarations with several default
methods to fill, which we now have to typecheck. The actual hit is
from 724 -> 756 or 4% in that extreme example.  Real world programs
have vastly fewer instance decls.

3 years agoTestsuite: do not copy .hi/.o files to testdir (#12112)
Thomas Miedema [Fri, 24 Jun 2016 08:41:48 +0000 (10:41 +0200)] 
Testsuite: do not copy .hi/.o files to testdir (#12112)

3 years agoRelease notes for #11975 and #10963
Richard Eisenberg [Thu, 23 Jun 2016 19:24:42 +0000 (15:24 -0400)] 
Release notes for #11975 and #10963

3 years agoFix #10963 and #11975 by adding new cmds to GHCi.
Richard Eisenberg [Sat, 23 Apr 2016 02:39:17 +0000 (22:39 -0400)] 
Fix #10963 and #11975 by adding new cmds to GHCi.

See the user's guide entry or the Note [TcRnExprMode] in TcRnDriver.

Test cases: ghci/scripts/T{10963,11975}

3 years agoFix #11974 by adding a more smarts to TcDefaults.
Richard Eisenberg [Sat, 23 Apr 2016 02:28:35 +0000 (22:28 -0400)] 
Fix #11974 by adding a more smarts to TcDefaults.

Test cases:

3 years agoVery confusing typo in error message.
Richard Eisenberg [Fri, 22 Apr 2016 19:29:10 +0000 (15:29 -0400)] 
Very confusing typo in error message.

3 years agoRemove Ord TyCon
Bartosz Nitka [Thu, 23 Jun 2016 13:24:47 +0000 (06:24 -0700)] 
Remove Ord TyCon

After 35d1564cea2e: Provide Uniquable version of SCC we
can remove this. We want to remove it because when used
it can introduce unnecessary nondeterminism.

GHC Trac: #4012

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]