ghc.git
19 months agoAdd a forgotten newline in a debug print
Ö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]

19 months agoCSE: Walk past join point lambdas (#15002)
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.

Differential Revision: https://phabricator.haskell.org/D4572

19 months agoRestore Trees That Grow reverted commits
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
 47ad6578ea460999b53eb4293c3a3b3017a56d65 Phab:D4186

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.

Updates Haddock submodule

[1] https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/Instances
[2] https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/Instances#PLANB

19 months agoBump template-haskell to 2.14.0.0
Ryan Scott [Mon, 9 Apr 2018 16:56:51 +0000 (12:56 -0400)] 
Bump template-haskell to 2.14.0.0

Summary:
There has been at least one breaking change to
`template-haskell` (the removal of `qAddForeignFile`) which is
causing packages like `th-orphans` and `singletons` to fail to build
with GHC HEAD. Let's bump `template-haskell`'s major version number
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
finishing touches for `template-haskell-2.13.0.0`.

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: thomie, carter

Differential Revision: https://phabricator.haskell.org/D4558

19 months agoSome cleanup of the Exitification code
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
https://ghc.haskell.org/trac/ghc/ticket/14152#comment:33
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.

 And then minor quibles to notes and avoiding some unhelpful shadowing
 of local names.

 Differential Revision: https://phabricator.haskell.org/D4576

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

19 months agoCoreUtils.filterAlts: Correct docs
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.

19 months agoRun tests after artifact collection
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
artifact uploading after tests again.

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

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

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

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

Updates haddock submodule to match.

Test Plan : Validate

Differential Revision: https://phabricator.haskell.org/D4199

19 months agoFix #14238 by always pretty-printing visible tyvars
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

Differential Revision: https://phabricator.haskell.org/D4564

20 months agotestsuite: Accept output for T12593
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

Differential Revision: https://phabricator.haskell.org/D4561

20 months agobase: Add dependency on GHC.Integer in a few boot files
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

Differential Revision: https://phabricator.haskell.org/D4560

20 months agoComments only, about exitifcation
Simon Peyton Jones [Fri, 6 Apr 2018 08:46:29 +0000 (09:46 +0100)] 
Comments only, about exitifcation

20 months agoRemove unused bdescr flag BF_FREE
Ö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

Differential Revision: https://phabricator.haskell.org/D4539

20 months agoFix accidental breakage in T7050
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

  Allow unpacking of single-data-con GADTs

that made test T7050 diverge.  This patch fixes it.

20 months agoFix #14991.
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

20 months agoMark test as expected to pass.
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.

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

This commit:

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

20 months agoAllow unpacking of single-data-con GADTs
Simon Peyton Jones [Mon, 2 Apr 2018 13:55:43 +0000 (14:55 +0100)] 
Allow unpacking of single-data-con GADTs

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.

20 months agoTest #14884, #14969
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

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

[skip ci]

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

20 months agoApply the interim fix for #14119 to liftCoMatch
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.

20 months agoTrack type variable scope more carefully.
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
dependent/should_fail/{BadTelescope2,T14066,T14066e}, polykinds/T11142.

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}

20 months agotestsuite: allow accepting of fine grained results [skip ci]
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:

https://ghc.haskell.org/trac/ghc/wiki/Building/RunningTests/Updating

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

Reviewers: bgamari

Subscribers: thomie, carter

Differential Revision: https://phabricator.haskell.org/D4549

20 months agoRemove MAX_PATH restrictions from RTS, I/O manager and various utilities
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

Differential Revision: https://phabricator.haskell.org/D4416

20 months agoprintClosure: slightly improve MVAR printing
Ö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

Differential Revision: https://phabricator.haskell.org/D4541

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

[skip ci]

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

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

20 months agoRename CI docker images
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.

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

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

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

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

20 months agotestsuite: Add test for #14965
Ben Gamari [Mon, 26 Mar 2018 19:41:39 +0000 (15:41 -0400)] 
testsuite: Add test for #14965

20 months agoCmmPipeline: add a second pass of CmmCommonBlockElim
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

Differential Revision: https://phabricator.haskell.org/D4417

20 months agoconfigure: Throw error if OS is found to be msys
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

Differential Revision: https://phabricator.haskell.org/D4526

20 months agoFix the test for #13938
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.

20 months agoDeal with join points with RULES
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.

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

20 months agoMinor refactor and commments
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)

20 months agoAvoid quadratic complexity in typeKind
Simon Peyton Jones [Mon, 26 Mar 2018 14:54:53 +0000 (15:54 +0100)] 
Avoid quadratic complexity in typeKind

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

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

20 months agoComments only
Simon Peyton Jones [Mon, 26 Mar 2018 10:26:42 +0000 (11:26 +0100)] 
Comments only

20 months agoFix performance of flattener patch (#12919)
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.

20 months agoFix #12919 by making the flattener homegeneous.
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.

20 months agoFix compilation stopper on macOS with -Werror
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.

20 months agoMake it evident in types that StgLam can't have empty args
Ö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

Differential Revision: https://phabricator.haskell.org/D4484

20 months agorts, base: Refactor stats.c to improve --machine-readable report
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
readable
report.

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

init times are added to RTSStats and added to GHC.Stats.

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")
 ,("bound_task_count", "1")
 ,("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")
 ,("task_count", "10")
 ,("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")
 ,("waitForGcThreads_spin", "241")
 ,("waitForGcThreads_yield", "2797")
 ,("whitehole_gc_spin", "0")
 ,("whitehole_lockClosure_spin", "0")
 ,("whitehole_lockClosure_yield", "0")
 ,("whitehole_executeMessage_spin", "0")
 ,("whitehole_threadPaused_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

Differential Revision: https://phabricator.haskell.org/D4529

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

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

20 months agoAdd unaligned bytearray access primops. Fixes #4442.
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

Differential Revision: https://phabricator.haskell.org/D4488

20 months agoAdd new debugging flag -dinline-check
Ben Gamari [Mon, 26 Mar 2018 02:17:24 +0000 (22:17 -0400)] 
Add new debugging flag -dinline-check

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

Differential Revision: https://phabricator.haskell.org/D4458

20 months agobase: Fix Unicode handling of TyCon's Show instance
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

Differential Revision: https://phabricator.haskell.org/D4530

20 months agollvmGen: Pass -optlo flags last to opt
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

Differential Revision: https://phabricator.haskell.org/D4421

20 months agoFix scoped type variables in TH for several constructs
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

Differential Revision: https://phabricator.haskell.org/D4469

20 months agoDon't refer to blocks in debug info when -g1
Bartosz Nitka [Sun, 25 Mar 2018 19:34:27 +0000 (15:34 -0400)] 
Don't refer to blocks in debug info when -g1

-g1 removes block information, but it turns out that procs can
refer to block information through parents.
Note [Splitting DebugBlocks] explains the parentage relationship.

Test Plan:
* ./validate
* added a new test

Reviewers: bgamari, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14894

Differential Revision: https://phabricator.haskell.org/D4496

20 months agoFix #14916 with an additional validity check in deriveTyData
Ryan Scott [Sun, 25 Mar 2018 19:34:05 +0000 (15:34 -0400)] 
Fix #14916 with an additional validity check in deriveTyData

Manually-written instances and standalone-derived instances
have the benefit of having the `checkValidInstHead` function run over
them, which catches manual instances of built-in types like `(~)` and
`Coercible`. However, instances generated from `deriving` clauses
weren't being passed through `checkValidInstHead`, leading to
confusing results as in #14916.

`checkValidInstHead` also has additional validity checks for language
extensions like `FlexibleInstances` and `MultiParamTypeClasses`. Up
until now, GHC has never required these language extensions for
`deriving` clause, so to avoid unnecessary breakage, I opted to
suppress these language extension checks for `deriving` clauses, just
like we currently suppress them for `SPECIALIZE instance` pragmas.

Test Plan: make test TEST=T14916

Reviewers: goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14916

Differential Revision: https://phabricator.haskell.org/D4501

20 months agotestsuite: Add test for #14925
Ben Gamari [Sun, 25 Mar 2018 19:33:48 +0000 (15:33 -0400)] 
testsuite: Add test for #14925

Test Plan: Validate

Reviewers: alpmestan

Reviewed By: alpmestan

Subscribers: alpmestan, leftaroundabout, rwbarton, thomie, carter

GHC Trac Issues: #14925

Differential Revision: https://phabricator.haskell.org/D4512

20 months agorts/RetainerProfile: Dump closure type if push() fails
Ryan Scott [Sun, 25 Mar 2018 19:33:37 +0000 (15:33 -0400)] 
rts/RetainerProfile: Dump closure type if push() fails

While investigating #14947, I noticed that the `barf`ed
error message in `push()` doesn't print out the closure type that
causes it to crash. Let's do so.

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: alexbiehl, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4525

20 months agodocument: fix trac issue #14229
Võ Anh Duy [Sun, 25 Mar 2018 18:06:11 +0000 (14:06 -0400)] 
document: fix trac issue #14229

Accroding to
https://git.haskell.org/ghc.git/commitdiff/49672659113371c3bee691e6d913d
f8e6f60a1d8,
`-Wredundant-constraints` is no longer turn on by default.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4528

20 months agoFix panic on module re-exports of DuplicateRcordFields
Adam Gundry [Sun, 25 Mar 2018 18:05:55 +0000 (14:05 -0400)] 
Fix panic on module re-exports of DuplicateRcordFields

Test Plan: new test overloadedrecflds/should_fail/T14953

Reviewers: mpickering, simonpj, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14953

Differential Revision: https://phabricator.haskell.org/D4527

20 months agoRun C finalizers incrementally during mutation
Simon Marlow [Sun, 25 Mar 2018 18:04:02 +0000 (14:04 -0400)] 
Run C finalizers incrementally during mutation

With a large heap it's possible to build up a lot of finalizers
between GCs.  We've observed GC spending up to 50% of its time running
finalizers.  But there's no reason we have to run finalizers during
GC, and especially no reason we have to block *all* the mutator
threads while *one* GC thread runs finalizers one by one.

I thought about a bunch of alternative ways to handle this, which are
documented along with runSomeFinalizers() in Weak.c.  The approach I
settled on is to have a capability run finalizers if it is idle.  So
running finalizers is like a low-priority background thread. This
requires some minor scheduler changes, but not much.  In the future we
might be able to move more GC work into here (I have my eye on freeing
large blocks, for example).

Test Plan:
* validate
* tested on our system and saw reductions in GC pauses of 40-50%.

Reviewers: bgamari, niteria, osa1, erikd

Reviewed By: bgamari, osa1

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4521

20 months agoAdd Note [BLACKHOLE points to IND]
Simon Marlow [Sun, 25 Mar 2018 18:02:16 +0000 (14:02 -0400)] 
Add Note [BLACKHOLE points to IND]

Test Plan: ci

Reviewers: osa1, bgamari, erikd

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4517

20 months agoFix two pernicious bugs in DeriveAnyClass
Ryan Scott [Sun, 25 Mar 2018 18:00:39 +0000 (14:00 -0400)] 
Fix two pernicious bugs in DeriveAnyClass

The way GHC was handling `DeriveAnyClass` was subtly wrong
in two notable ways:

* In `inferConstraintsDAC`, we were //always// bumping the `TcLevel`
  of newly created unification variables, under the assumption that
  we would always place those unification variables inside an
  implication constraint. But #14932 showed precisely the scenario
  where we had `DeriveAnyClass` //without// any of the generated
  constraints being used inside an implication, which made GHC
  incorrectly believe the unification variables were untouchable.
* Even worse, we were using the generated unification variables from
  `inferConstraintsDAC` in every single iteration of `simplifyDeriv`.
  In #14933, however, we have a scenario where we fill in a
  unification variable with a skolem in one iteration, discard it,
  proceed on to another iteration, use the same unification variable
  (still filled in with the old skolem), and try to unify it with
  a //new// skolem! This results in an utter disaster.

The root of both these problems is `inferConstraintsDAC`. This patch
fixes the issue by no longer generating unification variables
directly in `inferConstraintsDAC`. Instead, we store the original
variables from a generic default type signature in `to_metas`, a new
field of `ThetaOrigin`, and in each iteration of `simplifyDeriv`, we
generate fresh meta tyvars (avoiding the second issue). Moreover,
this allows us to more carefully fine-tune the `TcLevel` under which
we create these meta tyvars, fixing the first issue.

Test Plan: make test TEST="T14932 T14933"

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14932, #14933

Differential Revision: https://phabricator.haskell.org/D4507

20 months agoSupport iOS variants elsewhere when configuring
John Ericson [Sun, 25 Mar 2018 18:00:26 +0000 (14:00 -0400)] 
Support iOS variants elsewhere when configuring

Reviewers: hvr, bgamari, angerman

Reviewed By: angerman

Subscribers: rwbarton, thomie, erikd, carter, angerman

Differential Revision: https://phabricator.haskell.org/D4513

20 months agotestsuite: Add test for #14931
Ben Gamari [Sun, 25 Mar 2018 18:00:12 +0000 (14:00 -0400)] 
testsuite: Add test for #14931

Reviewers: alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14931

Differential Revision: https://phabricator.haskell.org/D4518

20 months agoSupport adding objects from TH
Alec Theriault [Sun, 25 Mar 2018 17:59:27 +0000 (13:59 -0400)] 
Support adding objects from TH

The user facing TH interface changes are:

  * 'addForeignFile' is renamed to 'addForeignSource'
  * 'qAddForeignFile'/'addForeignFile' now expect 'FilePath's
  * 'RawObject' is now a constructor for 'ForeignSrcLang'
  * 'qAddTempFile'/'addTempFile' let you request a temporary file
    from the compiler.

Test Plan: unsure about this, added a TH test

Reviewers: goldfire, bgamari, angerman

Reviewed By: bgamari, angerman

Subscribers: hsyl20, mboes, carter, simonmar, bitonic, ljli, rwbarton, thomie

GHC Trac Issues: #14298

Differential Revision: https://phabricator.haskell.org/D4217

20 months agoAllow PartialTypeSignatures in standalone deriving contexts
Ryan Scott [Fri, 23 Mar 2018 16:06:04 +0000 (12:06 -0400)] 
Allow PartialTypeSignatures in standalone deriving contexts

Summary:
At its core, this patch is a simple tweak that allows a user
to write:

```lang=haskell
deriving instance _ => Eq (Foo a)
```

Which is functionally equivalent to:

```lang=haskell
data Foo a = ...
  deriving Eq
```

But with the added flexibility that `StandaloneDeriving` gives you
(namely, the ability to use it anywhere, not just in the same module
that `Foo` was declared in). This fixes #13324, and should hopefully
address a use case brought up in #10607.

Currently, only the use of a single, extra-constraints wildcard is
permitted in a standalone deriving declaration. Any other wildcard
is rejected, so things like
`deriving instance (Eq a, _) => Eq (Foo a)` are currently forbidden.

There are quite a few knock-on changes brought on by this change:

* The `HsSyn` type used to represent standalone-derived instances
  was previously `LHsSigType`, which isn't sufficient to hold
  wildcard types. This needed to be changed to `LHsSigWcType` as a
  result.

* Previously, `DerivContext` was a simple type synonym for
  `Maybe ThetaType`, under the assumption that you'd only ever be in
  the `Nothing` case if you were in a `deriving` clause. After this
  patch, that assumption no longer holds true, as you can also be
  in this situation with standalone deriving when an
  extra-constraints wildcard is used.

  As a result, I changed `DerivContext` to be a proper datatype that
  reflects the new wrinkle that this patch adds, and plumbed this
  through the relevant parts of `TcDeriv` and friends.

* Relatedly, the error-reporting machinery in `TcErrors` also assumed
  that if you have any unsolved constraints in a derived instance,
  then you should be able to fix it by switching over to standalone
  deriving. This was always sound advice before, but with this new
  feature, it's possible to have unsolved constraints even when
  you're standalone-deriving something!

  To rectify this, I tweaked some constructors of `CtOrigin` a bit
  to reflect this new subtlety.

This requires updating the Haddock submodule. See my fork at
https://github.com/RyanGlScott/haddock/commit/067d52fd4be15a1842cbb05f42d9d482de0ad3a7

Test Plan: ./validate

Reviewers: simonpj, goldfire, bgamari

Reviewed By: simonpj

Subscribers: goldfire, rwbarton, thomie, mpickering, carter

GHC Trac Issues: #13324

Differential Revision: https://phabricator.haskell.org/D4383

20 months agoSpecial-case record fields ending with hash when deriving Read
Ryan Scott [Fri, 23 Mar 2018 15:40:02 +0000 (11:40 -0400)] 
Special-case record fields ending with hash when deriving Read

Summary:
In commit dbd81f7e86514498218572b9d978373b1699cc5b, a
regression was inadvertently introduced which caused derived `Read`
instances for record data types with fields ending in a `#` symbol
(using `MagicHash`) would no longer parse on valid output. This
is ultimately due to the same reasons as #5041, as we cannot parse
a field name like `foo#` as a single identifier. We fix this issue
by employing the same workaround as in #5041: first parse the
identifier name `foo`, then then symbol `#`.

This is accomplished by the new `readFieldHash` function in
`GHC.Read`. This will likely warrant a `base-4.11.1.0` release.

Test Plan: make test TEST=T14918

Reviewers: tdammers, hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14918

Differential Revision: https://phabricator.haskell.org/D4502

20 months agoImprove shortOutIndirections slightly
Simon Peyton Jones [Thu, 22 Mar 2018 14:31:45 +0000 (14:31 +0000)] 
Improve shortOutIndirections slightly

I found (when investigating Trac #14955) a binding looking like

   Rec { exported_id = ....big...lcl_id...
       ; lcl_id = exported_id }

but bizarrely 'lcl_id' was chosen as the loop breaker, and never
inlined.  It turned out to be an unintended consequence of the
shortOutIndirections code in SimplCore.  Easily fixed.

20 months agoFix over-eager constant folding in bitInteger
Simon Peyton Jones [Thu, 22 Mar 2018 09:51:24 +0000 (09:51 +0000)] 
Fix over-eager constant folding in bitInteger

The RULE for bitInteger was trying to constant-fold

    bitInteger 9223372036854775807#

which meant constructing a gigantic Integer at compile
time.  Very bad idea!  Easily fixed.

Fixes Trac #14959, #14962.

20 months agoFix two obscure bugs in rule matching
Simon Peyton Jones [Wed, 21 Mar 2018 17:25:23 +0000 (17:25 +0000)] 
Fix two obscure bugs in rule matching

This patch fixes Trac #14777, a compiler crash.

There were actually two bugs.

1. In Rules.matchN, I was (consciously) not rename the template binders
   of the rule. Sadly, in rare cases an accidental coincidence of
   uniques could mean that a term variable was mapped to a type
   variable, utterly bogusly.  See "Historical note" in
   Note [Cloning the template binders] in Rules.

   This was hard to find, but easy to fix.

2. The fix to (1) showed up a bug in Unify.hs.  The test in
   Unify.tvBindFlag was previously using the domain of the RnEnv2
   to detect locally-bound variables (e.g. when unifying under
   a forall).  That's fine when teh RnEnv2 starts empty, as it
   does in most entry points.  But the tcMatchTyKisX entry point,
   used from the rule matcher, passes in a non-empty RnEnv2 (by
   design).  Now the domain of the RnEnv doesn't idenfity those
   locally-bound variables any more :-(.

   Solution: extend UmEnv with a new field um_skols, to capture
   the skolems directly.  Simple, easy, works.

20 months agoAllow as-patterns in unidirectional patttern synonyms
Simon Peyton Jones [Wed, 21 Mar 2018 17:21:15 +0000 (17:21 +0000)] 
Allow as-patterns in unidirectional patttern synonyms

This patch implements GHC Proposal #94, described here
   https://github.com/ghc-proposals/ghc-proposals/pull/94

The effect is simply to lift a totally-undocumented restriction to
unidirecional pattern synonyms, namely that they can't have as-patterns
or n+k patterns.

The fix is easy: just remove the checks.

I also took the opportunity to improve the manual entry for
the semantics of pattern matching for pattern synonyms.

20 months agoFix #14869 by being more mindful of Type vs. Constraint
Ryan Scott [Wed, 21 Mar 2018 12:59:28 +0000 (08:59 -0400)] 
Fix #14869 by being more mindful of Type vs. Constraint

Summary:
Before, we were using `isLiftedTypeKind` in `reifyType`
before checking if a type was `Constraint`. But as it turns out,
`isLiftedTypeKind` treats `Constraint` the same as `Type`, so every
occurrence of `Constraint` would be reified as `Type`! To make things
worse, the documentation for `isLiftedTypeKind` stated that it
treats `Constraint` //differently// from `Type`, which simply isn't
true.

This revises the documentation for `isLiftedTypeKind` to reflect
reality, and defers the `isLiftedTypeKind` check in `reifyType` so
that it does not accidentally swallow `Constraint`.

Test Plan: make test TEST=T14869

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14869

Differential Revision: https://phabricator.haskell.org/D4474

20 months agoFix seq# case of exprOkForSpeculation
Simon Peyton Jones [Tue, 20 Mar 2018 16:30:01 +0000 (16:30 +0000)] 
Fix seq# case of exprOkForSpeculation

This subtle patch fixes Trac #5129 (again; comment:20
and following).

I took the opportunity to document seq# properly; see
Note [seq# magic] in PrelRules, and Note [seq# and expr_ok]
in CoreUtils.

20 months agoRevert "rts, base: Refactor stats.c to improve --machine-readable report"
Ben Gamari [Tue, 20 Mar 2018 16:17:43 +0000 (12:17 -0400)] 
Revert "rts, base: Refactor stats.c to improve --machine-readable report"

This reverts commit 2d4bda2e4ac68816baba0afab00da6f769ea75a7.

20 months agoUpdate T5129 test:
Ömer Sinan Ağacan [Tue, 20 Mar 2018 07:48:14 +0000 (10:48 +0300)] 
Update T5129 test:

- Add some comments
- Remove $s as they complicate desugarer output for no reason
- Remove an indirection, case_negative is now main

20 months agoconfigure: Accept version suffix in solaris name
Ben Gamari [Mon, 19 Mar 2018 17:32:14 +0000 (13:32 -0400)] 
configure: Accept version suffix in solaris name

Summary: OpenIndiana apparently reports a triple of i386-pc-solaris2.11.

Reviewers: hvr

Subscribers: rwbarton, thomie, erikd, carter

Differential Revision: https://phabricator.haskell.org/D4487

20 months agorelnotes: Fix parsing of Version: field from Cabal file
Ben Gamari [Mon, 19 Mar 2018 17:31:46 +0000 (13:31 -0400)] 
relnotes: Fix parsing of Version: field from Cabal file

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4491

20 months agoBump autoconf version bound to >= 2.69
Ben Gamari [Mon, 19 Mar 2018 17:31:31 +0000 (13:31 -0400)] 
Bump autoconf version bound to >= 2.69

Reviewers: hvr

Subscribers: rwbarton, thomie, erikd, carter

GHC Trac Issues: #14910

Differential Revision: https://phabricator.haskell.org/D4495

20 months agoAdd -flate-specialise which runs a later specialisation pass
Matthew Pickering [Mon, 19 Mar 2018 17:29:14 +0000 (13:29 -0400)] 
Add -flate-specialise which runs a later specialisation pass

Runs another specialisation pass towards the end of the optimisation
pipeline. This can catch specialisation opportunities which arose from
the previous specialisation pass or other inlining.

You might want to use this if you are you have a type class method
which returns a constrained type. For example, a type class where one
of the methods implements a traversal.

It is not enabled by default or any optimisation level. Only by
manually enabling the flag `-flate-specialise`.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4457

20 months agorts, base: Refactor stats.c to improve --machine-readable report
Douglas Wilson [Mon, 19 Mar 2018 17:26:41 +0000 (13:26 -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
readable report.

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

init times are added to RTSStats and added to GHC.Stats.

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")
 ,("bound_task_count", "1")
 ,("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")
 ,("task_count", "10")
 ,("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")
 ,("waitForGcThreads_spin", "241")
 ,("waitForGcThreads_yield", "2797")
 ,("whitehole_gc_spin", "0")
 ,("whitehole_lockClosure_spin", "0")
 ,("whitehole_lockClosure_yield", "0")
 ,("whitehole_executeMessage_spin", "0")
 ,("whitehole_threadPaused_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: bgamari, erikd, simonmar, hvr

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14660

Differential Revision: https://phabricator.haskell.org/D4303

20 months agogen-data-layout.sh: Use bash array for readability
John Ericson [Mon, 19 Mar 2018 17:24:46 +0000 (13:24 -0400)] 
gen-data-layout.sh: Use bash array for readability

Reviewers: angerman, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4511

20 months agoFix typo
Gabor Greif [Thu, 8 Mar 2018 11:13:08 +0000 (12:13 +0100)] 
Fix typo

20 months agoFix typo in user guide about ConstraintKinds
Frank Steffahn [Tue, 13 Mar 2018 22:29:04 +0000 (23:29 +0100)] 
Fix typo in user guide about ConstraintKinds

The backslash currently in this type signature makes no sense. Without it, the example is fine.

20 months agoBump array submodule
Ben Gamari [Mon, 19 Mar 2018 16:46:44 +0000 (12:46 -0400)] 
Bump array submodule

20 months agoUpdate tests for #12870 to pass with a slow run of the testsuite.
Andreas Klebinger [Mon, 19 Mar 2018 16:06:54 +0000 (12:06 -0400)] 
Update tests for #12870 to pass with a slow run of the testsuite.

Test Plan: make slow

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #12870

Differential Revision: https://phabricator.haskell.org/D4486

20 months agoDon't permit data types with return kind Constraint
Ryan Scott [Mon, 19 Mar 2018 16:06:41 +0000 (12:06 -0400)] 
Don't permit data types with return kind Constraint

Previously, GHC allowed all of the following:

```lang=haskell
data Foo1 :: Constraint
data family Foo2 :: Constraint
data family Foo3 :: k
data instance Foo3 :: Constraint
```

Yikes! This is because GHC was confusing `Type` with `Constraint`
due to careless use of the `isLiftedTypeKind` function. To respect
this distinction, I swapped `isLiftedTypeKind` out for
`tcIsStarKind`—which does respect this distinction—in the right
places.

Test Plan: make test TEST="T14048a T14048b T14048c"

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: goldfire, rwbarton, thomie, carter

GHC Trac Issues: #14048

Differential Revision: https://phabricator.haskell.org/D4479

20 months agoFix #14934 by including axSub0R in typeNatCoAxiomRules
Ryan Scott [Mon, 19 Mar 2018 16:05:36 +0000 (12:05 -0400)] 
Fix #14934 by including axSub0R in typeNatCoAxiomRules

For some reason, `axSub0R` was left out of `typeNatCoAxiomRules` in
`TcTypeNats`, which led to disaster when trying to look up `Sub0R` from
an interface file, as demonstrated in #14934.

The fix is simple—just add `axSub0R` to that list. To help prevent
an issue like this happening in the future, I added a
`Note [Adding built-in type families]` to `TcTypeNats`, which
contains a walkthrough of all the definitions in `TcTypeNats` you
need to update when adding a new built-in type family.

Test Plan: make test TEST=T14934

Reviewers: bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie, carter

GHC Trac Issues: #14934

Differential Revision: https://phabricator.haskell.org/D4508

20 months agoRequire GHC 8.2 to bootstrap GHC
Joachim Breitner [Mon, 19 Mar 2018 16:05:22 +0000 (12:05 -0400)] 
Require GHC 8.2 to bootstrap GHC

Reviewers: bgamari, hvr, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, thomie, erikd, carter

Differential Revision: https://phabricator.haskell.org/D4509

20 months agoTurn a TH Name for built-in syntax into an unqualified RdrName
Chaitanya Koparkar [Mon, 19 Mar 2018 16:04:03 +0000 (12:04 -0400)] 
Turn a TH Name for built-in syntax into an unqualified RdrName

Previously, the Renamer would turn any fully qualified Template Haskell
name into a corresponding fully qualified `RdrName`. But this is not
what we want for built-in syntax, as it produces unnecessarily qualified
names (eg. GHC.Types.[], GHC.Tuple.(,) etc.).

Test Plan: ./validate

Reviewers: RyanGlScott, bgamari, goldfire

Reviewed By: RyanGlScott, bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #13776

Differential Revision: https://phabricator.haskell.org/D4506

20 months agoImplement equalKeysUFM the right way
David Feuer [Mon, 19 Mar 2018 16:03:36 +0000 (12:03 -0400)] 
Implement equalKeysUFM the right way

Originally, we compared the key lists, which was kind of silly.
Then I changed it to something fancier ... and also silly.
This is much more reasonable, should be faster, and is nice and
clear.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4500

20 months agoCmmUtils: get rid of insertBlock
Michal Terepeta [Mon, 19 Mar 2018 16:03:20 +0000 (12:03 -0400)] 
CmmUtils: get rid of insertBlock

`Hoopl.Graph` has almost exactly the same function, so let's use that.
Also, use `IntMap.alter` to make it more efficient.

Also switch `Hoopl` to use strict maps.

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

Reviewers: bgamari, simonmar

Reviewed By: bgamari

Subscribers: dfeuer, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4493

20 months agoImprove accuracy of get/setAllocationCounter
Ben Gamari [Mon, 19 Mar 2018 16:02:43 +0000 (12:02 -0400)] 
Improve accuracy of get/setAllocationCounter

Summary:
get/setAllocationCounter didn't take into account allocations in the
current block. This was known at the time, but it turns out to be
important to have more accuracy when using these in a fine-grained
way.

Test Plan:
New unit test to test incrementally larger allocaitons.  Before I got
results like this:

```
+0
+0
+0
+0
+0
+4096
+0
+0
+0
+0
+0
+4064
+0
+0
+4088
+4056
+0
+0
+0
+4088
+4096
+4056
+4096
```

Notice how the results aren't always monotonically increasing.  After
this patch:

```
+344
+416
+488
+560
+632
+704
+776
+848
+920
+992
+1064
+1136
+1208
+1280
+1352
+1424
+1496
+1568
+1640
+1712
+1784
+1856
+1928
+2000
+2072
+2144
```

Reviewers: hvr, erikd, simonmar, jrtc27, trommler

Reviewed By: simonmar

Subscribers: trommler, jrtc27, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4363

20 months ago[RFC] nativeGen: Add support for MO_SS_Conv_W32_W64 on i386
Ben Gamari [Mon, 19 Mar 2018 16:02:29 +0000 (12:02 -0400)] 
[RFC] nativeGen: Add support for MO_SS_Conv_W32_W64 on i386

This is required by D4288. However, this only handles i386; we will
likely also need to do the same for PPC and SPARC, lest they break when
D4288 is re-merged.

Test Plan: Validate

Reviewers: simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4362

20 months agoSPARC nativeGen: Support for MO_SS_Conv_W32_W64
Peter Trommler [Mon, 19 Mar 2018 16:02:03 +0000 (12:02 -0400)] 
SPARC nativeGen: Support for MO_SS_Conv_W32_W64

Support for signed conversion from 32 bit to 64 bit
integers is required by D4363.

Test Plan: validate (perhaps also on SPARC)

Reviewers: simonmar, bgamari, kgardas, jrtc27

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4489