theindigamer [Sat, 14 Apr 2018 23:17:04 +0000 (19:17 -0400)]
Fix markup in the UNPACK pragma section of the user's guide.

The ticket 5252 wasn't linked earlier.

Simon Peyton Jones [Tue, 17 Apr 2018 12:19:40 +0000 (13:19 +0100)]

Simon Peyton Jones [Mon, 16 Apr 2018 12:56:08 +0000 (13:56 +0100)]

Ömer Sinan Ağacan [Mon, 16 Apr 2018 18:58:21 +0000 (21:58 +0300)]
Remove markSignalHandlers

It's no-op on all platforms

Reviewers: bgamari, simonmar, erikd, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie, carter

Ben Gamari [Mon, 16 Apr 2018 18:35:41 +0000 (14:35 -0400)]
rts: Comment wibbles

Ben Gamari [Mon, 16 Apr 2018 18:36:11 +0000 (14:36 -0400)]
Revert "Enhanced constant folding"

I need to upgrade GHC on the CI builders before landing this due to a
bug in 8.2.1 triggered by this patch.

This reverts commit fea04defa64871caab6339ff3fc5511a272f37c7.

Ben Gamari [Fri, 13 Apr 2018 22:10:39 +0000 (18:10 -0400)]
users guide: Note improved constant folding in 8.6 release notes

Sylvain Henry [Fri, 13 Apr 2018 17:29:07 +0000 (13:29 -0400)]
Enhanced constant folding

Until now GHC only supported basic constant folding (lit op lit, expr op
0, etc.).

This patch uses laws of +/-/* (associativity, commutativity,
distributivity) to support some constant folding into nested
expressions.

Examples of new transformations:

- simple nesting: (10 + x) + 10 becomes 20 + x
- deep nesting: 5 + x + (y + (z + (t + 5))) becomes 10 + (x + (y + (z + t)))
- distribution: (5 + x) * 6 becomes 30 + 6*x
- simple factorization: 5 + x + (x + (x + (x + 5))) becomes 10 + (4 *x)
- siblings: (5 + 4*x) - (3*x + 2) becomes 3 + x

Test Plan: validate

Reviewers: simonpj, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

GHC Trac Issues: #9136

Ben Gamari [Fri, 13 Apr 2018 18:18:03 +0000 (14:18 -0400)]
Configure option to disable dtrace

Reviewers: hvr, bgamari

Subscribers: lelf, thomie, carter

Andreas Klebinger [Fri, 13 Apr 2018 17:27:36 +0000 (13:27 -0400)]
Omit ways depending on rts flags for #12870 related tests.

Some of these tests instruct the RTS to ignore all RTS flags being
passed.  While this is intended it causes test failures for some ways
like profiling which depend on passing RTS flags. So we skip these ways.

Test Plan: testsuite/tests/rts/flags\$ make slow

Reviewers: bgamari, simonmar, alpmestan

Reviewed By: alpmestan

Subscribers: alpmestan, thomie, carter

GHC Trac Issues: #12870

Andreas Klebinger [Fri, 13 Apr 2018 17:23:13 +0000 (13:23 -0400)]
Make shortcutting at the asm stage toggleable and default for O2.

Shortcutting during the asm stage of codegen is often redundant as most
cases get caught during the Cmm passes.  For example during compilation
of all of nofib only 508 jumps are eleminated.

For this reason I moved the pass from -O1 to -O2. I also made it
toggleable with -fasm-shortcutting.

Test Plan: ci

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: thomie, carter

Ben Gamari [Fri, 13 Apr 2018 17:22:55 +0000 (13:22 -0400)]
Declare `catchRetry#` lazy in its first argument

As per the results on item 1 in T14998, declaring `catchRetry#` lazy in
its first argument opens the possibility to remove `ExnStr` complexity
from strictness demands at virtually no regressions in NoFib.

This brings `catchRetry#` in line with other primops from the `catch*`
family.

Reviewers: bgamari, simonpj, nomeata

Reviewed By: bgamari

Subscribers: thomie, carter

GHC Trac Issues: #14998, #11222

Ryan Scott [Fri, 13 Apr 2018 16:54:31 +0000 (12:54 -0400)]
Correct FixIOException's @since annotation retroactively

Summary:
In D4113, a `FixIOException` data type was added with a
`@since TODO` annotation, but it seems that `TODO` made it out into
`base-4.11` itself. I've (retroactively) fixed this and added an
entry to the `base-4.11` entry in the `changelog`.

Reviewers: dfeuer, hvr, bgamari

Reviewed By: dfeuer

Subscribers: thomie, carter

GHC Trac Issues: #14356, #15025

Ben Gamari [Fri, 13 Apr 2018 16:10:45 +0000 (12:10 -0400)]

This reverts commit a303584e58b3f4791bc5881cb722e7f498e14554.

U-Maokai\andi [Fri, 13 Apr 2018 15:34:03 +0000 (11:34 -0400)]
Use newtype deriving for Hoopl code

Hoopl.Collections/.Label has newtype containers which derive
Functor/Traversable.
Enabling GeneralizedNewtypeDeriving improves allocation count and
compile time when building these files for GHC.

```
Vanilla, O1
<<ghc: 378555664 bytes, 76 GCs, 8663140/18535016 avg/max bytes
residency (5 samples), 63M in use, 0.000 INIT (0.000 elapsed), 0.219
MUT (0.354 elapsed), 0.141 GC (0.138 elapsed) :ghc>>

GeneralizedNewtypeDeriving , O1
<<ghc: 301026536 bytes, 78 GCs, 8392886/17181088 avg/max bytes
residency (5 samples), 63M in use, 0.000 INIT (0.000 elapsed), 0.156
MUT (0.230 elapsed), 0.094 GC (0.106 elapsed) :ghc>>
```

Test Plan: ci

Reviewers: bgamari, simonmar, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: mpickering, RyanGlScott, thomie, carter

Ryan Scott [Fri, 13 Apr 2018 15:33:54 +0000 (11:33 -0400)]
Fix #9438 by converting a panic to an error message

Previously, GHC was quite eager to panic whenever it was fed
an archive file when `DYNAMIC_GHC_PROGRAMS=YES`. This ought to be an
explicit error message instead, so this patch accomplishes just that.

Test Plan: make test TEST=T14708

Reviewers: Phyx, hvr, bgamari

Reviewed By: Phyx

Subscribers: thomie, carter

GHC Trac Issues: #9438, #14708, #15032

Matthew Pickering [Fri, 13 Apr 2018 15:33:40 +0000 (11:33 -0400)]
Remove unused function: mkFunCos

Reviewers: goldfire, bgamari, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie, carter

Andrey Mokhov [Fri, 13 Apr 2018 15:33:30 +0000 (11:33 -0400)]
Fix rts.cabal.in

On Windows the FFI library is called `libCffi-6` instead of `libCffi`.
This needs to be reflected in `rts.cabal.in` as otherwise we cannot
properly `copy` and `register` the RTS package on Windows.

Test Plan: Build GHC using Hadrian. Make build system does not use
`rts.cabal.in`.

Reviewers: bgamari, erikd, simonmar, Phyx

Reviewed By: Phyx

Subscribers: thomie, carter

Andreas Klebinger [Fri, 13 Apr 2018 15:32:23 +0000 (11:32 -0400)]
Update JMP_TBL targets during shortcutting in X86 NCG.

Without updating the JMP_TBL information the block list in
JMP_TBL contained blocks which were eliminated in some circumstances.

The actual assembly generation doesn't look at these fields so this
didn't cause any bugs yet. However as long as we carry this information
around we should make an effort to keep it correct.

Especially since it's useful for debugging purposes and can be used
for passes near the end of the codegen pipeline.
In particular it's used by jumpDestsOfInstr which without these changes
returns the wrong destinations.

Test Plan: ci

Reviewers: bgamari

Subscribers: thomie, carter

Ömer Sinan Ağacan [Fri, 13 Apr 2018 15:31:56 +0000 (11:31 -0400)]

CONSTR_NOCAF was introduced with 55d535da10d as a replacement for
CONSTR_STATIC and CONSTR_NOCAF_STATIC, however, as explained in Note
[static constructors], we copy CONSTR_NOCAFs (which can also be seen in
evacuate) during GC, and they can become dead, like other CONSTR_X_Ys.
processHeapClosureForDead is updated to reflect this.

Reviewers: bgamari, simonmar, erikd

Subscribers: thomie, carter

GHC Trac Issues: #7836

Michal Terepeta [Fri, 13 Apr 2018 15:31:38 +0000 (11:31 -0400)]
Revert "CmmPipeline: add a second pass of CmmCommonBlockElim"

This reverts commit d5c4d46a62ce6a0cfa6440344f707136eff18119.

Test Plan: ./validate

Reviewers: bgamari, simonmar

Subscribers: thomie, carter

GHC Trac Issues: #14989

Takenobu Tani [Fri, 13 Apr 2018 15:31:23 +0000 (11:31 -0400)]
users-guide: Update release notes and language extensions

Update release notes and language extensions for GHC 8.6.1.

* Add `BlockArguments` and `NumericUndescores` in release note
* Fix directive for `HexFloatLiterals` and `NumericUndescores`

Test Plan: build

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: thomie, carter

Ryan Scott [Fri, 13 Apr 2018 15:31:09 +0000 (11:31 -0400)]
Bump version numbers: base-4.11.1.0, integer-gmp-1.0.2.0

This takes care of bumping the `base` and `integer-gmp`
minor version numbers in anticipation of a GHC 8.4.2 release.

While I was in town, I also filled in a `@since TODO` Haddock
annotation for `powModSecInteger` in `integer-gmp` with
`1.0.2.0`, and updated the changelog accordingly.

Test Plan: ./validate

Reviewers: hvr, goldfire, bgamari

Reviewed By: bgamari

Subscribers: thomie, carter

GHC Trac Issues: #15025

Alan Zimmerman [Sun, 1 Apr 2018 19:33:53 +0000 (21:33 +0200)]
TTG for HsBinds and Data instances Plan B

Summary:
- Add the balance of the TTG extensions for hsSyn/HsBinds

- Move all the (now orphan) data instances into hsSyn/HsInstances and
use TTG Data instances Plan B

Illustrative numbers

Compiling HsInstances before using Plan B.

Max residency ~ 5G
<<ghc: 629,864,691,176 bytes, 5300 GCs,
321075437/1087762592 avg/max bytes residency (23 samples),
2953M in use, 0.000 INIT (0.000 elapsed),
383.511 MUT (384.986 elapsed), 37.426 GC (37.444 elapsed) :ghc>>

Using Plan B

Max residency 1.1G

<<ghc: 78,832,782,968 bytes, 2884 GCs,
222140352/386470152 avg/max bytes residency (34 samples),
1062M in use, 0.001 INIT (0.001 elapsed),
56.612 MUT (62.917 elapsed), 32.974 GC (32.923 elapsed) :ghc>>

Test Plan: ./validate

Reviewers: shayan-najd, goldfire, bgamari

Subscribers: goldfire, thomie, mpickering, carter

Tamar Christina [Thu, 12 Apr 2018 20:40:43 +0000 (21:40 +0100)]
Remove fs files from rts install-includes.

Summary:
They don't really need to be installed and will fix Hadrian installs.
Skipping review because change is trivial.

THis should be safe, but running it through CI to be sure.

Test Plan: ./validate

Reviewers: bgamari, erikd, simonmar

Subscribers: thomie, carter

Tamar Christina [Thu, 12 Apr 2018 06:50:28 +0000 (07:50 +0100)]
Revert "Remove fs files from rts install-includes."

This reverts commit 111556f9e809962a91666c99d96cf80db361ee32.

There is a mismatch between Hadrian and Make on these install-includes.
but the reachability analysis forces these headers to be exported even
through they can't vven be used.

Tamar Christina [Thu, 12 Apr 2018 03:06:11 +0000 (04:06 +0100)]
Remove fs files from rts install-includes.

They don't really need to be installed and will fix Hadrian installs.
Skipping review because change is trivial.

Joachim Breitner [Wed, 11 Apr 2018 15:24:01 +0000 (11:24 -0400)]
No need for sortQuantVars in Exitify after all

because `captured :: [Var]` is always in dependency order.

I added a comment in the crucial point so that this does not trip us up
again.

Ömer Sinan Ağacan [Wed, 11 Apr 2018 08:35:43 +0000 (11:35 +0300)]
Schedule.c: remove some unused parameters

Ömer Sinan Ağacan [Wed, 11 Apr 2018 07:50:11 +0000 (10:50 +0300)]
Schedule.c: remove unused code

Ömer Sinan Ağacan [Wed, 11 Apr 2018 07:44:00 +0000 (10:44 +0300)]
Move T14925.stdout to its correct location, remove expect_broken

Joachim Breitner [Tue, 10 Apr 2018 13:36:08 +0000 (09:36 -0400)]
In Exitify, zap idInfo of abstracted variables (fixes #15005)

This commit copies a small bit code from `SetLevels` which could
reasonably be put in `Id` as `zapAllIdinfo`; I did not do this to make
merging this commmit into `ghc-8.4` easier.

If this commit gets merged, then presumably after commit
3f59d3802170f495702674b4f8e4e80247803654 (test case) and
ae0cff0a1834d8b041b06d0e1ab6ce969aac44c8 (other fixes to Exitify.hs).

Richard Eisenberg [Tue, 10 Apr 2018 14:23:42 +0000 (10:23 -0400)]

Trac #14735 (derived from Trac #11735) found that 75% of compile
time was being spent in simplCast. This patch is the first in a series
to deal with that problem.

This particular patch actually has very little effect on performance; it
just refactors simplCast so that it builds Refl coercions less often.
Refl coercions require us to compute the type to put inside them, and
even if that's done lazily it is still work and code. Instead we use
Maybe Coercion with Nothing for Refl. This change also percolates to
pushCoTyArg and pushValArg.

Reviewers: goldfire, bgamari, simonpj

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14737

Ben Gamari [Sat, 7 Apr 2018 17:32:58 +0000 (13:32 -0400)]
Revert "Fix #14838 by marking TH-spliced code as FromSource"

This reverts commit ffb2738f86c4e4c3f0eaacf0a95d7326fdd2e383.

Due to #14987.

Reviewers: goldfire, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, thomie, carter

GHC Trac Issues: #14987, #14838

Edward Z. Yang [Sat, 7 Apr 2018 17:32:47 +0000 (13:32 -0400)]
Move gmp/config.mk.in to config.mk.in, fix #14972

Here's how the rube goldberg machine triggered the old bug:

1. If you have a file gmp/config.mk.in, then Cabal will
create a generated file in \$DIST/build/gmp/config.mk

2. When you attempt to load inplace integer-gmp via GHCi, it will
ask gcc (aka clang on OS X) for the file name of 'gmp', with
base directory set to \$DIST/build

3. There is a folder named 'gmp', and so this folder is returned
as the 'library' for gmp

4. GHCi loadArchive chokes to death trying to open a library
that is actually a folder

This patch solves the problem by breaking the chain at (1): if we
don't put config.mk in a folder named gmp, NO PROBLEM.

Signed-off-by: Edward Z. Yang <ezyang@fb.com>
Test Plan: validate

Reviewers: angerman, hvr, bgamari

Reviewed By: angerman

Subscribers: erikd, thomie, carter

GHC Trac Issues: #14972

Edward Z. Yang [Sat, 7 Apr 2018 17:32:31 +0000 (13:32 -0400)]

Test Plan: none

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: thomie, carter

Ben Gamari [Sat, 7 Apr 2018 17:32:04 +0000 (13:32 -0400)]
rts/RetainerProfile: Handle BLOCKING_QUEUES

push() considers BLOCKING_QUEUES to be an invalid closure type which
should never be present on the stack. However, retainClosure made no
accomodation for this and ended up pushing such a closure. This lead
to #14947.

Test Plan: Validate

Reviewers: simonmar, erikd

Reviewed By: simonmar

Subscribers: thomie, carter, RyanGlScott

GHC Trac Issues: #14947

Ben Gamari [Sat, 7 Apr 2018 17:31:42 +0000 (13:31 -0400)]
testsuite: Add test for negative sqrts (#10010)

Reviewers: hvr, alpmestan

Reviewed By: alpmestan

Subscribers: thomie, carter

GHC Trac Issues: #10010

Ömer Sinan Ağacan [Tue, 10 Apr 2018 14:06:27 +0000 (17:06 +0300)]

PARALLEL_HASKELL was long gone, remove references

[skip ci]

Joachim Breitner [Tue, 10 Apr 2018 13:26:09 +0000 (09:26 -0400)]

this succeeds on `master` right now, but I confirmed that it fails on
ghc-8.4.1-release.

mrkkrp [Tue, 10 Apr 2018 10:50:39 +0000 (17:50 +0700)]
Fix GHC collector flavor for Fedora job (Circle CI)

Ömer Sinan Ağacan [Tue, 10 Apr 2018 08:40:59 +0000 (11:40 +0300)]
Add a forgotten newline in a debug print

[skip ci]

Joachim Breitner [Thu, 5 Apr 2018 14:02:25 +0000 (10:02 -0400)]
CSE: Walk past join point lambdas (#15002)

As the CSE transformation traverses the syntax tree, it needs to go past
the lambdas of a join point, and only look for CSE opportunities inside,
as a join point’s lambdas must be preserved. Simple fix; comes with a
Note and a test case.

Thanks to Ryan Scott for an excellently minimized test case, and for
bisecting GHC.

Alan Zimmerman [Sun, 1 Apr 2018 19:33:53 +0000 (21:33 +0200)]
Restore Trees That Grow reverted commits

The following commits were reverted prior to the release of GHC 8.4.1,
because the time to derive Data instances was too long [1].

438dd1cbba13d35f3452b4dcef3f94ce9a216905 Phab:D4147
e3ec2e7ae94524ebd111963faf34b84d942265b4 Phab:D4177

The work is continuing, as the minimum bootstrap compiler is now
GHC 8.2.1, and this allows Plan B[2] for instances to be used.  This
will land in a following commit.

Ryan Scott [Mon, 9 Apr 2018 16:56:51 +0000 (12:56 -0400)]

Summary:
There has been at least one breaking change to
causing packages like `th-orphans` and `singletons` to fail to build
so that these packages can properly guard against these changes.

While I was in town, I also started a `changelog` section for
the next major version of `template-haskell`, and copied over

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: thomie, carter

Joachim Breitner [Fri, 6 Apr 2018 21:26:45 +0000 (17:26 -0400)]
Some cleanup of the Exitification code

based on a thorough review by Simon in comments
through 37.

The changes are:

* `isExitJoinId` is moved to `SimplUtils`, because
it is only valid when occurrence information is up-to-date.
* Abstracted variables are properly sorted using `sortQuantVars`
* Exitification does not set occ info.

of local names.

Gabriel Lebec [Sat, 7 Apr 2018 16:57:36 +0000 (12:57 -0400)]
docs(Data.Function): fix and augment `on` annotation

Simon Jakobi [Wed, 4 Apr 2018 22:00:25 +0000 (00:00 +0200)]
CoreUtils.filterAlts: Correct docs

`refineDefaultAlt` takes care of refining the default alt these days.

mrkkrp [Wed, 4 Apr 2018 13:38:54 +0000 (20:38 +0700)]
Run tests after artifact collection

Since for every job there are failing tests, if we try to upload artifacts
after tests, we won't get any. As a temporary measure I suggest uploading
artifacts before running tests. Once tests are fixed, we should peform

Simon Jakobi [Mon, 2 Apr 2018 20:27:44 +0000 (22:27 +0200)]
Improve documentation for refineDefaultAlt

Simon Jakobi [Mon, 2 Apr 2018 19:29:02 +0000 (21:29 +0200)]
Document SumTyCon

mrkkrp [Fri, 30 Mar 2018 10:18:16 +0000 (17:18 +0700)]
Collect build artifacts with S3

Alan Zimmerman [Wed, 28 Mar 2018 21:35:43 +0000 (23:35 +0200)]
Remove HasSourceText and SourceTextX classes

Test Plan : Validate

Ryan Scott [Sat, 7 Apr 2018 11:30:42 +0000 (07:30 -0400)]
Fix #14238 by always pretty-printing visible tyvars

Summary:
Before, GHC would never print visible tyvars in the absence
of `-fprint-explicit-foralls`, which led to `:kind` displaying
incorrect kinds in GHCi. The fix is simple—simply check beforehand
if any of the type variable binders are required when deciding when
to pretty-print them.

Test Plan: make test TEST=T14238

Reviewers: simonpj, goldfire, bgamari

Subscribers: thomie, carter

GHC Trac Issues: #14238

Ben Gamari [Fri, 6 Apr 2018 15:10:25 +0000 (11:10 -0400)]
testsuite: Accept output for T12593

Summary: This seems to have changed recently but the new output looks plausible.

Reviewers: RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, thomie, carter

Ben Gamari [Fri, 6 Apr 2018 15:10:07 +0000 (11:10 -0400)]
base: Add dependency on GHC.Integer in a few boot files

Summary:
The typechecker started trying to pull in GHC.Integer.Type's interface file
due to the change made in d8d4266bf73790f65b223ec16f645763eaed8be3. It's unclear
why the patch in question changed this behavior, but these typechecker-induced
dependencies are known to be a bit fragile and adding these imports ensures
that the build order is correct.

Test Plan: Validate

Reviewers: goldfire, hvr

Subscribers: thomie, carter

GHC Trac Issues: #15004

Simon Peyton Jones [Fri, 6 Apr 2018 08:46:29 +0000 (09:46 +0100)]

Ömer Sinan Ağacan [Thu, 5 Apr 2018 15:41:02 +0000 (18:41 +0300)]
Remove unused bdescr flag BF_FREE

Reviewers: bgamari, simonmar, erikd

Reviewed By: bgamari, simonmar

Subscribers: thomie, carter

Simon Peyton Jones [Tue, 3 Apr 2018 08:06:49 +0000 (09:06 +0100)]
Fix accidental breakage in T7050

I introduced a silly bug in

commit 9187d5fb1d3d38a4e607b0d61784c21447c8195b
Date:   Mon Apr 2 14:55:43 2018 +0100

that made test T7050 diverge.  This patch fixes it.

Richard Eisenberg [Mon, 2 Apr 2018 19:32:04 +0000 (15:32 -0400)]
Fix #14991.

It turns out that solveEqualities really does need to use simpl_top.
I thought that solveWanteds would be enough, and no existing test
case showed up the different. #14991 shows that we need simpl_top.
Easy enough to fix.

test case: dependent/should_compile/T14991

Richard Eisenberg [Mon, 2 Apr 2018 18:43:09 +0000 (14:43 -0400)]
Mark test as expected to pass.

This fixes the SplitWD "unexpected pass". This test was fixed
by ef443820b71f5c9c2dca362217f1a9fbab6dd736 and somehow fell
through my validation cracks.

Simon Peyton Jones [Mon, 2 Apr 2018 13:57:37 +0000 (14:57 +0100)]
SpecConstr: accommodate casts in value arguments

This commit:

Author: Simon Peyton Jones <simonpj@microsoft.com>
Date:   Thu Oct 12 11:00:19 2017 +0100

Do not bind coercion variables in SpecConstr rules

arranged to reject any SpecConstr call pattern that mentioned
a coercion in the pattern.

There was a good reason for that
-- see Note [SpecConstr and casts] --
but I didn't realise how important it was to accept patterns
that mention casts in /terms/.  Trac #14936 showed this up.

This patch just narrows the restriction to discard only
the cases where the coercion is mentioned only in types.
Fortunately that was pretty easy to do.

Simon Peyton Jones [Mon, 2 Apr 2018 13:55:43 +0000 (14:55 +0100)]

Trac #14978 pointed out that single-constructor GADTs should be
unpackable without trouble.

Acutally I realise that even existentials should be unpackable
too, but that's a bit more work, so it's not part of this patch.

See Note [Unpacking GADTs and existentials] in MkId.

Richard Eisenberg [Mon, 2 Apr 2018 13:39:19 +0000 (09:39 -0400)]
Test #14884, #14969

These were fixed by faec8d358985e5d0bf363bd96f23fe76c9e281f7

test cases: typecheck/should_fail/T14884
ghci/scripts/T14969

Richard Eisenberg [Sat, 17 Mar 2018 05:57:28 +0000 (01:57 -0400)]
Clarify comments around dropping Derived constraints

[skip ci]

Richard Eisenberg [Sun, 11 Mar 2018 13:45:31 +0000 (09:45 -0400)]
Apply Note [EtaAppCo] in OptCoercion to another case

Richard Eisenberg [Sat, 24 Feb 2018 16:49:15 +0000 (11:49 -0500)]
Apply the interim fix for #14119 to liftCoMatch

Matching in the presence of casts can happen in liftCoMatch, too.

Richard Eisenberg [Mon, 4 Sep 2017 21:27:17 +0000 (22:27 +0100)]
Track type variable scope more carefully.

The main job of this commit is to track more accurately the scope
of tyvars introduced by user-written foralls. For example, it would
be to have something like this:

forall a. Int -> (forall k (b :: k). Proxy '[a, b]) -> Bool

In that type, a's kind must be k, but k isn't in scope. We had a
terrible way of doing this before (not worth repeating or describing
here, but see the old tcImplicitTKBndrs and friends), but now
we have a principled approach: make an Implication when kind-checking
a forall. Doing so then hooks into the existing machinery for
preventing skolem-escape, performing floating, etc. This also means
that we bump the TcLevel whenever going into a forall.

The new behavior is done in TcHsType.scopeTyVars, but see also
TcHsType.tc{Im,Ex}plicitTKBndrs, which have undergone significant
rewriting. There are several Notes near there to guide you. Of
particular interest there is that Implication constraints can now
have skolems that are out of order; this situation is reported in
TcErrors.

A major consequence of this is a slightly tweaked process for type-
checking type declarations. The new Note [Use SigTvs in kind-checking
pass] in TcTyClsDecls lays it out.

The error message for dependent/should_fail/TypeSkolEscape has become
noticeably worse. However, this is because the code in TcErrors goes to
some length to preserve pre-8.0 error messages for kind errors. It's time
to rip off that plaster and get rid of much of the kind-error-specific
error messages. I tried this, and doing so led to a lovely error message
for TypeSkolEscape. So: I'm accepting the error message quality regression
for now, but will open up a new ticket to fix it, along with a larger
error-message improvement I've been pondering. This applies also to

Other minor changes:
- isUnliftedTypeKind didn't look for tuples and sums. It does now.

- check_type used check_arg_type on both sides of an AppTy. But the left
side of an AppTy isn't an arg, and this was causing a bad error message.
I've changed it to use check_type on the left-hand side.

- Some refactoring around when we print (TYPE blah) in error messages.
The changes decrease the times when we do so, to good effect.
Of course, this is still all controlled by
-fprint-explicit-runtime-reps

Fixes #14066 #14749

Test cases: dependent/should_compile/{T14066a,T14749},
dependent/should_fail/T14066{,c,d,e,f,g,h}

Tamar Christina [Sat, 31 Mar 2018 10:14:17 +0000 (11:14 +0100)]
testsuite: allow accepting of fine grained results [skip ci]

Summary:
Sometimes we need to be able to mass accept changes that are platform
specific and that can't be normalized away using our string formatters.

e.g. differences in I/O manager errors or behaviors. This allows one
to do so easier than before and less error prone.

I have updated the docs and made it clear this should only be used
when a normalizer won't work:

Test Plan: Manually tested while working on new I/O manager

Reviewers: bgamari

Subscribers: thomie, carter

Tamar Christina [Thu, 29 Mar 2018 13:22:09 +0000 (14:22 +0100)]
Remove MAX_PATH restrictions from RTS, I/O manager and various utilities

Summary:
This shims out fopen and sopen so that they use modern APIs under the hood
along with namespaced paths.

This lifts the MAX_PATH restrictions from Haskell programs and makes the new
limit ~32k.

There are only some slight caveats that have been documented.

Some utilities have not been upgraded such as lndir, since all these things are
different cabal packages I have been forced to copy the source in different places
which is less than ideal. But it's the only way to keep sdist working.

Test Plan: ./validate

Reviewers: hvr, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #10822

Ömer Sinan Ağacan [Sat, 31 Mar 2018 08:03:44 +0000 (11:03 +0300)]
printClosure: slightly improve MVAR printing

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: thomie, carter

Ömer Sinan Ağacan [Fri, 30 Mar 2018 11:58:57 +0000 (14:58 +0300)]
Update a few comments regarding CAF lists

[skip ci]

Simon Jakobi [Thu, 29 Mar 2018 11:35:40 +0000 (13:35 +0200)]
Fix syntax in -flate-specialise docs

mrkkrp [Tue, 27 Mar 2018 14:30:01 +0000 (21:30 +0700)]
Full AppVeyor build with tests

mrkkrp [Tue, 20 Mar 2018 07:23:07 +0000 (14:23 +0700)]
Rename CI docker images

Now we use the images from the ‘ghcci’ account on docker hub.

Simon Jakobi [Thu, 29 Mar 2018 10:07:17 +0000 (12:07 +0200)]
Update Note [Documenting optimisation flags]

Ben Gamari [Thu, 29 Mar 2018 14:45:21 +0000 (10:45 -0400)]
rts: One last formatting string fix

Ben Gamari [Tue, 27 Mar 2018 13:57:01 +0000 (09:57 -0400)]
More format string fixes

Ben Gamari [Mon, 26 Mar 2018 20:34:06 +0000 (16:34 -0400)]
rts: Fix profiled build after D4529

Ben Gamari [Mon, 26 Mar 2018 19:41:39 +0000 (15:41 -0400)]

Michal Terepeta [Mon, 26 Mar 2018 19:18:44 +0000 (15:18 -0400)]
CmmPipeline: add a second pass of CmmCommonBlockElim

The sinking pass often gets rid of unnecessary registers
registers/assignements exposing more opportunities for CBE, so this
commit adds a second round of CBE after the sinking pass and should
fix #12915 (and some examples in #14226).

Nofib results:
* Binary size:         0.9% reduction on average
* Compile allocations: 0.7% increase on average
* Runtime:             noisy, two separate runs of nofib showed a tiny
reduction on average, (~0.2-0.3%), but I think
this is mostly noise
* Compile time:        very noisy, but generally within +/- 0.5% (one
run faster, one slower)

One interesting part of this change is that running CBE invalidates
results of proc-point analysis. But instead of re-doing the whole
analysis, we can use the map that CBE creates for replacing/comparing
block labels (maps a redundant label to a useful one) to update the
results of proc-point analysis. This lowers the overhead compared to the
previous experiment in #12915.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
Test Plan: ./validate

Reviewers: bgamari, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #12915, #14226

Ben Gamari [Mon, 26 Mar 2018 19:18:00 +0000 (15:18 -0400)]
configure: Throw error if OS is found to be msys

Test Plan: Try running configure on Windows with msys and mingw
toolchains

Reviewers: Phyx, hvr

Reviewed By: Phyx

Subscribers: rwbarton, thomie, erikd, carter

Ryan Scott [Tue, 27 Mar 2018 12:52:15 +0000 (08:52 -0400)]
Fix the test for #13938

Only half of the test files were checked in for T13938.
This commit adds the missing half.

Simon Peyton Jones [Mon, 26 Mar 2018 16:16:14 +0000 (17:16 +0100)]
Deal with join points with RULES

Trac #13900 showed that when we have a join point that
has a RULE, we must push the continuation into the RHS
of the RULE.

See Note [Rules and unfolding for join points]

It's hard to tickle this bug, so I have not added a regression test.

Simon Peyton Jones [Mon, 26 Mar 2018 15:09:45 +0000 (16:09 +0100)]
White space only

Simon Peyton Jones [Mon, 26 Mar 2018 15:07:06 +0000 (16:07 +0100)]
Minor refactor and commments

Minor refactor and comments, following Ryan's excellent DeriveAnyClass
bug (Trac #14932)

Simon Peyton Jones [Mon, 26 Mar 2018 14:54:53 +0000 (15:54 +0100)]

I took 10 minute to fix this potential performance hole
(Trac #14263)

There are no actual bug reports against it, so no regression
test.

Simon Peyton Jones [Mon, 26 Mar 2018 10:26:42 +0000 (11:26 +0100)]

Alexander Vieth [Mon, 26 Mar 2018 15:19:27 +0000 (11:19 -0400)]
Fix performance of flattener patch (#12919)

This patch, authored by alexvieth and reviewed at D4451,
makes performance improvements by critically optimizing parts
of the flattener.

Summary:
T3064, T5321FD, T5321Fun, T9872a, T9872b, T9872c all pass.
T9872a and T9872c show improvements beyond the -5% threshold.
T9872d fails at 10.9% increased allocations.

Richard Eisenberg [Thu, 3 Aug 2017 19:18:39 +0000 (15:18 -0400)]
Fix #12919 by making the flattener homegeneous.

This changes a key invariant of the flattener. Previously,
flattening a type meant flattening its kind as well. But now,
flattening is always homogeneous -- that is, the kind of the
flattened type is the same as the kind of the input type.
This is achieved by various wizardry in the TcFlatten.flatten_many
function, as described in Note [flatten_many].

There are several knock-on effects, including some refactoring
in the canonicalizer to take proper advantage of the flattener's
changed behavior. In particular, the tyvar case of can_eq_nc' no
longer needs to take casts into account.

Another effect is that flattening a tyconapp might change it
into a casted tyconapp. This might happen if the result kind
of the tycon contains a variable, and that variable changes
during flattening. Because the flattener is homogeneous, it tacks
on a cast to keep the tyconapp kind the same. However, this
is problematic when flattening CFunEqCans, which need to have
an uncasted tyconapp on the LHS and must remain homogeneous.
The solution is a more involved canCFunEqCan, described in
Note [canCFunEqCan].

This patch fixes #13643 (as tested in typecheck/should_compile/T13643)
and the panic in typecheck/should_compile/T13822 (as reported in #14024).
Actually, there were two bugs in T13822: the first was just some
incorrect logic in tryFill (part of the unflattener) -- also fixed
in this patch -- and the other was the main bug fixed in this ticket.

The changes in this patch exposed a long-standing flaw in OptCoercion,
in that breaking apart an AppCo sometimes has unexpected effects on
kinds. See new Note [EtaAppCo] in OptCoercion, which explains the
problem and fix.

Also here is a reversion of the major change in
09bf135ace55ce2572bf4168124d631e386c64bb, affecting ctEvCoercion.
It turns out that making the flattener homogeneous changes the
invariants on the algorithm, making the change in that patch
no longer necessary.

This patch also fixes:
#14038 (dependent/should_compile/T14038)
#13910 (dependent/should_compile/T13910)
#13938 (dependent/should_compile/T13938)
#14441 (typecheck/should_compile/T14441)
#14556 (dependent/should_compile/T14556)
#14720 (dependent/should_compile/T14720)
#14749 (typecheck/should_compile/T14749)

Sadly, this patch negatively affects performance of type-family-
heavy code. The following patch fixes these performance degradations.
However, the performance fixes are somewhat invasive and so I've
kept them as a separate patch, labeling this one as [skip ci] so
that validation doesn't fail on the performance cases.

Richard Eisenberg [Mon, 26 Mar 2018 16:45:59 +0000 (12:45 -0400)]
Fix compilation stopper on macOS with -Werror

Commit 94f02547083cf6df686ea0b95fed050184c533de
added some pragmas that allow GCC to compile GHC, but stop
macOS's clang. This adds another counter-pragma to halp
clang lumber along, too.

Fixes #14977.

Ömer Sinan Ağacan [Mon, 26 Mar 2018 20:15:32 +0000 (23:15 +0300)]
Make it evident in types that StgLam can't have empty args

StgLam can't have empty arguments. Reflect this in types. An assertion
can now be deleted.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Douglas Wilson [Mon, 26 Mar 2018 19:16:11 +0000 (15:16 -0400)]
rts, base: Refactor stats.c to improve --machine-readable report

There should be no change in the output of the '+RTS -s' (summary)
report, or
the 'RTS -t' (one-line) report.

All data shown in the summary report is now shown in the machine
report.

All data in RTSStats is now shown in the machine readable report.

Example of the new output:
```
[("bytes allocated", "375016384")
,("num_GCs", "113")
,("average_bytes_used", "148348")
,("max_bytes_used", "206552")
,("num_byte_usage_samples", "2")
,("peak_megabytes_allocated", "6")
,("init_cpu_seconds", "0.001642")
,("init_wall_seconds", "0.001027")
,("mut_cpu_seconds", "3.020166")
,("mut_wall_seconds", "0.757244")
,("GC_cpu_seconds", "0.037750")
,("GC_wall_seconds", "0.009569")
,("exit_cpu_seconds", "0.000890")
,("exit_wall_seconds", "0.002551")
,("total_cpu_seconds", "3.060452")
,("total_wall_seconds", "0.770395")
,("major_gcs", "2")
,("allocated_bytes", "375016384")
,("max_live_bytes", "206552")
,("max_large_objects_bytes", "159344")
,("max_compact_bytes", "0")
,("max_slop_bytes", "59688")
,("max_mem_in_use_bytes", "6291456")
,("cumulative_live_bytes", "296696")
,("copied_bytes", "541024")
,("par_copied_bytes", "493976")
,("cumulative_par_max_copied_bytes", "104104")
,("cumulative_par_balanced_copied_bytes", "274456")
,("fragmentation_bytes", "2112")
,("alloc_rate", "124170795")
,("productivity_cpu_percent", "0.986838")
,("productivity_wall_percent", "0.982935")
,("sparks_count", "5836258")
,("sparks_converted", "237")
,("sparks_overflowed", "1990408")
,("sparks_dud ", "0")
,("sparks_gcd", "3455553")
,("sparks_fizzled", "390060")
,("work_balance", "0.555606")
,("n_capabilities", "4")
,("peak_worker_count", "9")
,("worker_count", "9")
,("gc_alloc_block_sync_spin", "162")
,("gc_alloc_block_sync_yield", "0")
,("gc_alloc_block_sync_spin", "162")
,("gc_spin_spin", "18840855")
,("gc_spin_yield", "10355")
,("mut_spin_spin", "70331392")
,("mut_spin_yield", "61700")
,("whitehole_gc_spin", "0")
,("whitehole_lockClosure_spin", "0")
,("whitehole_lockClosure_yield", "0")
,("whitehole_executeMessage_spin", "0")
,("any_work", "1667")
,("no_work", "1662")
,("scav_find_work", "1026")
,("gen_0_collections", "111")
,("gen_0_par_collections", "111")
,("gen_0_cpu_seconds", "0.036126")
,("gen_0_wall_seconds", "0.036126")
,("gen_0_max_pause_seconds", "0.036126")
,("gen_0_avg_pause_seconds", "0.000081")
,("gen_0_sync_spin", "21")
,("gen_0_sync_yield", "0")
,("gen_1_collections", "2")
,("gen_1_par_collections", "1")
,("gen_1_cpu_seconds", "0.001624")
,("gen_1_wall_seconds", "0.001624")
,("gen_1_max_pause_seconds", "0.001624")
,("gen_1_avg_pause_seconds", "0.000272")
,("gen_1_sync_spin", "3")
,("gen_1_sync_yield", "0")
]
```

Test Plan: Ensure that one-line and summary reports are unchanged.

Reviewers: erikd, simonmar, hvr

Subscribers: duog, carter, thomie, rwbarton

GHC Trac Issues: #14660

Ben Gamari [Mon, 26 Mar 2018 06:45:53 +0000 (02:45 -0400)]
circleci: Bump Hackage index state

mrkkrp [Wed, 21 Mar 2018 15:11:04 +0000 (22:11 +0700)]
Add a job running on Fedora

Reiner Pope [Mon, 26 Mar 2018 03:16:03 +0000 (23:16 -0400)]
Add unaligned bytearray access primops. Fixes #4442.

Reviewers: bgamari, simonmar

Reviewed By: bgamari

Subscribers: dfeuer, rwbarton, thomie, carter

GHC Trac Issues: #4442

Ben Gamari [Mon, 26 Mar 2018 02:17:24 +0000 (22:17 -0400)]

This flag reports a summary of the inlining decision for identifiers
prefixed by the flag's argument.

For example, `-dinline-check foo` will report why definitions whose
prefix is `foo` are inlined or not.

Previously the only way to get this information was to pass a
combination of `-dverbose-core2core` and `-ddump-inlinings`.

This combination led to a log of 12 million lines in a module of about
200 lines I recently had to apply it to. This flag provides a much more
direct way to find the occurence you care about.

Reviewers: osa1, dfeuer, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Ben Gamari [Mon, 26 Mar 2018 02:12:49 +0000 (22:12 -0400)]
base: Fix Unicode handling of TyCon's Show instance

Test Plan: `make test TEST=T14925`

Reviewers: hvr, dfeuer

Reviewed By: dfeuer

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14925

Oleg Grenrus [Mon, 26 Mar 2018 00:13:18 +0000 (20:13 -0400)]
llvmGen: Pass -optlo flags last to opt

LLVM, like GHC, processes flags in the order that they appear.
Consequently, we need to ensure the user-provided flags appear last so
they can override flags produced by GHC. See #14821.

Test Plan: `ghc -O2 -optlo-O2 -v3 \$FILE` and ensure that `opt` and `llc`
are invoked with `-O2`.

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14821

HE, Tao [Sun, 25 Mar 2018 19:34:45 +0000 (15:34 -0400)]
Fix scoped type variables in TH for several constructs

Namely class methods, default signatures and pattern synonyms.

When scoped type variables occur inside class default methods,
default signatures and pattern synonyms, avoid re-create explicit
type variables when represent the type signatures.

This patch should fix Trac#14885.

Signed-off-by: HE, Tao <sighingnow@gmail.com>
Test Plan: make test TEST="T14885a T14885b T14885c"

Reviewers: goldfire, bgamari, simonpj, RyanGlScott

Reviewed By: simonpj, RyanGlScott

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14885