3 years agoIgnore stderr of all printer tests
Alan Zimmerman [Thu, 8 Dec 2016 08:50:37 +0000 (10:50 +0200)] 
Ignore stderr of all printer tests

3 years agoRemove stray commented out line in all.T
Alan Zimmerman [Wed, 7 Dec 2016 21:36:23 +0000 (23:36 +0200)] 
Remove stray commented out line in all.T

3 years agoFix pretty printer test to nog generate stdout
Alan Zimmerman [Wed, 7 Dec 2016 21:24:22 +0000 (23:24 +0200)] 
Fix pretty printer test to nog generate stdout

It was doing a dump to stdout, which is not repeatable across platforms.

3 years agoAdd HsSyn prettyprinter tests
Alan Zimmerman [Tue, 8 Nov 2016 19:37:48 +0000 (21:37 +0200)] 
Add HsSyn prettyprinter tests

Add prettyprinter tests, which take a file, parse it, pretty print it,
re-parse the pretty printed version and then compare the original and
new ASTs (ignoring locations)

Updates haddock submodule to match the AST changes.

There are three issues outstanding

1. Extra parens around a context are not reproduced. This will require an
   AST change and will be done in a separate patch.

2. Currently if an `HsTickPragma` is found, this is not pretty-printed,
   to prevent noise in the output.

   I am not sure what the desired behaviour in this case is, so have left
   it as before. Test Ppr047 is marked as expected fail for this.

3. Apart from in a context, the ParsedSource AST keeps all the parens from
   the original source.  Something is happening in the renamer to remove the
   parens around visible type application, causing T12530 to fail, as the
   dumped splice decl is after the renamer.

   This needs to be fixed by keeping the parens, but I do not know where they
   are being removed.  I have amended the test to pass, by removing the parens
   in the expected output.

Test Plan: ./validate

Reviewers: goldfire, mpickering, simonpj, bgamari, austin

Reviewed By: simonpj, bgamari

Subscribers: simonpj, goldfire, thomie, mpickering

Differential Revision:

GHC Trac Issues: #3384

3 years agoDon't barf() on failures in loadArchive()
Ben Gamari [Wed, 7 Dec 2016 13:51:02 +0000 (08:51 -0500)] 
Don't barf() on failures in loadArchive()

This patch replaces calls to barf() in loadArchive() with proper
error handling.

Test Plan: GHC CI

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

Reviewed By: bgamari

Subscribers: thomie

Tags: #ghc

Differential Revision:

GHC Trac Issues: #12388

3 years agorts: Use pthread itimer implementation on Darwin
Ben Gamari [Wed, 7 Dec 2016 13:50:52 +0000 (08:50 -0500)] 
rts: Use pthread itimer implementation on Darwin

We want to avoid using SIGALRM whenever possible since we will interrupt
long-running system calls. See #10840.

Test Plan: Validate on Darwin

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10840

3 years agoFix crashes in hash table scanning with THREADED_RTS
Simon Marlow [Wed, 7 Dec 2016 13:20:03 +0000 (13:20 +0000)] 
Fix crashes in hash table scanning with THREADED_RTS

See comments.

3 years agoFix the test with -O
Simon Marlow [Wed, 7 Dec 2016 13:19:01 +0000 (13:19 +0000)] 
Fix the test with -O

Static string optimisation means we get a ForeignPtr with an IORef
inside it, leading to a different error.

3 years agoIgnore output for compact_gc: sizes change when profiling
Simon Marlow [Wed, 7 Dec 2016 13:18:39 +0000 (13:18 +0000)] 
Ignore output for compact_gc: sizes change when profiling

3 years agoOverhaul of Compact Regions (#12455)
Simon Marlow [Fri, 29 Jul 2016 13:11:03 +0000 (14:11 +0100)] 
Overhaul of Compact Regions (#12455)

This commit makes various improvements and addresses some issues with
Compact Regions (aka Compact Normal Forms).

This was the most important thing I wanted to fix.  Compaction
previously prevented GC from running until it was complete, which
would be a problem in a multicore setting.  Now, we compact using a
hand-written Cmm routine that can be interrupted at any point.  When a
GC is triggered during a sharing-enabled compaction, the GC has to
traverse and update the hash table, so this hash table is now stored
in the StgCompactNFData object.

Previously, compaction consisted of a deepseq using the NFData class,
followed by a traversal in C code to copy the data.  This is now done
in a single pass with hand-written Cmm (see rts/Compact.cmm). We no
longer use the NFData instances, instead the Cmm routine evaluates
components directly as it compacts.

The new compaction is about 50% faster than the old one with no
sharing, and a little faster on average with sharing (the cost of the
hash table dominates when we're doing sharing).

Static objects that don't (transitively) refer to any CAFs don't need
to be copied into the compact region.  In particular this means we
often avoid copying Char values and small Int values, because these
are static closures in the runtime.

Each Compact# object can support a single compactAdd# operation at any
given time, so the Data.Compact library now enforces mutual exclusion
using an MVar stored in the Compact object.

We now get exceptions rather than killing everything with a barf()
when we encounter an object that cannot be compacted (a function, or a
mutable object).  We now also detect pinned objects, which can't be
compacted either.

The Data.Compact API has been refactored and cleaned up.  A new
compactSize operation returns the size (in bytes) of the compact

Most of the documentation is in the Haddock docs for the compact
library, which I've expanded and improved here.

Various comments in the code have been improved, especially the main
Note [Compact Normal Forms] in rts/sm/CNF.c.

I've added a few tests, and expanded a few of the tests that were
there.  We now also run the tests with GHCi, and in a new test way
that enables sanity checking (+RTS -DS).

There's a benchmark in libraries/compact/tests/compact_bench.hs for
measuring compaction speed and comparing sharing vs. no sharing.

The field totalDataW in StgCompactNFData was unnecessary.

Test Plan:
* new unit tests
* validate
* tested manually that we can compact Data.Aeson data

Reviewers: gcampax, bgamari, ezyang, austin, niteria, hvr, erikd

Subscribers: thomie, simonpj

Differential Revision:

GHC Trac Issues: #12455

3 years agoReally mark T9577 as broken
Ben Gamari [Wed, 7 Dec 2016 03:13:20 +0000 (22:13 -0500)] 
Really mark T9577 as broken

I failed at the last attempt.

3 years agoMark T9577 as broken on Darwin due to #12937
Ben Gamari [Wed, 7 Dec 2016 03:10:47 +0000 (22:10 -0500)] 
Mark T9577 as broken on Darwin due to #12937

3 years agoTest Trac #12919
Vladislav Zavialov [Tue, 6 Dec 2016 23:48:27 +0000 (18:48 -0500)] 
Test Trac #12919

Test Plan: make test TEST=T12919

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12919

3 years agoReduce the size of string literals in binaries.
Thijs Alkemade [Tue, 6 Dec 2016 22:12:17 +0000 (17:12 -0500)] 
Reduce the size of string literals in binaries.

Removed the alignment for strings and mark then as cstring sections in
the generated asm so the linker can merge duplicate sections.

Reviewers: rwbarton, trofi, austin, trommler, simonmar, hvr, bgamari

Reviewed By: hvr, bgamari

Subscribers: simonpj, hvr, thomie

Differential Revision:

GHC Trac Issues: #9577

3 years agoRevert "Mark rn017 and T7672 as expect_broken(#12930) with -DDEBUG"
Matthew Pickering [Tue, 6 Dec 2016 22:14:41 +0000 (22:14 +0000)] 
Revert "Mark rn017 and T7672 as expect_broken(#12930) with -DDEBUG"

This reverts commit 19ae142364058e258122f4bb68ef4b9aa6e41890.

3 years agoFix unsafe usage of `is_iloc` selector in Ord instance for ImportSpec
Matthew Pickering [Tue, 6 Dec 2016 18:09:55 +0000 (18:09 +0000)] 
Fix unsafe usage of `is_iloc` selector in Ord instance for ImportSpec

This fixes tests rn017, T7672 and closed #12930.

Both these tests were self referential module imports through hs-boot
files. As a result, I am quite suspicious of what the ImpAll constructor is
used for. I had a brief hunt around but couldn't immediately see whether
it was necessary.

Reviewers: austin, bgamari

Subscribers: simonpj, thomie, nomeata

Differential Revision:

GHC Trac Issues: #12930

3 years agoMark rn017 and T7672 as expect_broken(#12930) with -DDEBUG
Simon Marlow [Tue, 6 Dec 2016 15:43:21 +0000 (15:43 +0000)] 
Mark rn017 and T7672 as expect_broken(#12930) with -DDEBUG

3 years agoOverhaul GC stats
Simon Marlow [Fri, 25 Nov 2016 16:45:43 +0000 (16:45 +0000)] 
Overhaul GC stats

Visible API changes:

* The C struct `GCDetails` gives the stats about a single GC.  This is
  passed to the `gcDone()` callback if one is set via the
  RtsConfig. (previously we just passed a collection of values, so this
  is more extensible, at the expense of breaking the existing API)

* `RTSStats` gives cumulative stats since the start of the program,
  and includes the `GCDetails` for the most recent GC.  This struct
  can be obtained via `getRTSStats()` (the old `getGCStats()` has been
  removed, and `getGCStatsEnabled()` has been renamed to


* The per-GC stats and cumulative stats are now cleanly separated.

* Inside the RTS we have a top-level `RTSStats` struct to keep all our
  stats in, previously this was just a collection of strangely-named
  variables.  This struct is mostly just copied in `getRTSStats()`, so
  the implementation of that function is a lot shorter.

* Types are more consistent.  We use a uint64_t byte count for all
  memory values, and Time for all time values.

* Names are more consistent.  We use a suffix `_bytes` for all byte
  counts and `_ns` for all time values.

* We now collect information about the amount of memory in large
  objects and compact objects in `GCDetails`. (the latter was the reason
  I started doing this patch but it seems to have ballooned a bit!)

* I fixed a bug in the calculation of the elapsed MUT time, and added
  an ASSERT to stop the calculations going wrong in the future.

For now I kept the Haskell API in `GHC.Stats` the same, by
impedence-matching with the new API.  We could either break that API
and make it match the C API more closely, or we could add a new API
and deprecate the old one.  Opinions welcome.

This stuff is very easy to get wrong, and it's hard to test.  Reviews

Test Plan:
manual testing

Reviewers: bgamari, niteria, austin, ezyang, hvr, erikd, rwbarton, Phyx

Subscribers: thomie

Differential Revision:

3 years agoGive concrete example for #12784 in 8.0.2 release notes
Ryan Scott [Tue, 6 Dec 2016 14:03:41 +0000 (09:03 -0500)] 
Give concrete example for #12784 in 8.0.2 release notes

We mentioned that there were "some programs" that failed to typecheck
due to #12784, but given how surprisingly common this issue has been, it'd
be prudent to at least give one example of the bug in the release notes.

Reviewers: simonpj, bgamari, austin, rwbarton

Reviewed By: rwbarton

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12784

3 years agoFix x86 Windows build and testsuite
Tamar Christina [Mon, 5 Dec 2016 21:27:23 +0000 (21:27 +0000)] 
Fix x86 Windows build and testsuite

Fix issues preventing x86 GHC to build on Windows and
fix segfault in the testsuite.

Test Plan: ./validate

Reviewers: austin, erikd, simonmar, bgamari

Reviewed By: bgamari

Subscribers: #ghc_windows_task_force, thomie

Differential Revision:

3 years agoColor output is wreaking havoc on test results
Tamar Christina [Mon, 5 Dec 2016 20:51:11 +0000 (20:51 +0000)] 
Color output is wreaking havoc on test results

D2716 introduced colors into the output of GHC.
These color ourputs are done using escape characters output
to the terminal.

These however are wreaking havoc on the testsuite output as now
no stderr with a warning or error will match anymore.

Instead of accepting the new codes as expected values instead I
turn them off. So the testsuite is consistent on platforms/terminals we
don't support colors on.

Test Plan:
any test that outputs colors. e.g.

make test TEST=T9576

Reviewers: austin, Rufflewind, bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #8809

3 years agoTest Trac #12925
Simon Peyton Jones [Mon, 5 Dec 2016 17:18:19 +0000 (17:18 +0000)] 
Test Trac #12925

3 years agoUse isFamFreeTyCon now we have it
Simon Peyton Jones [Mon, 5 Dec 2016 13:50:48 +0000 (13:50 +0000)] 
Use isFamFreeTyCon now we have it

Refactoring only

3 years agoFix used-variable calculation (Trac #12548)
Simon Peyton Jones [Mon, 5 Dec 2016 13:17:35 +0000 (13:17 +0000)] 
Fix used-variable calculation (Trac #12548)

The used-variable calculation for pattern synonyms is a little
tricky, for reasons described in RnBinds
Note [Pattern synonym builders don't yield dependencies]

It was right semantically, but the "unused-variable warning" was
wrong, which led to Trac #12548.

3 years agoFix an asymptotic bug in the occurrence analyser
Simon Peyton Jones [Fri, 2 Dec 2016 13:59:11 +0000 (13:59 +0000)] 
Fix an asymptotic bug in the occurrence analyser

Trac #12425 and #12234 showed up a major and long-standing
bug in the occurrence analyser, whereby it could generate
explonentially large program!

There's a lot of commentary on #12425; and it's all described
in Note [Loop breakers, node scoring, and stability]

I did quite a lot of refactoring to make the code comprehensibe
again (its structure had bit-rotted rather), so the patch
looks bigger than it really is.


I did a nofib run to check that I hadn't inadertently ruined

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
          fluid          -0.3%     -1.5%      0.01      0.01     +0.0%
         parser          -0.9%     +0.6%      0.04      0.04     +0.0%
         prolog          -0.1%     +1.2%      0.00      0.00     +0.0%

            Min          -0.9%     -1.5%     -8.6%     -8.7%     +0.0%
            Max          +0.1%     +1.2%     +7.7%     +7.8%     +2.4%
 Geometric Mean          -0.2%     -0.0%     -0.2%     -0.3%     +0.0%

I checked what happened in 'prolog'.  It seems that we have a
recursive data structure something like this

   f :: [blah]
   f x = build (\cn.  ...g...  )

   g :: [blah2]
   g y = ....(foldr k z (f y))....

If we inline 'f' into 'g' we get better fusion than the other
way round, but we don't have any way to spot that at the moment.
(I wonder if we could do worker/wrapper for functions returning
a 'build'?)  It was happening before by a fluke.

Anyway I decided to accept this; it's relatively rare I think.

3 years agocore-spec: Fix S_MatchData
Joachim Breitner [Fri, 2 Dec 2016 23:13:03 +0000 (18:13 -0500)] 
core-spec: Fix S_MatchData

Previously, it would substitute e for n without an e being around.
I clarify that by naming the scrutinee e.

3 years ago8.2.1-notes.rst: tweak binutils version
Sergei Trofimovich [Fri, 2 Dec 2016 22:14:23 +0000 (22:14 +0000)] 
8.2.1-notes.rst: tweak binutils version

It's 2.27 (-2), not 1.27.2. Dropped stray '\r'.

Signed-off-by: Sergei Trofimovich <>
3 years agoMaintain in-scope set in deeply_instantiate (fixes #12549).
John Leo [Fri, 2 Dec 2016 19:33:12 +0000 (14:33 -0500)] 
Maintain in-scope set in deeply_instantiate (fixes #12549).

Maintain in-scope set in deeply_instantiate (Fixes T12549).

lint fixes

Test Plan: validate

Reviewers: simonpj, austin, goldfire, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12549

3 years agoInstall toplevel handler inside fork.
Alexander Vershilov [Fri, 2 Dec 2016 19:32:48 +0000 (14:32 -0500)] 
Install toplevel handler inside fork.

When rts is forked it doesn't update toplevel handler, so UserInterrupt
exception is sent to Thread1 that doesn't exist in forked process.

We install toplevel handler when fork so signal will be delivered to the
new main thread.

Fixes #12903

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12903

3 years agofdReady: use poll() instead of select()
Simon Marlow [Fri, 2 Dec 2016 19:32:24 +0000 (14:32 -0500)] 
fdReady: use poll() instead of select()

select() is limited to 1024 file descriptors.  This actually blew up
in a very hard-to-debug way in our production system when using the
hinotify package.

Test Plan:
libraries/tests pass, paricularly hGetBuf001 which exercises this

Reviewers: niteria, erikd, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12912

3 years agoNote Trac #12141 in mk/
Ryan Scott [Fri, 2 Dec 2016 19:40:23 +0000 (14:40 -0500)] 
Note Trac #12141 in mk/

Mention that many GHC testsuite tests will fail with a compiler built with
the quickest profile. See Trac #12141.

3 years agoTravis: Add dependency on python3
Ben Gamari [Thu, 1 Dec 2016 23:37:19 +0000 (18:37 -0500)] 
Travis: Add dependency on python3

The testsuite now requires python >=3.0. See #12909.

3 years agoFix naming of the native latin1 encodings
Kai Ruemmler [Thu, 1 Dec 2016 22:59:50 +0000 (17:59 -0500)] 
Fix naming of the native latin1 encodings

textEncodingName is notjust a string, it must be a valid input for
mkTextEncoding, as stated in libraries/base/GHC/IO/Encoding/Types.hs.

Test Plan:
A working latin1 locale is required on the system.  Reason: ghc's
initial locale encoding defaults to ASCII, if either an unknown locale
or unknown charset is used.  For the bug to show up, ghc must start up
using the latin1 encoding.

From main directory in ghc do:
$ ./configure && make clean && make boot && make inplace/bin/ghc-stage2
$ LC_CTYPE="de_DE.ISO-8859-1" ./inplace/bin/ghc-stage2

Before the patch, the last line leads to the exception thrown:
ghc-stage2: mkTextEncoding: does not exist (unknown

After the patch, ghc-stage2 prints a short usage summary as expected.
$ make test TEST=encoding005
continues to  pass after the patch.

Reviewers: austin, hvr, rwbarton, bgamari

Reviewed By: bgamari

Subscribers: mpickering, rwbarton, thomie

Differential Revision:

3 years agotestsuite/conc059: Don't attempt to use stdcall where it isn't supported
Ben Gamari [Thu, 1 Dec 2016 21:58:34 +0000 (16:58 -0500)] 
testsuite/conc059: Don't attempt to use stdcall where it isn't supported

Test Plan: Validate on 64-bit Windows

Reviewers: geekosaur, austin, erikd, Phyx

Reviewed By: Phyx

Subscribers: thomie

Differential Revision:

3 years agotestsuite: Actually update haddock.compiler allocations
Ben Gamari [Thu, 1 Dec 2016 20:04:44 +0000 (15:04 -0500)] 
testsuite: Actually update haddock.compiler allocations

The previous attempt updated the comment but not the value. Silly me.

3 years agoTypos in comments
Gabor Greif [Thu, 1 Dec 2016 17:46:35 +0000 (18:46 +0100)] 
Typos in comments

3 years agorts: Ensure we always give MADV_DONTNEED a chance in osDecommitMemory
Ben Gamari [Thu, 1 Dec 2016 17:55:23 +0000 (12:55 -0500)] 
rts: Ensure we always give MADV_DONTNEED a chance in osDecommitMemory

As described in #12865, newer Linux kernels support both MADV_FREE and
MADV_DONTNEED. Previously a runtime would fail to try MADV_DONTNEED if
MADV_FREE failed (e.g. since the kernel which the image is running on
doesn't support the latter). Now we try MADV_DONTNEED if MADV_FREE
failed to ensure that binaries compiled on a kernel supporting MADV_FREE
don't fail on decommit.

Test Plan: Validate

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12865

3 years agotestsuite: Remove Unicode literals from driver
Ben Gamari [Thu, 1 Dec 2016 17:53:31 +0000 (12:53 -0500)] 
testsuite: Remove Unicode literals from driver

They are not supported by Python 3.0, 3.1, and 3.2 (but are supported by
>= 3.3; silliness!)

Test Plan: Validate on python 3.2

Reviewers: austin

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #12909, #9184

3 years agorts: Fix type of bool literal
Ben Gamari [Thu, 1 Dec 2016 17:25:00 +0000 (12:25 -0500)] 
rts: Fix type of bool literal

Test Plan: Build `p` way

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

3 years agoMake note of #12907 in 8.0.2 release notes
Ryan Scott [Thu, 1 Dec 2016 17:24:48 +0000 (12:24 -0500)] 
Make note of #12907 in 8.0.2 release notes

Test Plan: Read it, commit it, merge it, ship it

Reviewers: goldfire, bgamari, austin, hvr, simonpj

Reviewed By: simonpj

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12907

3 years agoLevity polymorphic expressions mustn't be floated-out in let-bindings.
Sylvain Henry [Thu, 1 Dec 2016 17:24:34 +0000 (12:24 -0500)] 
Levity polymorphic expressions mustn't be floated-out in let-bindings.

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12901

3 years agoEnsure flags destined for ld are properly passed
Ben Gamari [Thu, 1 Dec 2016 16:28:47 +0000 (11:28 -0500)] 
Ensure flags destined for ld are properly passed

GHC uses gcc, not ld, for linking. Consequently all flags to be
interpreted by ld need to be prefixed by -optl,-Wl on the GHC command

Test Plan: Validate on OpenBSD

Reviewers: austin, rwbarton

Reviewed By: rwbarton

Subscribers: thomie

Differential Revision:

3 years agoFix typo in functional dependencies doc
Chris Martin [Thu, 1 Dec 2016 02:41:49 +0000 (21:41 -0500)] 
Fix typo in functional dependencies doc

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agotestsuite: Add another testcase for #11821
Ben Gamari [Thu, 1 Dec 2016 00:09:11 +0000 (19:09 -0500)] 
testsuite: Add another testcase for #11821

3 years agoRevert "Fix windows validate."
Tamar Christina [Wed, 30 Nov 2016 19:51:43 +0000 (19:51 +0000)] 
Revert "Fix windows validate."

This reverts commit ef37580d16a23d1601795548b13b88b9f5373010.

Now that commit e2330b6dde805a5507898c3c4ddf38599df969da has been reverted
this change is now needed.

3 years agoRevert "Make globals use sharedCAF"
Ben Gamari [Wed, 30 Nov 2016 15:54:45 +0000 (10:54 -0500)] 
Revert "Make globals use sharedCAF"

This reverts commit 6f7ed1e51bf360621a3c2a447045ab3012f68575 due to breakage of
the build on Windows.

3 years agoRename RuntimeRepPolymorphism to LevityPolymorphism
Simon Peyton Jones [Wed, 30 Nov 2016 09:45:35 +0000 (09:45 +0000)] 
Rename RuntimeRepPolymorphism to LevityPolymorphism

Richard and I decided to make this change in our paper, and I'm
just propagating it to GHC

3 years agoTweaks to grammar and such.
Gabor Greif [Wed, 30 Nov 2016 09:21:04 +0000 (10:21 +0100)] 
Tweaks to grammar and such.

3 years agoFix windows validate.
Tamar Christina [Wed, 30 Nov 2016 08:55:42 +0000 (08:55 +0000)] 
Fix windows validate.

3 years agoUpdate Mingw-w64 bindist for Windows
Tamar Christina [Tue, 29 Nov 2016 21:58:53 +0000 (16:58 -0500)] 
Update Mingw-w64 bindist for Windows

This updates the binary dists for windows to GCC 6.2.0 and
binutils 2.27.2 which has fixes required for LLVM.

Test Plan: ./validate

Reviewers: simonmar, erikd, austin, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12871, #8974

3 years agotestsuite: Use python3 by default
Ben Gamari [Tue, 29 Nov 2016 21:58:24 +0000 (16:58 -0500)] 
testsuite: Use python3 by default

It turns out that Phyx's fix for #12554 (D2684) still fails with mingw-w64
python 2.7. However, Python 3 (both msys2 and mingw-w64) work fine. Given that
supporting Python 2 has already become rather tiresome (as @thomie warned it
would), let's just move to python3 by default.

Test Plan: Validate

Reviewers: austin, Phyx

Reviewed By: Phyx

Subscribers: Phyx, thomie

Differential Revision:

GHC Trac Issues: #12554

3 years agoUpdate test output for Windows
Tamar Christina [Tue, 29 Nov 2016 21:58:04 +0000 (16:58 -0500)] 
Update test output for Windows

Following D2684 these two tests need to be updated:

 * T7037: timeout.exe now waits until all processes are finished.
          this makes T7037 reliable. So enabled.

 * T876: Unknown reason, allocations are much lower than before.

Test Plan: ./validate

Reviewers: austin, simonmar, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12725, #12004

3 years agoFix testsuite threading, timeout, encoding and performance issues on Windows
Tamar Christina [Tue, 29 Nov 2016 21:56:08 +0000 (16:56 -0500)] 
Fix testsuite threading, timeout, encoding and performance issues on Windows

In a land far far away, a project called Cygwin was born.
Cygwin used newlib as it's standard C library implementation.

But Cygwin wanted to emulate POSIX systems as closely as possible.
So it implemented `execv` using the Windows function `spawnve`.


spawnve (_P_OVERLAY, path, argv, cur_environ ())

`_P_OVERLAY` is crucial, as it makes the function behave *sort of*
like execv on linux. the child process replaces the original process.

With one major difference because of the difference in process models
on Windows: the original process signals the caller that it's done.

this is why the file is still locked. because it's still running,
control was returned because the parent process was destroyed,
but the child is still running.

I think it's just pure dumb luck, that the older runtimes are slow
enough to give the process time to terminate before we tried deleting
the file.  Which explains why you do have sporadic failures even on
older runtimes like 2.5.0, of a test or two (like T7307).

So this patch fixes a couple of things. I leverage the existing
`timeout.exe` to implement a workaround for this issue.

a) The old timeout used to start the process then assign it to the job.
   This is slightly faulty since child processes are only assigned to a
   job is their parent were assigned at the time they started. So this
   was a race condition. I now create the process suspended, assign it
   to the job and then resume it. Which means all child processes are
   not running under the same job.

b) First things, Is to prevent dangling child processes. I mark the job
   with `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE` so when the last process in
   the job is done, it insures all processes under the job are killed.

c) Secondly, I change the way we wait for results. Instead of waiting
   for the parent process to terminate, I wait for the job itself to

   There's a slight subtlety there, we can't wait on the job itself.
   Instead we have to create an I/O Completion port and wait for signals
   on it.  See

This fixes the issues on all runtimes for me and makes T7307 pass

The threading was also simplified by hiding all the locking in a single
semaphore and a completion class. Futhermore some additional error
reporting was added.

For encoding the testsuite now no longer passes a file handle to the
subprocess since on windows, sh.exe seems to acquire a lock on the file
that is not released in a timely fashion.

I suspect this because cygwin seems to emulate console handles by
creating file handles and using those for std handles. So when we give
it an existing file handle it just locks the file. I what's happening is
that it's not releasing the handle until all shared cygwin processes are
dead. Which explains why it worked in single threaded mode.

So now instead we pass a pipe and do not interpret the resulting data.

Any bytes written to stdin or read out of stdout/stderr are done so in
binary mode and we do not interpret the data. The reason for this is
that we have encoding tests in GHC which pass invalid utf-8. If we try
to handle the data as text then python will throw an exception instead
of a test comparison failing.

Also I have fixed the ability to override `PYTHON` when calling `make
tests`. This now works the same as with `.\validate`.

Finally, after cleaning up the locks I was able to make the abort
behavior work correctly as I believe it was intended: when you press
Ctrl+C and send an interrupt signal, the testsuite finishes the active
tests and then gracefully exits showing you a report of the progress it
did make. So using Ctrl+C will not just *die* as it did before.

These changes lift the restriction on which python version you use
(msys/mingw) or which runtime or python 3 or python 2.  All combinations
should now be supported.

Test Plan:
PATH=/usr/local/bin:/mingw64/bin:$APPDATA/cabal/bin:$PATH &&
PYTHON=/usr/bin/python THREADS=9 make test
THREADS=9 make test
PATH=/usr/local/bin:/mingw64/bin:$APPDATA/cabal/bin:$PATH &&
PYTHON=/usr/bin/python ./validate --quiet --testsuite-only

Reviewers: erikd, RyanGlScott, bgamari, austin

Subscribers: jrtc27, mpickering, thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12725, #12554, #12661, #12004

3 years agoHoopl/Dataflow: use block-oriented interface
Michal Terepeta [Tue, 29 Nov 2016 22:54:12 +0000 (17:54 -0500)] 
Hoopl/Dataflow: use block-oriented interface

This introduces the new interface for dataflow analysis, where transfer
functions operate on a whole basic block.

The main changes are:
- Hoopl.Dataflow: implement the new interface and remove the old code;
  expose a utility function to do a strict fold over the nodes of a
  basic block (for analyses that do want to look at all the nodes)
- Refactor all the analyses to use the new interface.

One of the nice effects is that we can remove the `analyzeFwdBlocks`
hack that ignored the middle nodes (that existed for analyses that
didn't need to go over all the nodes). Now this is no longer a special
case and fits well with the new interface.

Signed-off-by: Michal Terepeta <>
Test Plan:
validate, earlier version of the patch had assertions
comparing the results with the old implementation

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

Reviewed By: bgamari

Subscribers: goldfire, erikd, thomie

Differential Revision:

3 years agoAdded Eq1, Ord1, Read1 and Show1 instances for NonEmpty
Shane [Tue, 29 Nov 2016 22:53:44 +0000 (17:53 -0500)] 
Added Eq1, Ord1, Read1 and Show1 instances for NonEmpty

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoRemove most functions from cmm/BlockId
Michal Terepeta [Tue, 29 Nov 2016 22:49:27 +0000 (17:49 -0500)] 
Remove most functions from cmm/BlockId

It seems that `BlockId` module could simply go away in favor
of Hoopl's `Label`. This is the first step to do that.

In a few places I had to add some type signatures, but most of
them seem to help with code readability.

Signed-off-by: Michal Terepeta <>
Test Plan: ./validate

Reviewers: austin, simonmar, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agorts: Add missing #include <stdbool.h>
Ben Gamari [Tue, 29 Nov 2016 23:46:15 +0000 (18:46 -0500)] 
rts: Add missing #include <stdbool.h>

3 years agoUse C99's bool
Ben Gamari [Tue, 29 Nov 2016 21:51:30 +0000 (16:51 -0500)] 
Use C99's bool

Test Plan: Validate on lots of platforms

Reviewers: erikd, simonmar, austin

Reviewed By: erikd, simonmar

Subscribers: michalt, thomie

Differential Revision:

3 years agoFix type of GarbageCollect declaration
Ben Gamari [Tue, 29 Nov 2016 21:51:07 +0000 (16:51 -0500)] 
Fix type of GarbageCollect declaration

Test Plan: Validate

Reviewers: simonmar, austin, erikd

Subscribers: thomie

Differential Revision:

3 years agoMake globals use sharedCAF
Moritz Angermann [Tue, 29 Nov 2016 21:50:32 +0000 (16:50 -0500)] 
Make globals use sharedCAF

The use of globals is quite painful when multiple rts are loaded, e.g.
when plugins are loaded, which bring in a second rts. The sharedCAF
appraoch was employed for the FastStringTable; I've taken the libery
to extend this to the other globals I could find.

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

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

3 years agohschooks.c: Ensure correct header file is included
Ben Gamari [Tue, 29 Nov 2016 21:50:04 +0000 (16:50 -0500)] 
hschooks.c: Ensure correct header file is included

Consider the case of building a stage1 compiler. `hschooks.c` will be
built by stage0 `ghc` and linked against the `stage0` RTS. Despite this
it was #including the stage1 `Rts.h`. There is, of course, no guarantee
that this is ABI-compatible with the stage0 RTS and when they diverge
Bad Things happen (e.g. bells ringing at inappropriate times in D2699).

Test Plan: Validate

Reviewers: simonmar, austin

Subscribers: thomie

Differential Revision:

3 years agotestsuite: Bump haddock.compiler allocations
Ben Gamari [Tue, 29 Nov 2016 20:58:36 +0000 (15:58 -0500)] 
testsuite: Bump haddock.compiler allocations

Unfortunately it's quite unclear what caused this.

3 years agoOrdList: Add Foldable, Traversable instances
Ben Gamari [Tue, 29 Nov 2016 19:45:19 +0000 (14:45 -0500)] 
OrdList: Add Foldable, Traversable instances

Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

3 years agoNCGMonad: Add MonadUnique NatM instance
Ben Gamari [Tue, 29 Nov 2016 19:45:04 +0000 (14:45 -0500)] 
NCGMonad: Add MonadUnique NatM instance

Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

3 years agoAsmCodeGen: Refactor worker in cmmNativeGens
Ben Gamari [Tue, 29 Nov 2016 19:44:57 +0000 (14:44 -0500)] 
AsmCodeGen: Refactor worker in cmmNativeGens

Test Plan: Validate

Reviewers: austin, simonmar, michalt

Reviewed By: simonmar, michalt

Subscribers: thomie

Differential Revision:

3 years agoUse newBlockId instead of newLabelC
Ben Gamari [Tue, 29 Nov 2016 19:44:19 +0000 (14:44 -0500)] 
Use newBlockId instead of newLabelC

This seems like a clearer name and the fewer functions that
one needs to remember, the better.

Test Plan: validate

Reviewers: austin, simonmar, michalt

Reviewed By: simonmar, michalt

Subscribers: thomie

Differential Revision:

3 years agoPurge GHC of literate Perl
Demi Obenour [Tue, 29 Nov 2016 19:44:05 +0000 (14:44 -0500)] 
Purge GHC of literate Perl

Test Plan: GHC CI

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: snowleopard, thomie

Maniphest Tasks: T74

Differential Revision:

3 years agoRefactor Pattern Match Checker to use ListT
Matthew Pickering [Tue, 29 Nov 2016 19:43:43 +0000 (14:43 -0500)] 
Refactor Pattern Match Checker to use ListT

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoReplace -fshow-source-paths with -fhide-source-paths
Sylvain Henry [Tue, 29 Nov 2016 18:39:28 +0000 (13:39 -0500)] 
Replace -fshow-source-paths with -fhide-source-paths

This patch reverts the change introduced with
587dcccfdfa7a319e27300a4f3885071060b1f8e and restores the previous
default output of GHC (i.e., show source path and object path for each
compiled module).

The -fhide-source-paths flag can be used to hide these paths and reduce
the line

Reviewers: gracjan, nomeata, austin, bgamari, simonmar, hvr

Reviewed By: hvr

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12851

3 years agotestsuite: Mention CLEANUP option in README
Ben Gamari [Tue, 29 Nov 2016 18:38:37 +0000 (13:38 -0500)] 
testsuite: Mention CLEANUP option in README

Test Plan: Read it

Reviewers: austin

Subscribers: mpickering, thomie

Differential Revision:

3 years agoMinor cleanup of foldRegs{Used,Defd}
Michal Terepeta [Tue, 29 Nov 2016 18:31:28 +0000 (13:31 -0500)] 
Minor cleanup of foldRegs{Used,Defd}

This makes the two functions strict in the accumulator - it seems that
there are only two users of those functions: `CmmLive` and `CmmSink`
and in both cases the strict fold fits better.

The commit also removes a few unused functions (`filterRegsUsed`),
instances (for `Maybe` and `RegSet`) and gets rid of unnecessary
inculde of `HsVersions.h`.

The performance effect of avoiding unnecessary thunks is mostly
negligible, although we do allocate a tiny bit less (nofib's section
on compile allocations):
-1 s.d.                -----            -0.2%
+1 s.d.                -----            -0.1%
Average                -----            -0.2%

Signed-off-by: Michal Terepeta <>
Test Plan: validate

Reviewers: simonmar, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoDetect color support
Phil Ruffwind [Tue, 29 Nov 2016 18:31:16 +0000 (13:31 -0500)] 
Detect color support

Test Plan: validate

Reviewers: erikd, Phyx, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #8809

3 years agoMake diagnostics slightly more colorful
Phil Ruffwind [Tue, 29 Nov 2016 18:31:01 +0000 (13:31 -0500)] 
Make diagnostics slightly more colorful

This is a preliminary commit to add colors to diagnostics (warning and
error messages).  The aesthetic changes are:

  - 'warning', 'error', and 'fatal' are all colored magenta, red, and
    red respectively.
  - The warning annotation [-Wsomething] shares the same color.
  - Warnings and errors are also bolded (this is consistent with what
    other compilers do).

A new flag has been added to control the behavior:


This flag is 'auto' by default.  However, auto-detection is not
implemented yet, so it effectively it defaults to off.

Test Plan: validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #8809

3 years agousers_guide: Bring 8.0.2 release notes up-to-date with ghc-8.0 branch
Ben Gamari [Tue, 29 Nov 2016 18:29:54 +0000 (13:29 -0500)] 
users_guide: Bring 8.0.2 release notes up-to-date with ghc-8.0 branch

I've been editing the release notes on the `ghc-8.0` branch; fold those
changes into `master`.

3 years agoDefine thread primitives if they're supported.
Shea Levy [Tue, 29 Nov 2016 18:28:27 +0000 (13:28 -0500)] 
Define thread primitives if they're supported.

On iOS, we use the pthread-based implementation of Itimer.c even for a
non-threaded RTS. Since 999c464, this relies on synchronization
primitives like Mutex, so ensure those primitives are defined whenever
they are supported, even if !THREADED_RTS.

Fixes #12799.

Reviewers: erikd, austin, simonmar, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12799

3 years agoStore string as parsed in SourceText for CImport
Alan Zimmerman [Tue, 29 Nov 2016 19:06:52 +0000 (21:06 +0200)] 
Store string as parsed in SourceText for CImport

3 years agoTypos in comments
Gabor Greif [Tue, 29 Nov 2016 15:18:07 +0000 (16:18 +0100)] 
Typos in comments

3 years agoZonk the free tvs of a RULE lhs to TyVars
Simon Peyton Jones [Tue, 29 Nov 2016 14:03:46 +0000 (14:03 +0000)] 
Zonk the free tvs of a RULE lhs to TyVars

Previously we were making them into skolem TcTyVars,
which is wrong for the output of the type checker, which
no TcTyVars should surive.

See Note [Zonking the LHS of a RULE] in TcHsSyn

This was flushed out by the new IfaceTcTyVar thing;
I found some more TcTyVars that were being serialised into
an interface file, which is wrong wrong wrong.

3 years agoMake note of #12881 in 8.0.2 release notes
Ryan Scott [Tue, 29 Nov 2016 13:43:46 +0000 (08:43 -0500)] 
Make note of #12881 in 8.0.2 release notes

Summary: Resolves #12881.

Test Plan: Read it, commit it, merge it, ship it

Reviewers: hvr, simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #12881

3 years agoComments only (related to #12789)
Simon Peyton Jones [Mon, 28 Nov 2016 17:41:27 +0000 (17:41 +0000)] 
Comments only (related to #12789)

It took me some time to find the right Note for the
fix to #12789.  This comment patch tries to add pointers
from relevant places.

3 years agoTest Trac #12885
Simon Peyton Jones [Mon, 28 Nov 2016 17:15:16 +0000 (17:15 +0000)] 
Test Trac #12885

...which is fixed by

  commit 0476a64e70c91b326b53db2fc55adbbaa8e5c270
  Author: Simon Peyton Jones <>
  Date:   Tue Oct 25 15:22:17 2016 +0100

    Fix a bug in mk_superclasses_of

3 years agoTest Trac #12776
Simon Peyton Jones [Mon, 28 Nov 2016 16:43:49 +0000 (16:43 +0000)] 
Test Trac #12776

3 years agoTypos in comments only [ci skip]
Gabor Greif [Mon, 28 Nov 2016 09:40:13 +0000 (10:40 +0100)] 
Typos in comments only [ci skip]

3 years agoFix an long-standing bug in OccurAnal
Simon Peyton Jones [Sun, 27 Nov 2016 23:35:12 +0000 (23:35 +0000)] 
Fix an long-standing bug in OccurAnal

This bug was beautifully characterised in Trac #12776,
which showed a small program for which the inliner went
into an infinite loop.  Eeek.

It turned out to be a genuine and long-standing bug in
the occurrence analyer, specifically in the bit that
identifies loop breakers.  In this line

  pairs | isEmptyVarSet weak_fvs
        = reOrderNodes   0 bndr_set weak_fvs tagged_nodes []
        | otherwise
        = loopBreakNodes 0 bndr_set weak_fvs loop_breaker_edges []

the 'tagged_nodes' should be 'loop_breaker_edges'.
That's it!

The diff looks a lot bigger because I did some work on
comments and variable naming, but that's all it is.  We
were using the wrong set of dependencies!

I'm astonished that this bug has not caused more trouble.
It dates back to at least 2011 and maybe further.

3 years agoBe a bit more selective about improvement
Simon Peyton Jones [Thu, 24 Nov 2016 22:21:08 +0000 (22:21 +0000)] 
Be a bit more selective about improvement

This patch makes [W] constraints not participate in
improvement.   See Note [Do not do improvement for WOnly]
in TcSMonad.

Removes some senseless work duplication in some cases (notably
Trac #12860); should not change behaviour.

3 years agoA tiny bit more tc tracing
Simon Peyton Jones [Fri, 25 Nov 2016 11:43:10 +0000 (11:43 +0000)] 
A tiny bit more tc tracing

3 years agoFix inference of partial signatures
Simon Peyton Jones [Fri, 25 Nov 2016 11:35:50 +0000 (11:35 +0000)] 
Fix inference of partial signatures

When we had
  f :: ( _ ) => blah
we were failing to call growThetaTyVars, as we do in the
no-type-signature case, and that meant that we weren't generalising
over the right type variables.  I'm quite surprised this didn't cause
problems earlier.

Anyway Trac #12844 showed it up and this patch fixes it

3 years agoRefactor functional dependencies a bit
Simon Peyton Jones [Thu, 24 Nov 2016 13:47:02 +0000 (13:47 +0000)] 
Refactor functional dependencies a bit

* Rename CoAxiom.Eqn = Pair Type to TypeEqn,
  and use it for fundeps

* Use the FunDepEqn for injectivity, which lets us share a bit
  more code, and (more important) brain cells

* When generating fundeps, take the max depth of the two
  constraints.  This aimed at tackling the strange loop in
  Trac #12860, but there is more to come for that.

* Improve pretty-printing with -ddump-tc-trace

3 years agoImprove pretty-printing of types
Simon Peyton Jones [Thu, 24 Nov 2016 12:32:11 +0000 (12:32 +0000)] 
Improve pretty-printing of types

In this commit
   commit 6c0f10fac767c49b65ed71e8eb8e78ca4f9062d5
   Author: Ben Gamari <>
   Date:   Sun Nov 13 16:17:37 2016 -0500

    Kill Type pretty-printer

we switched to pretty-printing a type by converting it to an
IfaceType and pretty printing that.  Very good.

This patch fixes two things

* The new story is terrible for debug-printing with -ddump-tc-trace,
  because all the extra info in an open type was discarded ty the
  conversion to IfaceType.

  This patch adds IfaceTcTyVar to IfaceType, to carry a TcTyVar in
  debug situations.  Quite an easy change, happily.  These things
  never show up in interface files.

* Now that we are going via IfaceType, it's essential to tidy before
  converting; otherwise
     forall k_23 k_34. blah
  is printed as
     forall k k. blah
  which is very unhelpful.  Again this only shows up in debug

3 years agoUse TyVars in PatSyns
Simon Peyton Jones [Fri, 25 Nov 2016 11:39:38 +0000 (11:39 +0000)] 
Use TyVars in PatSyns

I found that some TcTyVars were lurking in a PatSyn, because
tc_patsyn_finish was using the TcType -> TcType zonker rather
than the TcType -> Type zonker.  Eeek.

I fixing this I also tided up function naming a bit (still not
terrific), and removed the unused TcTyBinder type entirely.

3 years agoUse TyVars in a DFunUnfolding
Simon Peyton Jones [Thu, 24 Nov 2016 13:50:53 +0000 (13:50 +0000)] 
Use TyVars in a DFunUnfolding

En route to something else I discovered that TcInstDcls.addDFunPrags
was building a DFunUnfolding that had TcTyVars in it.  They should
never survive beyond type checking.  It was harmeless, but now affects
type pretty-printing.

This patch fixes it.

3 years agoUse 'v' instead of 'tpl' for template vars
Simon Peyton Jones [Thu, 24 Nov 2016 12:36:11 +0000 (12:36 +0000)] 
Use 'v' instead of 'tpl' for template vars

Just affects Id.mkTemplateLocal, and should make debug prints
a little less voluminous.  No user-visible change here.

3 years agoKill off ifaceTyVarsOfType
Simon Peyton Jones [Thu, 24 Nov 2016 12:26:24 +0000 (12:26 +0000)] 
Kill off ifaceTyVarsOfType

IfaceTypes are really not well suited to finding free variables etc.
Nevertheless, there was quite a lot of code to do just that; but it
was only used to see if a kind is variable-free so as to decide
whether to print a forall binder.

This patch simplifies to deal with just that case, replacing all
the free-vars stuff with just ifTypeIsVarFree

3 years agoTest Trac #12845
Simon Peyton Jones [Thu, 24 Nov 2016 12:15:34 +0000 (12:15 +0000)] 
Test Trac #12845

3 years agoTest Trac #12867
Simon Peyton Jones [Tue, 22 Nov 2016 10:35:28 +0000 (10:35 +0000)] 
Test Trac #12867

3 years agoFix a name-space problem with promotion
Simon Peyton Jones [Fri, 25 Nov 2016 14:31:33 +0000 (14:31 +0000)] 
Fix a name-space problem with promotion

Trac #12686 showed that we were allowing a term variable into
a type, by promotion.  I chose to squash this in the renamer.

3 years agoTypos in comments
Gabor Greif [Fri, 25 Nov 2016 13:09:47 +0000 (14:09 +0100)] 
Typos in comments

3 years agoPerf improvements in T6048, T10547
Simon Peyton Jones [Fri, 25 Nov 2016 08:29:43 +0000 (08:29 +0000)] 
Perf improvements in T6048, T10547

I think this wave of commits just made these two a little better;
they must have been close to the threshold before.

3 years agoRemove redundant kind check
Simon Peyton Jones [Thu, 24 Nov 2016 13:57:04 +0000 (13:57 +0000)] 
Remove redundant kind check

The invariants for CTyEqCan mean that this check isn't needed.
Turn it into an ASSERT.

3 years agoAllow TyVars in TcTypes
Simon Peyton Jones [Wed, 23 Nov 2016 16:00:00 +0000 (16:00 +0000)] 
Allow TyVars in TcTypes

Up to now we've had a rule that a TyVar can't apppear in a type
seen by the type checker; they should all be TcTyVars.  But:

a) With -XTypeInType it becomes much harder to exclude them;
   see Note [TcTyVars in the typechecker] in TcType.

b) It's unnecessary to exculde them; instead we can just treat
   a TyVar just like vanillaSkolemTv.

This is what was causing an ASSERT error in
indexed-types/should_fail/T12041, reported in Trac #12826.

That patch allows a TyVar in a TcType.  The most significant
change is to make Var.tcTyVarDetails return vanillaSkolemTv.
In fact it already did, but (a) it was not documented, and
(b) we never exploited it.  Now we rely on it.