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.

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.

Hurrah!

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

--------------------------------------------------------------------------------
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.

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.

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'.

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

GHC Trac Issues: #12549

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

Fixes #12903

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie

GHC Trac Issues: #12903

Simon Marlow [Fri, 2 Dec 2016 19:32:24 +0000 (14:32 -0500)]

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
code.

Reviewers: niteria, erikd, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

GHC Trac Issues: #12912

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

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

Ben Gamari [Thu, 1 Dec 2016 23:37:19 +0000 (18:37 -0500)]

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

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
encoding:ISO8859-1(checked)//TRANSLIT)

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

Reviewers: austin, hvr, rwbarton, bgamari

Reviewed By: bgamari

Subscribers: mpickering, rwbarton, thomie

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

Ben Gamari [Thu, 1 Dec 2016 20:04:44 +0000 (15:04 -0500)]

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

Gabor Greif [Thu, 1 Dec 2016 17:46:35 +0000 (18:46 +0100)]

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

MADV_FREE failed (e.g. since the kernel which the image is running on
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

GHC Trac Issues: #12865

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

GHC Trac Issues: #12909, #9184

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

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

GHC Trac Issues: #12907

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

GHC Trac Issues: #12901

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
line.

Test Plan: Validate on OpenBSD

Reviewers: austin, rwbarton

Reviewed By: rwbarton

Subscribers: thomie

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

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

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.

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.

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

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

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

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

GHC Trac Issues: #12871, #8974

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

Summary:
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

GHC Trac Issues: #12554

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

GHC Trac Issues: #12725, #12004

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`.

Specifically

```
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
terminate.

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
https://blogs.msdn.microsoft.com/oldnewthing/20130405-00/?p=4743

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

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

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

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 &&
PATH=/usr/local/bin:/mingw64/bin:\$APPDATA/cabal/bin:\$PATH &&
PYTHON=/usr/bin/python ./validate --quiet --testsuite-only

Reviewers: erikd, RyanGlScott, bgamari, austin

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

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 <michal.terepeta@gmail.com>
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

Shane [Tue, 29 Nov 2016 22:53:44 +0000 (17:53 -0500)]

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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 <michal.terepeta@gmail.com>
Test Plan: ./validate

Reviewers: austin, simonmar, bgamari

Reviewed By: bgamari

Subscribers: thomie

Ben Gamari [Tue, 29 Nov 2016 23:46:15 +0000 (18:46 -0500)]

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

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

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

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

Ben Gamari [Tue, 29 Nov 2016 20:58:36 +0000 (15:58 -0500)]

Unfortunately it's quite unclear what caused this.

Ben Gamari [Tue, 29 Nov 2016 19:45:19 +0000 (14:45 -0500)]

Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Ben Gamari [Tue, 29 Nov 2016 19:45:04 +0000 (14:45 -0500)]

Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

Ben Gamari [Tue, 29 Nov 2016 19:44:19 +0000 (14:44 -0500)]

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

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

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

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
noise.

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

Reviewed By: hvr

Subscribers: thomie

GHC Trac Issues: #12851

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

Reviewers: austin

Subscribers: mpickering, thomie

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 <michal.terepeta@gmail.com>
Test Plan: validate

Reviewers: simonmar, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #8809

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:

-fdiagnostics-color=(always|auto|never)

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

GHC Trac Issues: #8809

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`.

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

GHC Trac Issues: #12799

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

Gabor Greif [Tue, 29 Nov 2016 15:18:07 +0000 (16:18 +0100)]

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.

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

GHC Trac Issues: #12881

Simon Peyton Jones [Mon, 28 Nov 2016 17:41:27 +0000 (17:41 +0000)]

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.

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

...which is fixed by

Author: Simon Peyton Jones <simonpj@microsoft.com>
Date:   Tue Oct 25 15:22:17 2016 +0100

Fix a bug in mk_superclasses_of

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

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

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.

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]

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

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

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

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

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

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 <bgamari.foss@gmail.com>
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
printing.

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.

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.

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.

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

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

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

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.

Gabor Greif [Fri, 25 Nov 2016 13:09:47 +0000 (14:09 +0100)]

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.

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.

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

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.

Simon Peyton Jones [Tue, 25 Oct 2016 16:41:45 +0000 (17:41 +0100)]
Another major constraint-solver refactoring

This patch takes further my refactoring of the constraint
solver, which I've been doing over the last couple of months
in consultation with Richard.

It fixes a number of tricky bugs that made the constraint
solver actually go into a loop, including

Trac #12526
Trac #12444
Trac #12538

The main changes are these

* Flatten unification variables (fmvs/fuvs) appear on the LHS
of a tvar/tyvar equality; thus
fmv ~ alpha
and not
alpha ~ fmv

See Note [Put flatten unification variables on the left]
in TcUnify.  This is implemented by TcUnify.swapOverTyVars.

* Don't reduce a "loopy" CFunEqCan where the fsk appears on
the LHS:
F t1 .. tn ~ fsk
where 'fsk' is free in t1..tn.
See Note [FunEq occurs-check principle] in TcInteract

This neatly stops some infinite loops that people reported;
and it allows us to delete some crufty code in reduce_top_fun_eq.
And it appears to be no loss whatsoever.

As well as fixing loops, ContextStack2 and T5837 both terminate
when they didn't before.

* Previously we generated "derived shadow" constraints from
Wanteds, but we could (and sometimes did; Trac #xxxx) repeatedly
generate a derived shadow from the same Wanted.

A big change in this patch is to have two kinds of Wanteds:
[WD] behaves like a pair of a Wanted and a Derived
[W]  behaves like a Wanted only
See CtFlavour and ShadowInfo in TcRnTypes, and the ctev_nosh
field of a Wanted.

This turned out to be a lot simpler.  A [WD] gets split into a
[W] and a [D] in TcSMonad.maybeEmitShaodow.

* Rather than have a separate inert_model in the InertCans, I've
put the derived equalities back into inert_eqs.  We weren't
gaining anything from a separate field.

* Previously we had a mode for the constraint solver in which it
would more aggressively solve Derived constraints; it was used
for simplifying the context of a 'deriving' clause, or a 'default'
delcaration, for example.

But the complexity wasn't worth it; now I just make proper Wanted
constraints.  See TcMType.cloneWC

* Don't generate injectivity improvement for Givens; see
Note [No FunEq improvement for Givens] in TcInteract

* solveSimpleWanteds leaves the insolubles in-place rather than
returning them.  Simpler.

I also did lots of work on comments, including fixing Trac #12821.

Simon Peyton Jones [Wed, 23 Nov 2016 09:05:33 +0000 (09:05 +0000)]

I need this in a later patch

Simon Peyton Jones [Tue, 25 Oct 2016 14:25:03 +0000 (15:25 +0100)]

Simon Peyton Jones [Tue, 25 Oct 2016 14:22:17 +0000 (15:22 +0100)]
Fix a bug in mk_superclasses_of

This bug meant that we were less eager about expanding
tuple superclasses than we should have been; i.e. we stopped
too soon.  That's not fatal, beause we expand more superclasses
later, but it's less efficient.

Simon Peyton Jones [Tue, 25 Oct 2016 14:21:31 +0000 (15:21 +0100)]
Make a panic into an ASSERT

Dominik Bollmann [Thu, 24 Nov 2016 19:14:09 +0000 (06:14 +1100)]
Make quoting and reification return the same types

Previously TH was incorrectly returning a `Dec` using a `ConT` instead
of `PromotedT`.

Test Plan: validate

Reviewers: mainland, jstolarek, osa1, goldfire, thomie, bollmann,
bgamari, RyanGlScott, austin

Reviewed By: RyanGlScott

Subscribers: erikd

GHC Trac Issues: #11629

Ömer Sinan Ağacan [Thu, 24 Nov 2016 01:12:17 +0000 (04:12 +0300)]
Collect wildcards in sum types during renaming (#12711)

This patch also removes the "catch all" pattern in the function and
explicitly lists constructors to get a warning in the future if a new

Reviewers: bgamari, austin, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

GHC Trac Issues: #12711

Alexander Vershilov [Wed, 23 Nov 2016 01:57:08 +0000 (20:57 -0500)]

a non-threaded runtime. Previosly noop action was returned,
as a result it was not possible to unregister action, unless
data arrives to Fd or it's closed.

Fixes #12852.

Reviewers: simonmar, hvr, austin, bgamari, trofi

Reviewed By: bgamari, trofi

Subscribers: thomie

GHC Trac Issues: #12852

Ben Gamari [Tue, 22 Nov 2016 05:43:19 +0000 (00:43 -0500)]
ghc/hschooks.c: Fix include path of Rts.h

We need to ensure that we don't include Rts.h from bootstrap compiler.
See #12796.

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

GHC Trac Issues: #12796

Demi Obenour [Mon, 21 Nov 2016 22:09:27 +0000 (17:09 -0500)]
Make transformers upstream repository location consistent with others

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Edward Z. Yang [Mon, 21 Nov 2016 22:09:02 +0000 (17:09 -0500)]

Test Plan: none

Reviewers: austin, snowleopard, bgamari

Reviewed By: bgamari

Subscribers: thomie

Maciej Bielecki [Mon, 21 Nov 2016 22:08:45 +0000 (17:08 -0500)]
Implement fine-grained `-Werror=...` facility

This patch add new options `-Werror=...`, `-Wwarn=...` and
`-Wno-error=...` (synonym for `-Wwarn=...`).

Semantics:

- `-Werror` marks all warnings as fatal, including those that don't
have a warning flag, and CPP warnings.
- `-Werror=...` enables a warning and marks it as fatal
- `-Wwarn=...` marks a warning as non-fatal, but doesn't disable it

Test Plan: validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, svenpanne, RyanGlScott, thomie

GHC Trac Issues: #11219

Ben Gamari [Mon, 21 Nov 2016 22:08:38 +0000 (17:08 -0500)]
add ieee754 next* functions to math_funs

Reviewers: austin, simonmar, trofi, bgamari

Reviewed By: bgamari

Subscribers: mpickering, thomie

GHC Trac Issues: #12802

Ben Gamari [Mon, 21 Nov 2016 18:44:21 +0000 (13:44 -0500)]
testsuite: Add (still failing) testcase for #12550

I thought that this would naturally resolve itself with the elimination
of the Type pretty-printer but somehow all of the stars in result
position of an arrow are still rendered in non-Unicode syntax. Quite
odd.

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

GHC Trac Issues: #12550

Ben Gamari [Mon, 21 Nov 2016 18:43:48 +0000 (13:43 -0500)]
testsuite: Add (still broken) testcase for #12447

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

GHC Trac Issues: #12447

Ben Gamari [Mon, 21 Nov 2016 18:43:35 +0000 (13:43 -0500)]

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

GHC Trac Issues: #12024

Ben Gamari [Mon, 21 Nov 2016 18:42:15 +0000 (13:42 -0500)]

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

GHC Trac Issues: #12855

Gabor Greif [Mon, 21 Nov 2016 10:11:09 +0000 (11:11 +0100)]

Andreas Klebinger [Sun, 20 Nov 2016 00:03:51 +0000 (00:03 +0000)]
Updated code comment regarding EquationInfo. Trac #12856

Summary: Updated code comment regarding EquationInfo. Fixes T12856

Reviewers: austin, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, thomie

GHC Trac Issues: #12856

Matthew Pickering [Fri, 18 Nov 2016 16:28:30 +0000 (16:28 +0000)]
Optimise whole module exports

We directly build up the correct AvailInfos rather than generating
lots of singleton instances and combining them with expensive calls to
unionLists.

There are two other small changes.

* Pushed the nubAvails call into the explicit export list
branch as we construct them correctly and uniquely ourselves.
* fix_faminst only needs to check the first element of the export
list as we maintain the (yucky) invariant that the parent is the
first thing in it.

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: simonpj, thomie, niteria

GHC Trac Issues: #12754

Ryan Scott [Fri, 18 Nov 2016 14:33:01 +0000 (09:33 -0500)]

Summary:
Fixes #12438. As discussed on the Haskell libraries mailing list here:

Reviewers: hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

GHC Trac Issues: #12438

Gabor Greif [Fri, 18 Nov 2016 09:57:46 +0000 (10:57 +0100)]
Spelling in comment only

Tamar Christina [Fri, 18 Nov 2016 08:50:11 +0000 (08:50 +0000)]

Summary:
Add some missing symbols that we
export from the public headers but forgot to include
in the runtime linker's symbol table.

This is a bit of a unsatifactory patch, since we have a bit of a
cat and mouse game going. We should find a way to automate this.

But I know of no good solutions at the moment that won't add all
rts symbols (including those we don't have an extern declaration for.).

So for now, just add the ones reported missing.

Test Plan: inplace/bin/ghc-stage2.exe --interactive

Reviewers: RyanGlScott, austin, erikd, simonmar, bgamari

Reviewed By: bgamari