ghc.git
17 months agotestsuite: Print summary even if interrupted
Ben Gamari [Thu, 14 Jun 2018 09:33:35 +0000 (12:33 +0300)] 
testsuite: Print summary even if interrupted

Fixes #15265.

Reviewers: osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15265

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

17 months agoDo not skip conc004 in GHCi way
Ömer Sinan Ağacan [Thu, 14 Jun 2018 06:07:56 +0000 (09:07 +0300)] 
Do not skip conc004 in GHCi way

According to the comments it used to allocate too much, but currently I
get

    205,987,176 bytes allocated in the heap
     50,352,200 bytes copied during GC
     14,244,968 bytes maximum residency (6 sample(s))
        172,952 bytes maximum slop
             36 MB total memory in use (0 MB lost due to fragmentation)

Reviewers: bgamari, tdammers, simonmar

Subscribers: tdammers, rwbarton, thomie, carter

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

17 months agotestuite: remove strace call.
Tamar Christina [Wed, 13 Jun 2018 19:29:35 +0000 (20:29 +0100)] 
testuite: remove strace call.

17 months agoFix some of the failures in sanity way
Ömer Sinan Ağacan [Wed, 13 Jun 2018 12:29:11 +0000 (15:29 +0300)] 
Fix some of the failures in sanity way

Tests for runtime argument parsing should only run in normal way to
avoid breakage caused by way-specific RTS arguments.

Reviewers: bgamari, AndreasK, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15241

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

17 months agoBump hadrian submodule
Ben Gamari [Tue, 12 Jun 2018 14:56:32 +0000 (10:56 -0400)] 
Bump hadrian submodule

17 months agoRefactor TcExpr.tcSeq
Simon Peyton Jones [Tue, 12 Jun 2018 16:36:44 +0000 (17:36 +0100)] 
Refactor TcExpr.tcSeq

The function TcExpr.tcSeq seemed much longer that is really
justifiable; and was set to get worse with the fix to Trac #15242.

This patch refactors the special cases for function applications,
so that the special case for 'seq' can use the regular tcFunApp,
which makes the code both clearer and shorter.  And smooths the
way for #15242.

The special case for 'tagToEnum#' is even more weird and ad-hoc,
so I refrained from meddling iwth it for now.

I also combined HsUtils.mkHsAppType and mkHsAppTypeOut, so that
I could have a single 'wrapHsArgs' function, thereby fixing a
ToDo from Alan Zimmerman.  That means tha tmkHsAppType now has
an equality predicate, but I guess that's fair enough.

17 months agodocs: Add mentions of new plugins mechanisms to users guide
Ben Gamari [Tue, 12 Jun 2018 13:57:14 +0000 (09:57 -0400)] 
docs: Add mentions of new plugins mechanisms to users guide

17 months agorts: Fix a var name in a comment, fix a typo
Ömer Sinan Ağacan [Tue, 12 Jun 2018 07:12:26 +0000 (10:12 +0300)] 
rts: Fix a var name in a comment, fix a typo

17 months agoRemove a tc-trace
Simon Peyton Jones [Mon, 11 Jun 2018 12:58:40 +0000 (13:58 +0100)] 
Remove a tc-trace

17 months agoSmall refactor, adding checkBadTelescope
Simon Peyton Jones [Mon, 11 Jun 2018 12:58:05 +0000 (13:58 +0100)] 
Small refactor, adding checkBadTelescope

No change in behaviour

17 months agoRemove duplicate quantified constraints
Simon Peyton Jones [Mon, 11 Jun 2018 12:55:56 +0000 (13:55 +0100)] 
Remove duplicate quantified constraints

This is an easy fix for Trac #15244: just avoid adding
the same quantified Given constraint to the inert set twice.

See TcSMonad Note [Do not add duplicate quantified instances].

17 months agoComments only
Simon Peyton Jones [Mon, 11 Jun 2018 12:55:10 +0000 (13:55 +0100)] 
Comments only

17 months agoMake seq# evaluatedness look through casts
David Feuer [Mon, 11 Jun 2018 14:32:23 +0000 (10:32 -0400)] 
Make seq# evaluatedness look through casts

In d964b05, I forgot to look through casts to find the `seq#`
identifier. Fix that.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agotestsuite: Remove uniques from T15243's stderr output
Ben Gamari [Mon, 11 Jun 2018 02:26:13 +0000 (22:26 -0400)] 
testsuite: Remove uniques from T15243's stderr output

17 months agotestsuite: Suppress uniques in T15243 output
Ben Gamari [Sun, 10 Jun 2018 22:13:10 +0000 (18:13 -0400)] 
testsuite: Suppress uniques in T15243 output

Fixes test for #15243.

17 months agoBump Cabal submodule
Ben Gamari [Sun, 10 Jun 2018 22:10:47 +0000 (18:10 -0400)] 
Bump Cabal submodule

Fixes #15254.

17 months agotestsuite: Bump performance metrics of T9233 and T13035
Ben Gamari [Sun, 10 Jun 2018 14:20:55 +0000 (10:20 -0400)] 
testsuite: Bump performance metrics of T9233 and T13035

Unfortunately it's very unclear which commit caused these two to regress; they
only fail on Darwin and not even deterministically it sesems.

17 months agousers-guide: Spelling and style pass over QuantifiedConstraints docs
Ben Gamari [Fri, 8 Jun 2018 19:35:48 +0000 (15:35 -0400)] 
users-guide: Spelling and style pass over QuantifiedConstraints docs

17 months agoDo not omit T4030 in GHCi mode
Ömer Sinan Ağacan [Sun, 10 Jun 2018 07:25:40 +0000 (10:25 +0300)] 
Do not omit T4030 in GHCi mode

(it currently works fine in GHCi)

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: simonmar, rwbarton, thomie, carter

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

17 months agorts: Handle SMALL_MUT_ARR_PTRS in checkClosure
Ömer Sinan Ağacan [Sat, 9 Jun 2018 09:49:19 +0000 (12:49 +0300)] 
rts: Handle SMALL_MUT_ARR_PTRS in checkClosure

17 months agousers guide: Fix spelling
Ben Gamari [Fri, 8 Jun 2018 13:15:10 +0000 (09:15 -0400)] 
users guide: Fix spelling

17 months agoFix `print-explicit-runtime-reps` (#11786).
HE, Tao [Fri, 8 Jun 2018 00:43:55 +0000 (20:43 -0400)] 
Fix `print-explicit-runtime-reps` (#11786).

By fixing splitting of IfaceTypes in splitIfaceSigmaTy.

Test Plan: make test TEST="T11549 T11376 T11786"

Reviewers: goldfire, bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #11786, #11376

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

17 months agoRun Linux slow validate nightly on Circle CI
Alp Mestanogullari [Thu, 24 May 2018 22:07:02 +0000 (00:07 +0200)] 
Run Linux slow validate nightly on Circle CI

17 months agotypecheck: Don't warn about "redundant" TypeError constraints
Ben Gamari [Thu, 7 Jun 2018 17:40:57 +0000 (13:40 -0400)] 
typecheck: Don't warn about "redundant" TypeError constraints

Summary: This fixes #15232, where we would warn about `TypeError` constraints being redundant.

Test Plan: Validate

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15232

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

17 months agoAdd support for FreeBSD arm
Ben Gamari [Thu, 7 Jun 2018 18:13:04 +0000 (14:13 -0400)] 
Add support for FreeBSD arm

Test Plan: Tested on armv6, armv7 and aarch64 on FreeBSD 12-CURRENT.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, erikd, carter

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

17 months agoMove `iserv` into `utils` and change package name from `iserv-bin` to `iserv`
Moritz Angermann [Thu, 7 Jun 2018 17:36:24 +0000 (13:36 -0400)] 
Move `iserv` into `utils` and change package name from `iserv-bin` to `iserv`

This is done for consistency. We usually call the package file the same name the
folder has.  The move into `utils` is done so that we can move the library into
`libraries/iserv` and the proxy into `utils/iserv-proxy` and then break the
`iserv.cabal` apart.  This will make building the cross compiler with TH
simpler, because we can build the library and proxy as separate packages.

Test Plan: ./validate

Reviewers: bgamari, goldfire, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoAllow Haddock comments before function arguments.
Iavor Diatchki [Thu, 7 Jun 2018 17:32:27 +0000 (13:32 -0400)] 
Allow Haddock comments before function arguments.

Currently, documentation strings on function arguments has to be written
after the argument (i.e., using `{-^ -}` comments).  This patch allows
us to use `{-| -}` comments to put the comment string before an
argument.   The same works for the results of functions.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, mpickering, carter

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

17 months agoRun typeCheckResultAction and renamedResultAction in TcM rather than Hsc
Matthew Pickering [Thu, 7 Jun 2018 17:31:52 +0000 (13:31 -0400)] 
Run typeCheckResultAction and renamedResultAction in TcM rather than Hsc

The primary motivation for this is that this allows users to access
the warnings and error machinery present in TcM. However, it also allows
users to use TcM actions which means they can typecheck GhcPs which
could be significantly easier than constructing GhcTc.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15229

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

17 months agoRename dataConRepNameUnique to dataConTyRepNameUnique
Matthew Pickering [Thu, 7 Jun 2018 17:31:38 +0000 (13:31 -0400)] 
Rename dataConRepNameUnique to dataConTyRepNameUnique

The `DataCon` rep also applies to the worker. For example, see
`MkId.mkDataConRep`.  `dataConTyRepNameUnique` is for the type
representation, so we rename it to make this distinction clear.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agorts: Fix reference to srt_bitmap in ASSERT in RetainerProfile
Ben Gamari [Thu, 7 Jun 2018 17:31:26 +0000 (13:31 -0400)] 
rts: Fix reference to srt_bitmap in ASSERT in RetainerProfile

Test Plan: Validate

Reviewers: erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

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

17 months agoFix #15236 by removing parentheses from funTyConName
Ryan Scott [Thu, 7 Jun 2018 17:30:44 +0000 (13:30 -0400)] 
Fix #15236 by removing parentheses from funTyConName

Currently, `funTyConName` is defined as:

```lang=haskell
funTyConName = mkPrimTyConName (fsLit "(->)") funTyConKey funTyCon
```

What's strange about this definition is that there are extraneous
parentheses around `->`, which is quite unlike every other infix
`Name`. As a result, the `:info (->)` output is totally garbled (see
Trac #15236).

It's quite straightforward to fix that particular bug by removing the
extraneous parentheses. However, it turns out that this makes some
test output involving `Show` instances for `TypeRep` look less
appealing, since `->` is no longer surrounded with parentheses when
applied prefix. But neither were any /other/ infix type constructors!
The right fix there was to change `showTypeable` to put parentheses
around prefix applications of infix tycons.

Test Plan: ./validate

Reviewers: bgamari, hvr

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15236

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

17 months agoDon't expose (~#), (~R#), (~P#) from GHC.Prim
Ryan Scott [Thu, 7 Jun 2018 17:30:28 +0000 (13:30 -0400)] 
Don't expose (~#), (~R#), (~P#) from GHC.Prim

Currently, the primitive `(~#)`, `(~R#)`, and `(~P#)` type
constructors are wired in to be exported from `GHC.Prim`. This has
some unfortunate consequences, however. It turns out that `(~#)` is
actually a legal infix identifier, so users can make use of unboxed
equalities in strange ways in user code (see #15209). The other two,
`(~R#)` and `(~P#)`, can't be used in source code, but they can be
observed with GHCi's `:browse` command, which is somewhat unnerving.

The fix for both of these problems is simple: just don't wire them
to be exported from `GHC.Prim`.

Test Plan: make test TEST="T12023 T15209"

Reviewers: bgamari, dfeuer

Reviewed By: bgamari, dfeuer

Subscribers: rwbarton, thomie, carter, dfeuer

GHC Trac Issues: #12023, #15209

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

17 months agotestsuite: Skip T13838 in ghci way
Ben Gamari [Thu, 7 Jun 2018 17:30:13 +0000 (13:30 -0400)] 
testsuite: Skip T13838 in ghci way

Test Plan: `make slowtest TEST=T13838`

Reviewers: alpmestan, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, rwbarton, thomie, carter

GHC Trac Issues: #15238

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

17 months agoDocument #15079 in the users' guide
Ryan Scott [Thu, 7 Jun 2018 17:29:12 +0000 (13:29 -0400)] 
Document #15079 in the users' guide

Trac #15079 revealed an interesting limitation in the interaction
between variable visibility and higher-rank kinds. We (Richard and I)
came to the conclusion that this is an acceptable (albeit surprising)
limitation, so this documents in the users' guide to hopefully eliminate
some confusion for others in the future.

Test Plan: Read it

Reviewers: goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15079

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

17 months agoFix #15243 by fixing incorrect uses of NotPromoted
Ryan Scott [Thu, 7 Jun 2018 17:28:53 +0000 (13:28 -0400)] 
Fix #15243 by fixing incorrect uses of NotPromoted

In `Convert`, we were incorrectly using `NotPromoted` to
denote type constructors that were actually intended to be promoted,
resulting in poor `-ddump-splices` output (as seen in #15243).
Easily fixed.

Test Plan: make test TEST=T15243

Reviewers: bgamari, goldfire

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15243

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

17 months agotestsuite: Add test for #15232
Ben Gamari [Thu, 7 Jun 2018 17:27:37 +0000 (13:27 -0400)] 
testsuite: Add test for #15232

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15232

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

17 months agoMove 'HsBangTy' out in constructor arguments
Alec Theriault [Thu, 7 Jun 2018 17:26:53 +0000 (13:26 -0400)] 
Move 'HsBangTy' out in constructor arguments

When run with -haddock, a constructor argument can have both a a
strictness/unpackedness annotation and a docstring. The parser binds
'HsBangTy' more tightly than 'HsDocTy', yet for constructor arguments we
really need the 'HsBangTy' on the outside.

This commit does this shuffling in the 'mkConDeclH98' and 'mkGadtDecl'
smart constructors.

Test Plan: haddockA038, haddockC038

Reviewers: bgamari, dfeuer

Reviewed By: bgamari

Subscribers: dfeuer, rwbarton, thomie, carter

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

17 months agoCheck if both branches of an Cmm if have the same target.
klebinger.andreas@gmx.at [Thu, 7 Jun 2018 17:26:19 +0000 (13:26 -0400)] 
Check if both branches of an Cmm if have the same target.

This for some reason or the other and makes it into the final
binary. I've added the check to ContFlowOpt as that seems
like a logical place for this.

In a regular nofib run there were 30 occurences of this pattern.

Test Plan: ci

Reviewers: bgamari, simonmar, dfeuer, jrtc27, tdammers

Reviewed By: bgamari, simonmar

Subscribers: tdammers, dfeuer, rwbarton, thomie, carter

GHC Trac Issues: #15188

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

17 months agoFix unparseable pretty-printing of promoted data cons
Andreas Herrmann [Thu, 7 Jun 2018 17:24:52 +0000 (13:24 -0400)] 
Fix unparseable pretty-printing of promoted data cons

Previously we would print code which would not round-trip:
```
> :set -XDataKinds
> :set -XPolyKinds
> data Proxy k = Proxy
> _ :: Proxy '[ 'True ]
error:
  Found hole: _ :: Proxy '['True]
> _ :: Proxy '['True]
error:
    Invalid type signature: _ :: ...
    Should be of form <variable> :: <type>
```

Test Plan: Validate with T14343

Reviewers: RyanGlScott, goldfire, bgamari, tdammers

Reviewed By: RyanGlScott, bgamari

Subscribers: tdammers, rwbarton, thomie, carter

GHC Trac Issues: #14343

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

17 months agoIndex arrays more eagerly
David Feuer [Thu, 7 Jun 2018 17:21:41 +0000 (13:21 -0400)] 
Index arrays more eagerly

Many basic functions in `GHC.Arr` were unreasonably lazy about
performing array lookups. This could lead to useless thunks
at best and memory leaks at worst. Use eager lookups where
they're obviously appropriate.

Reviewers: bgamari, hvr

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoWorkWrap: Rip out unsafeGlobalDynFlags usage in mkWwInlineRule
Ben Gamari [Thu, 7 Jun 2018 17:20:49 +0000 (13:20 -0400)] 
WorkWrap: Rip out unsafeGlobalDynFlags usage in mkWwInlineRule

Subscribers: rwbarton, thomie, carter

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

17 months agoDon't use unsafeGlobalDynFlags in optCoercion
Ben Gamari [Thu, 7 Jun 2018 17:20:30 +0000 (13:20 -0400)] 
Don't use unsafeGlobalDynFlags in optCoercion

This plumbs DynFlags through CoreOpt so optCoercion can finally
eliminate its usage of `unsafeGlobalDynFlags`.

Note that this doesn't completely eliminate `unsafeGlobalDynFlags`
usage from this bit of the compiler. A few uses are introduced in
call-sites where we don't (yet) have ready access to `DynFlags`.

Test Plan: Validate

Reviewers: goldfire

Subscribers: rwbarton, thomie, carter

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

17 months agoUpdate hadrian submodule
Ben Gamari [Tue, 5 Jun 2018 15:27:21 +0000 (11:27 -0400)] 
Update hadrian submodule

17 months agotestsuite: Fix dynamic-paper stderr file
Ben Gamari [Thu, 7 Jun 2018 22:05:51 +0000 (22:05 +0000)] 
testsuite: Fix dynamic-paper stderr file

The stderr file was empty, yet GHC fails with an error.

17 months agoRemove ad-hoc special case in occAnal
Simon Peyton Jones [Thu, 7 Jun 2018 10:03:21 +0000 (11:03 +0100)] 
Remove ad-hoc special case in occAnal

Back in 1999 I put this ad-hoc code in the Case-handling
code for occAnal:

  occAnal env (Case scrut bndr ty alts)
   = ...
        -- Note [Case binder usage]
        -- ~~~~~~~~~~~~~~~~~~~~~~~~
        -- The case binder gets a usage of either "many" or "dead", never "one".
        -- Reason: we like to inline single occurrences, to eliminate a binding,
        -- but inlining a case binder *doesn't* eliminate a binding.
        -- We *don't* want to transform
        --      case x of w { (p,q) -> f w }
        -- into
        --      case x of w { (p,q) -> f (p,q) }
    tag_case_bndr usage bndr
      = (usage', setIdOccInfo bndr final_occ_info)
      where
        occ_info       = lookupDetails usage bndr
        usage'         = usage `delDetails` bndr
        final_occ_info = case occ_info of IAmDead -> IAmDead
                                          _       -> noOccInfo

But the comment looks wrong -- the bad inlining will not happen -- and
I think it relates to some long-ago version of the simplifier.

So I simply removed the special case, which gives more accurate
occurrence-info to the case binder.  Interestingly I got a slight
improvement in nofib binary sizes.

--------------------------------------------------------------------------------
        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
      cacheprof          -0.1%     +0.2%     -0.7%     -1.2%     +8.6%
--------------------------------------------------------------------------------
            Min          -0.2%      0.0%    -14.5%    -30.5%      0.0%
            Max          -0.1%     +0.2%    +10.0%    +10.0%    +25.0%
 Geometric Mean          -0.2%     +0.0%     -1.9%     -5.4%     +0.3%

I have no idea if the improvement in runtime is real.  I did look at the
tiny increase in allocation for cacheprof and concluded that it was
unimportant (I forget the details).

Also the more accurate occ-info for the case binder meant that some
inlining happens in one pass that previously took successive passes
for the test dependent/should_compile/dynamic-paper (which has a
known Russel-paradox infinite loop in the simplifier).

In short, a small win: less ad-hoc complexity and slightly smaller
binaries.

17 months agoComments only
Simon Peyton Jones [Thu, 7 Jun 2018 10:02:55 +0000 (11:02 +0100)] 
Comments only

17 months agoDo not scavenge SMALL_MUT_ARR_PTRS_CLEAN in mut_lists
Ömer Sinan Ağacan [Thu, 7 Jun 2018 04:05:12 +0000 (07:05 +0300)] 
Do not scavenge SMALL_MUT_ARR_PTRS_CLEAN in mut_lists

For the same reason with MUT_ARR_PTRS_CLEAN we don't need to scavenge
SMALL_MUT_ARR_PTRS_CLEAN in mut_lists.

Because SMALL_MUT_ARR_PTRS doesn't have a card table we don't have a
special case when scavenging SMALL_MUT_ARR_PTRS_DIRTY in a mut_list.

Test Plan: this validates

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar, bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoLet the simplifier know that seq# forces
David Feuer [Wed, 6 Jun 2018 19:50:06 +0000 (15:50 -0400)] 
Let the simplifier know that seq# forces

Add a special case in `simplAlt` to record that the result of
`seq#` is in WHNF.

Reviewers: simonmar, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie, carter

GHC Trac Issues: #15226

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

17 months agorts: Reuse dbl_link_remove in a few places
Ömer Sinan Ağacan [Tue, 5 Jun 2018 14:01:12 +0000 (17:01 +0300)] 
rts: Reuse dbl_link_remove in a few places

Test Plan: this validates

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

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

17 months agoRename some mutable closure types for consistency
Ömer Sinan Ağacan [Tue, 5 Jun 2018 14:00:22 +0000 (17:00 +0300)] 
Rename some mutable closure types for consistency

SMALL_MUT_ARR_PTRS_FROZEN0 -> SMALL_MUT_ARR_PTRS_FROZEN_DIRTY
SMALL_MUT_ARR_PTRS_FROZEN  -> SMALL_MUT_ARR_PTRS_FROZEN_CLEAN
MUT_ARR_PTRS_FROZEN0       -> MUT_ARR_PTRS_FROZEN_DIRTY
MUT_ARR_PTRS_FROZEN        -> MUT_ARR_PTRS_FROZEN_CLEAN

Naming is now consistent with other CLEAR/DIRTY objects (MVAR, MUT_VAR,
MUT_ARR_PTRS).

(alternatively we could rename MVAR_DIRTY/MVAR_CLEAN etc. to MVAR0/MVAR)

Removed a few comments in Scav.c about FROZEN0 being on the mut_list
because it's now clear from the closure type.

Reviewers: bgamari, simonmar, erikd

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

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

17 months agoIntroduce DerivingVia
Ryan Scott [Tue, 5 Jun 2018 01:20:02 +0000 (21:20 -0400)] 
Introduce DerivingVia

This implements the `DerivingVia` proposal put forth in
https://github.com/ghc-proposals/ghc-proposals/pull/120.

This introduces the `DerivingVia` deriving strategy. This is a
generalization of `GeneralizedNewtypeDeriving` that permits the user
to specify the type to `coerce` from.

The major change in this patch is the introduction of the
`ViaStrategy` constructor to `DerivStrategy`, which takes a type
as a field. As a result, `DerivStrategy` is no longer a simple
enumeration type, but rather something that must be renamed and
typechecked. The process by which this is done is explained more
thoroughly in section 3 of this paper
( https://www.kosmikus.org/DerivingVia/deriving-via-paper.pdf ),
although I have inlined the relevant parts into Notes where possible.

There are some knock-on changes as well. I took the opportunity to
do some refactoring of code in `TcDeriv`, especially the
`mkNewTypeEqn` function, since it was bundling all of the logic for
(1) deriving instances for newtypes and
(2) `GeneralizedNewtypeDeriving`
into one huge broth. `DerivingVia` reuses much of part (2), so that
was factored out as much as possible.

Bumps the Haddock submodule.

Test Plan: ./validate

Reviewers: simonpj, bgamari, goldfire, alanz

Subscribers: alanz, goldfire, rwbarton, thomie, mpickering, carter

GHC Trac Issues: #15178

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

17 months agoSerialize docstrings to ifaces, display them with new GHCi :doc command
Simon Jakobi [Mon, 4 Jun 2018 21:51:03 +0000 (17:51 -0400)] 
Serialize docstrings to ifaces, display them with new GHCi :doc command

If `-haddock` is set, we now extract docstrings from the renamed ast
and serialize them in the .hi-files.

This includes some of the changes from D4749 with the notable
exceptions of the docstring lexing and renaming.

A currently limited and experimental GHCi :doc command can be used
to display docstrings for declarations.

The formatting of pretty-printed docstrings is changed slightly,
causing some changes in testsuite/tests/haddock.

Test Plan: ./validate

Reviewers: alexbiehl, hvr, gershomb, harpocrates, bgamari

Reviewed By: alexbiehl

Subscribers: rwbarton, thomie, carter

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

17 months agoAlso suppress uniques in cmm dumps with `-dsuppress-uniques`.
klebinger.andreas@gmx.at [Mon, 4 Jun 2018 21:50:21 +0000 (17:50 -0400)] 
Also suppress uniques in cmm dumps with `-dsuppress-uniques`.

Allows easier structural comparison of Cmm code.

Before:
```
       cxCH: // global
           _suEU::P64 = R1;
           if ((Sp + -16) < SpLim) (likely: False) goto cxCI; else goto
cxCJ;
```

After
```
       _lbl_: // global
           __locVar_::P64 = R1;
           if ((Sp + -16) < SpLim) (likely: False) goto cxBf; else goto
cxBg;
```

Test Plan: Looking at dumps, ci

Reviewers: bgamari, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoImprove extendTvSubst assertion
Matthew Pickering [Mon, 4 Jun 2018 21:50:01 +0000 (17:50 -0400)] 
Improve extendTvSubst assertion

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoAdd Outputable instance for HsArg
Matthew Pickering [Mon, 4 Jun 2018 21:49:34 +0000 (17:49 -0400)] 
Add Outputable instance for HsArg

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoImplement QuantifiedConstraints
Simon Peyton Jones [Sat, 27 Jan 2018 14:32:34 +0000 (14:32 +0000)] 
Implement QuantifiedConstraints

We have wanted quantified constraints for ages and, as I hoped,
they proved remarkably simple to implement.   All the machinery was
already in place.

The main ticket is Trac #2893, but also relevant are
  #5927
  #8516
  #9123 (especially!  higher kinded roles)
  #14070
  #14317

The wiki page is
  https://ghc.haskell.org/trac/ghc/wiki/QuantifiedConstraints
which in turn contains a link to the GHC Proposal where the change
is specified.

Here is the relevant Note:

Note [Quantified constraints]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The -XQuantifiedConstraints extension allows type-class contexts like
this:

  data Rose f x = Rose x (f (Rose f x))

  instance (Eq a, forall b. Eq b => Eq (f b))
        => Eq (Rose f a)  where
    (Rose x1 rs1) == (Rose x2 rs2) = x1==x2 && rs1 >= rs2

Note the (forall b. Eq b => Eq (f b)) in the instance contexts.
This quantified constraint is needed to solve the
 [W] (Eq (f (Rose f x)))
constraint which arises form the (==) definition.

Here are the moving parts
  * Language extension {-# LANGUAGE QuantifiedConstraints #-}
    and add it to ghc-boot-th:GHC.LanguageExtensions.Type.Extension

  * A new form of evidence, EvDFun, that is used to discharge
    such wanted constraints

  * checkValidType gets some changes to accept forall-constraints
    only in the right places.

  * Type.PredTree gets a new constructor ForAllPred, and
    and classifyPredType analyses a PredType to decompose
    the new forall-constraints

  * Define a type TcRnTypes.QCInst, which holds a given
    quantified constraint in the inert set

  * TcSMonad.InertCans gets an extra field, inert_insts :: [QCInst],
    which holds all the Given forall-constraints.  In effect,
    such Given constraints are like local instance decls.

  * When trying to solve a class constraint, via
    TcInteract.matchInstEnv, use the InstEnv from inert_insts
    so that we include the local Given forall-constraints
    in the lookup.  (See TcSMonad.getInstEnvs.)

  * topReactionsStage calls doTopReactOther for CIrredCan and
    CTyEqCan, so they can try to react with any given
    quantified constraints (TcInteract.matchLocalInst)

  * TcCanonical.canForAll deals with solving a
    forall-constraint.  See
       Note [Solving a Wanted forall-constraint]
       Note [Solving a Wanted forall-constraint]

  * We augment the kick-out code to kick out an inert
    forall constraint if it can be rewritten by a new
    type equality; see TcSMonad.kick_out_rewritable

Some other related refactoring
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Move SCC on evidence bindings to post-desugaring, which fixed
  #14735, and is generally nicer anyway because we can use
  existing CoreSyn free-var functions.  (Quantified constraints
  made the free-vars of an ev-term a bit more complicated.)

* In LookupInstResult, replace GenInst with OneInst and NotSure,
  using the latter for multiple matches and/or one or more
  unifiers

17 months agoDocument the fact that cmm dumps won't show unreachable blocks.
klebinger.andreas@gmx.at [Mon, 4 Jun 2018 17:26:22 +0000 (13:26 -0400)] 
Document the fact that cmm dumps won't show unreachable blocks.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoFix broken test T14547.
HE, Tao [Sun, 3 Jun 2018 21:18:54 +0000 (17:18 -0400)] 
Fix broken test T14547.

Phab:D4571 lags behind HEAD for too many commits. The commit of
Phab:4571 1f88f541aad1e36d01f22f9e71dfbc247e6558e2 brought some
unintentional changes (not belong to [Phab:4571's Diff
16314](https://phabricator.haskell.org/differential/diff/16314/)) into
ghc-head, breaking T14557.

Let's fix that.

Test Plan: make test TEST="T14547"

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15222

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

17 months agoBump stm and haskeline submodules
Ben Gamari [Sun, 3 Jun 2018 21:18:12 +0000 (17:18 -0400)] 
Bump stm and haskeline submodules

17 months agoRefactor SetLevels.abstractVars
Simon Peyton Jones [Fri, 1 Jun 2018 15:42:11 +0000 (16:42 +0100)] 
Refactor SetLevels.abstractVars

This patch is pure refactoring: using utility functions
rather than special-purpose code, especially for closeOverKinds

17 months agoExpand type synonyms when Linting a forall
Simon Peyton Jones [Fri, 1 Jun 2018 15:36:57 +0000 (16:36 +0100)] 
Expand type synonyms when Linting a forall

Trac #14939 showed a type like
   type Alg cls ob = ob
   f :: forall (cls :: * -> Constraint) (b :: Alg cls *). b

where the kind of the forall looks like (Alg cls *), with a
free cls. This tripped up Core Lint.

I fixed this by making Core Lint a bit more forgiving, expanding
type synonyms if necessary.

I'm worried that this might not be the whole story; notably
typeKind looks suspect.  But it certainly fixes this problem.

17 months agoDo a late CSE pass
Simon Peyton Jones [Fri, 1 Jun 2018 11:53:41 +0000 (12:53 +0100)] 
Do a late CSE pass

When investigating something else I found that a condition
was being re-evaluated in wheel-seive1.  Why, when CSE should
find it?  Because the opportunity only showed up after
LiberateCase

This patch adds a late CSE pass. Rather than give it an extra
flag I do it when (cse && (spec_constr || liberate_case)), so
roughly speaking it happense with -O2.

In any case, CSE is very cheap.

Nofib results are minor but in the right direction:

        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
           anna          -0.1%     -0.0%     0.163     0.163      0.0%
          eliza          -0.1%     -0.4%     0.001     0.001      0.0%
           fft2          -0.1%      0.0%     0.087     0.087      0.0%
           mate          -0.0%     -1.3%     -0.8%     -0.8%      0.0%
      paraffins          -0.0%     -0.1%     +0.9%     +0.9%      0.0%
            pic          -0.0%     -0.1%     0.009     0.009      0.0%
   wheel-sieve1          -0.2%     -0.0%     -0.1%     -0.1%      0.0%
--------------------------------------------------------------------------------
            Min          -0.6%     -1.3%     -2.4%     -2.4%      0.0%
            Max          +0.0%     +0.0%     +3.8%     +3.8%    +23.8%
 Geometric Mean          -0.0%     -0.0%     +0.2%     +0.2%     +0.2%

17 months agoProvide `getWithUserData` and `putWithUserData`
Matthew Pickering [Mon, 4 Jun 2018 02:05:46 +0000 (02:05 +0000)] 
Provide `getWithUserData` and `putWithUserData`

Summary:
This makes it possible to serialise Names and FastStrings in user
programs, for example, when writing a source plugin.

When writing my first source plugin, I wanted to serialise names but it
wasn't possible easily without exporting additional constructors. This
interface is sufficient and abstracts nicely over the symbol table and
dictionary.

Reviewers: alpmestan, bgamari

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15223

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

17 months agotestsuite: Really mark T14547 as broken
Ben Gamari [Sun, 3 Jun 2018 20:49:45 +0000 (16:49 -0400)] 
testsuite: Really mark T14547 as broken

17 months agotestsuite: Mark T14547 as broken
Ben Gamari [Sun, 3 Jun 2018 14:24:55 +0000 (10:24 -0400)] 
testsuite: Mark T14547 as broken

17 months agoAdd tests for #8128 and #8740
Ryan Scott [Sun, 3 Jun 2018 11:47:51 +0000 (07:47 -0400)] 
Add tests for #8128 and #8740

Commit 08073e16cf672d8009309e4e55d4566af1ecaff4 (#11066) ended up
fixing these, fortunately enough.

17 months agoFix typo in OverloadedLabels docs
Joachim Breitner [Sun, 3 Jun 2018 08:09:15 +0000 (10:09 +0200)] 
Fix typo in OverloadedLabels docs

as helpfully reported by elpinal (#15217).

17 months agoImprove exhaustiveness checking for literal values and patterns, fix #14546
HE, Tao [Sun, 3 Jun 2018 04:38:30 +0000 (00:38 -0400)] 
Improve exhaustiveness checking for literal values and patterns, fix #14546

Currently, we parse both the **integral literal** value and the patterns
as `OverLit HsIntegral`.  For example:

```
  case 0::Int of
      0 -> putStrLn "A"
      1 -> putStrLn "B"
      _ -> putStrLn "C"
```

When checking the exhaustiveness of pattern matching, we translate the
`0` in value position as `PmOLit`, but translate the `0` and `1` in
pattern position as `PmSLit`. The inconsistency leads to the failure of
`eqPmLit` to detect the equality and report warning of "Pattern match is
redundant" on pattern `0`, as reported in #14546. In this patch we
remove the specialization of `OverLit` patterns, and keep the overloaded
number literal in pattern as it is to maintain the consistency.  Now we
can capture the exhaustiveness of pattern `0` and the redundancy of
pattern `1` and `_`.

For **string literals**, we parse the string literals as `HsString`.
When  `OverloadedStrings` is enabled, it further be turned as `HsOverLit
HsIsString`, whether it's type is `String` or not. For example:

```
  case "foo" of
      "foo" -> putStrLn "A"
      "bar" -> putStrLn "B"
      "baz" -> putStrLn "C"
```

Previously, the overloaded string values are translated to `PmOLit` and
the non-overloaded string values are translated to `PmSLit`. However the
string patterns, both overloaded and non-overloaded, are translated to
list of characters. The inconsistency leads to wrong warnings about
redundant and non-exhaustive pattern matching warnings, as reported
in #14546.

In order to catch the redundant pattern in following case:

```
  case "foo" of
      ('f':_) -> putStrLn "A"
      "bar" -> putStrLn "B"
```

In this patch, we translate non-overloaded string literals, both in
value position and pattern position, as list of characters. For
overloaded string literals, we only translate it to list of characters
only when it's type is `stringTy`, since we know nothing about the
`toString` methods.  But we know that if two overloaded strings are
syntax equal, then they are equal. Then if it's type is not `stringTy`,
we just translate it to `PmOLit`. We can still capture the
exhaustiveness of pattern `"foo"` and the redundancy of pattern `"bar"`
and `"baz"` in the following code:

```
{-# LANGUAGE OverloadedStrings #-}
main = do
  case "foo" of
      "foo" -> putStrLn "A"
      "bar" -> putStrLn "B"
      "baz" -> putStrLn "C"
```

Test Plan: make test TEST="T14546"

Reviewers: bgamari, simonpj

Reviewed By: bgamari, simonpj

Subscribers: simonpj, thomie, carter

GHC Trac Issues: #14546

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

17 months agoAllow aligning of cmm procs at specific boundry
klebinger.andreas@gmx.at [Sun, 3 Jun 2018 04:37:59 +0000 (00:37 -0400)] 
Allow aligning of cmm procs at specific boundry

Allows to align CmmProcs at the given boundries.

It makes performance usually worse but can be helpful
to limit the effect of a unrelated function B becoming
faster/slower after changing function A.

Test Plan: ci, using it.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15148

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

17 months agotcExtendTyVarEnv2 changed to tcExtendNameTyVarEnv
Alanas Plascinskas [Sun, 3 Jun 2018 03:23:48 +0000 (23:23 -0400)] 
tcExtendTyVarEnv2 changed to tcExtendNameTyVarEnv

Reviewers: mpickering, goldfire, bgamari

Reviewed By: mpickering

Subscribers: goldfire, rwbarton, thomie, carter

GHC Trac Issues: #15017

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

17 months agoTurn "inaccessible code" error into a warning
Tobias Dammers [Sun, 3 Jun 2018 03:23:22 +0000 (23:23 -0400)] 
Turn "inaccessible code" error into a warning

With GADTs, it is possible to write programs such that the type
constraints make some code branches inaccessible.

Take, for example, the following program ::

    {-# LANGUAGE GADTs #-}

    data Foo a where
     Foo1 :: Foo Char
     Foo2 :: Foo Int

    data TyEquality a b where
            Refl :: TyEquality a a

    checkTEQ :: Foo t -> Foo u -> Maybe (TyEquality t u)
    checkTEQ x y = error "unimportant"

    step2 :: Bool
    step2 = case checkTEQ Foo1 Foo2 of
             Just Refl -> True -- Inaccessible code
             Nothing -> False

Clearly, the `Just Refl` case cannot ever be reached, because the `Foo1`
and `Foo2` constructors say `t ~ Char` and `u ~ Int`, while the `Refl`
constructor essentially mandates `t ~ u`, and thus `Char ~ Int`.

Previously, GHC would reject such programs entirely; however, in
practice this is too harsh. Accepting such code does little harm, since
attempting to use the "impossible" code will still produce errors down
the chain, while rejecting it means we cannot legally write or generate
such code at all.

Hence, we turn the error into a warning, and provide
`-Winaccessible-code` to control GHC's behavior upon encountering this
situation.

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #11066

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

17 months agoFix a bad interaction between GADTs and COMPLETE sets
Ryan Scott [Sun, 3 Jun 2018 03:22:54 +0000 (23:22 -0400)] 
Fix a bad interaction between GADTs and COMPLETE sets

As observed in #14059 (starting at comment 5), the error
messages surrounding a program involving GADTs and a `COMPLETE` set
became worse between 8.2 and 8.4. The culprit was a new validity
check in 8.4 which filters out `COMPLETE` set candidates if a return
type of any conlike in the set doesn't match the type of the
scrutinee. However, this check was too conservative, since it removed
perfectly valid `COMPLETE` sets that contained GADT constructors,
which quite often have return types that don't match the type of a
scrutinee.

To fix this, I adopted the most straightforward possible solution of
only performing this validity check on //pattern synonym//
constructors, not //data// constructors.

Note that this does not fix #14059 entirely, but instead simply fixes
a particular buglet that was discovered in that ticket.

Test Plan: make test TEST=T14059

Reviewers: bgamari, mpickering

Reviewed By: mpickering

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14059

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

17 months agoRemove ~# from surface syntax
David Feuer [Sun, 3 Jun 2018 01:24:04 +0000 (21:24 -0400)] 
Remove ~# from surface syntax

For some reason, it seems that the `ConstraintKinds` commit
introduced `~#` into Haskell syntax, in a pretty broken manner.
Unless and until we have an actual story for unboxed equality,
it doesn't make sense to expose it. Moreover, the way it was
donet was wrong enough and small enough that it will probably be
easier to start over if we do that. Yank it out.

Reviewers: bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, thomie, mpickering, carter

GHC Trac Issues: #15209

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

17 months agoHandle abi-depends correctly in ghc-pkg
Tobias Dammers [Sun, 3 Jun 2018 01:23:21 +0000 (21:23 -0400)] 
Handle abi-depends correctly in ghc-pkg

When inferring the correct abi-depends, we now look at all the package
databases in the stack, up to and including the current one, because
these are the ones that the current package can legally depend on. While
doing so, we will issue warnings:

- In verbose mode, we warn about every package that declares
  abi-depends:, whether we actually end up overriding them with the
  inferred ones or not ("possibly broken abi-depends").

- Otherwise, we only warn about packages whose declared abi-depends
  does not match what we inferred ("definitely broken abi-depends").

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14381

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

17 months agorts: Query system rlimit for maximum address-space size
Ben Gamari [Sun, 3 Jun 2018 01:22:52 +0000 (21:22 -0400)] 
rts: Query system rlimit for maximum address-space size

When we attempt to reserve the heap, we query the system's rlimit to
establish the starting point for our search over sizes.

Test Plan: Validate

Reviewers: erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14492

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

17 months agoFix #15214 by listing (~) in isBuiltInOcc_maybe
Ryan Scott [Sun, 3 Jun 2018 01:18:43 +0000 (21:18 -0400)] 
Fix #15214 by listing (~) in isBuiltInOcc_maybe

This changes an obscure error (which mistakenly mentions
Template Haskell) to one that makes more sense.

Test Plan: make test TEST=T15214

Reviewers: bgamari, mpickering

Reviewed By: bgamari, mpickering

Subscribers: mpickering, rwbarton, thomie, carter

GHC Trac Issues: #15214

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

17 months agoCheck for singletons when creating Bag/OrdList from a list.
klebinger.andreas@gmx.at [Sun, 3 Jun 2018 01:18:19 +0000 (21:18 -0400)] 
Check for singletons when creating Bag/OrdList from a list.

This gives us `One x` instead of `Many (x : [])` reducing overhead.
For compiling spectral/simple with -O0 difference was ~ -0.05%
allocations.

The only drawback is that something like toOL (x:panic "") will now
panic.  But that seems like a reasonable tradeoff.

Test Plan: ci, looking at +RTS -s

Reviewers: bgamari, jmct

Reviewed By: bgamari

Subscribers: jmct, rwbarton, thomie, carter

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

17 months agoFix #13777 by improving the underdetermined CUSK error message
Ryan Scott [Sun, 3 Jun 2018 01:16:40 +0000 (21:16 -0400)] 
Fix #13777 by improving the underdetermined CUSK error message

The error message that GHC emits from underdetermined CUSKs
is rather poor, since:

1. It may print an empty list of user-written variables if there
    are none in the declaration.
2. It may not mention any `forall`-bound, underdetermined
    variables in the result kind.

To resolve these issues, this patch:

1. Doesn't bother printing a herald about user-written
    variables if there are none.
2. Prints the result kind to advertise any
    underdetermination it may exhibit.

Test Plan: make test TEST=T13777

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #13777

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

17 months agoExtended the plugin system to run plugins on more representations
Boldizsar Nemeth [Sat, 2 Jun 2018 23:08:40 +0000 (19:08 -0400)] 
Extended the plugin system to run plugins on more representations

Extend GHC plugins to access parsed, type checked representation,
interfaces that are loaded. And splices that are evaluated. The goal is
to enable development tools to access the GHC representation in the
pre-existing build environment.

See the full proposal here:
https://ghc.haskell.org/trac/ghc/wiki/ExtendedPluginsProposal

Reviewers: goldfire, bgamari, ezyang, angerman, mpickering

Reviewed By: mpickering

Subscribers: ezyang, angerman, mpickering, ulysses4ever, rwbarton, thomie, carter

GHC Trac Issues: #14709

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

17 months agoBump version of stm submodule back to 2.4
Ben Gamari [Sun, 3 Jun 2018 01:07:43 +0000 (21:07 -0400)] 
Bump version of stm submodule back to 2.4

Haskeline doesn't have its upper bound lifted yet.

17 months agotestsuite: Don't assume location of bash
Ben Gamari [Sat, 2 Jun 2018 22:27:16 +0000 (18:27 -0400)] 
testsuite: Don't assume location of bash

17 months agorts: Rip out support for STM invariants
Ben Gamari [Sat, 2 Jun 2018 15:48:39 +0000 (11:48 -0400)] 
rts: Rip out support for STM invariants

This feature has some very serious correctness issues (#14310),
introduces a great deal of complexity, and hasn't seen wide usage.
Consequently we are removing it, as proposed in Proposal #77 [1]. This
is heavily based on a patch from fryguybob.

Updates stm submodule.

[1] https://github.com/ghc-proposals/ghc-proposals/pull/77

Test Plan: Validate

Reviewers: erikd, simonmar, hvr

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14310

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

17 months agoC codegen: print details of pprStatics panics
Sergei Trofimovich [Sat, 2 Jun 2018 21:08:06 +0000 (21:08 +0000)] 
C codegen: print details of pprStatics panics

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
17 months agovectorise: Put it out of its misery
Ben Gamari [Sat, 2 Jun 2018 15:56:58 +0000 (11:56 -0400)] 
vectorise: Put it out of its misery

Poor DPH and its vectoriser have long been languishing; sadly it seems there is
little chance that the effort will be rekindled. Every few years we discuss
what to do with this mass of code and at least once we have agreed that it
should be archived on a branch and removed from `master`. Here we do just that,
eliminating heaps of dead code in the process.

Here we drop the ParallelArrays extension, the vectoriser, and the `vector` and
`primitive` submodules.

Test Plan: Validate

Reviewers: simonpj, simonmar, hvr, goldfire, alanz

Reviewed By: simonmar

Subscribers: goldfire, rwbarton, thomie, mpickering, carter

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

17 months agoAdd llvm-target for powerpc64le-unknown-linux
Alan Mock [Sat, 2 Jun 2018 15:56:41 +0000 (11:56 -0400)] 
Add llvm-target for powerpc64le-unknown-linux

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15212

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

17 months agoConservatively estimate levity in worker/wrapper
Ben Gamari [Thu, 31 May 2018 11:49:55 +0000 (07:49 -0400)] 
Conservatively estimate levity in worker/wrapper

The worker/wrapper transform needs to determine the levity of the result to
determine whether it needs to introduce a lambda to preserve laziness of the
result. For this is previously used isUnliftedType. However, this may fail in
the presence of levity polymorphism.

We now instead use isLiftedType_maybe, assuming that a lambda is needed if the
levity of the result cannot be determined.

Fixes #15186.

Test Plan: make test=T15186

Reviewers: simonpj, goldfire, tdammers

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15186

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

17 months agotestsuite: Add test for #15186
Ben Gamari [Thu, 31 May 2018 11:48:53 +0000 (07:48 -0400)] 
testsuite: Add test for #15186

Summary: Currently broken.

Test Plan: Validate

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15186

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

17 months agoOptimizations for CmmBlockElim.
klebinger.andreas@gmx.at [Thu, 31 May 2018 00:49:18 +0000 (20:49 -0400)] 
Optimizations for CmmBlockElim.

* Use toBlockList instead of revPostorder.

    Block elimination works on a given Cmm graph by:
     * Getting a list of blocks.
     * Looking for duplicates in these blocks.
     * Removing all but one instance of duplicates.

    There are two (reasonable) ways to get the list of blocks.
     * The fast way: `toBlockList`
       This just flattens the underlying map into a list.
     * The convenient way: `revPostorder`
       Start at the entry label, scan for reachable blocks and return
       only these. This has the advantage of removing all dead code.

    If there is dead code the later is better. Work done on unreachable
    blocks is clearly wasted work. However by the point we run the
    common block elimination pass the input graph already had all dead code
    removed. This is done during control flow optimization in
    CmmContFlowOpt which is our first Cmm pass.

    This means common block elimination is free to use toBlockList
    because revPostorder would return the same blocks. (Although in
    a different order).

* Change the triemap used for grouping by a label list
  from `(TM.ListMap UniqDFM)` to `ListMap (GenMap LabelMap)`.

    * Using GenMap offers leaf compression. Which is a trie
      optimization described by the Note [Compressed TrieMap] in
      CoreSyn/TrieMap.hs

    * Using LabelMap removes the overhead associated with UniqDFM.

  This is deterministic since if we have the same input keys the same
  LabelMap will be constructed.

Test Plan: ci, profiling output

Reviewers: bgamari, simonmar

Reviewed By: bgamari

Subscribers: dfeuer, thomie, carter

GHC Trac Issues: #15103

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

17 months agoUNREG: mark SRT as writable in generated C code
Sergei Trofimovich [Fri, 1 Jun 2018 08:35:23 +0000 (08:35 +0000)] 
UNREG: mark SRT as writable in generated C code

Noticed section mismatch on UNREG build failure:

```
  HC [stage 1] libraries/integer-gmp/dist-install/build/GHC/Integer/Type.o

     error: conflicting types for 'ufu0_srt'
     static StgWord ufu0_srt[]__attribute__((aligned(8)))= {
                    ^~~~~~~~

     note: previous declaration of 'ufu0_srt' was here
     IRO_(ufu0_srt);
          ^~~~~~~~
```

`IRO_` is a 'const' qualifier.

The error is a leftover from commit 838b69032566ce6ab3918d70e8d5e098d0bcee02
"Merge FUN_STATIC closure with its SRT" where part of SRT was moved
into closure itself and made SRTs writable.

This change puts all SRTs into writable section.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Reviewers: simonmar, bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoCleanups [ci skip]
Gabor Greif [Fri, 1 Jun 2018 11:16:24 +0000 (13:16 +0200)] 
Cleanups [ci skip]

17 months agoChange jump targets in JMP_TBL from blocks to X86.JumpDest.
Andreas Klebinger [Thu, 31 May 2018 00:40:49 +0000 (20:40 -0400)] 
Change jump targets in JMP_TBL from blocks to X86.JumpDest.

Jump tables always point to blocks when we first generate them.  However
there are rare situations where we can shortcut one of these blocks to a
static address during the asm shortcutting pass.

While we already updated the data section accordingly this patch also
extends this to the references stored in JMP_TBL.

Test Plan: ci

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: thomie, carter

GHC Trac Issues: #15104

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

17 months agodead strip dylibs on macOS
Moritz Angermann [Thu, 31 May 2018 00:40:11 +0000 (20:40 -0400)] 
dead strip dylibs on macOS

When linking dynamic libraries or executables, we compute the full
transitive closure over the dependencies, and instruct the linker
to link all dependencies.  With deep dependency trees the number
of transitive dependencies can grow quickly.

macOS since the Sierra release has an upper limit on the load
command sizes the linker parses when loading dynamic lirbaries.
As such it is mandatory to keep the number of load commands (and
their size) small on recent macOS releases.

An approach that would just link direct dependencies as specified
by the -package-id flag is insufficient, because GHC can inline
across packages and the library or executable being linked could
refer to symbols deep in the dependency tree.

If we just recursively linked librarys and re-exported their
symbols, this increases the number of symbols in libraries with
many dependencies and ultimately puts excessive strain on the
linker to the point where linking takes a lot longer than even
the compilation of the modules.

We can however build a list of symbols from the obejcts we want
to link, and try to compute the libraries we need to link that
contain those symbols from the transitive dependency closure.
Luckily, we don't need to write this ourselves, but can use
the ld64 `-dead_strip_dylibs` linker flag on macOS to achive
the same result.  This will link only the libraries that are
actually referenced, which is usually a small subset of the
full transitive dependency closure.  As such we should stay
within the load command size limit for almost all but pathological
cases.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: lelf, rwbarton, thomie, carter

GHC Trac Issues: #14444

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

17 months agobase/TimerManager: Clamp timer expiration time to maxBound
Ben Gamari [Thu, 31 May 2018 00:39:12 +0000 (20:39 -0400)] 
base/TimerManager: Clamp timer expiration time to maxBound

Previously we would allow the expiration time to overflow, which in
practice meant that `threadDelay maxBound` we return far earlier than
circa 2500 CE. For now we fix this by simply clamping to maxBound.

Fixes #15158.

Test Plan: Validate, run T8089

Reviewers: simonmar, hvr

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15158

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

17 months agoMake HsDocString a newtype of ByteString
Simon Jakobi [Thu, 31 May 2018 00:38:18 +0000 (20:38 -0400)] 
Make HsDocString a newtype of ByteString

Docstrings don't profit from FastString's interning, so we switch to
a different type that doesn't incur this overhead.

Updates the haddock submodule.

Reviewers: alexbiehl, bgamari

Reviewed By: alexbiehl, bgamari

Subscribers: rwbarton, thomie, mpickering, carter

GHC Trac Issues: #15157

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

17 months agousers-guide: Fix various issues in debugging flags section
Ben Gamari [Thu, 31 May 2018 00:38:06 +0000 (20:38 -0400)] 
users-guide: Fix various issues in debugging flags section

Reviewers: ggreif

Reviewed By: ggreif

Subscribers: rwbarton, thomie, carter, ggreif

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

17 months agoconfigure: Make sphinx-build version test work on recent versions
Jens Petersen [Mon, 28 May 2018 03:31:49 +0000 (12:31 +0900)] 
configure: Make sphinx-build version test work on recent versions

On Fedora: `/usr/libexec/sphinx-build --version` outputs `sphinx-build
1.7.2`.  In bindir we actually have sphinx-build-2 and sphinx-build-3
(python2 and python3 versions), which output `sphinx-build-2 1.7.2` and
`sphinx-build-3 1.7.2` respectively.  Dunno what version others are
using but at least this change should works for most versions I suppose.

17 months agobase: Improve documentation of indexArray#
Andrew Martin [Fri, 20 Apr 2018 16:58:54 +0000 (12:58 -0400)] 
base: Improve documentation of indexArray#

17 months agotestsuite: Make T3234 more robust
roland [Sat, 19 May 2018 16:21:42 +0000 (18:21 +0200)] 
testsuite: Make T3234 more robust

Just look for the rule firing that we want to see instead of matching on
the entire dump.

Fixes #15088.

17 months agoSplicePat's should not trip -Wunused-pattern-binds
Alec Theriault [Tue, 8 May 2018 19:24:26 +0000 (12:24 -0700)] 
SplicePat's should not trip -Wunused-pattern-binds

The warning does not consider the fact that the splice pattern may
very well end up binding variables.

17 months agorts/posix: Use less aggressive backoff schedule for heap reservation sizing
Ben Gamari [Wed, 30 May 2018 16:30:52 +0000 (12:30 -0400)] 
rts/posix: Use less aggressive backoff schedule for heap reservation sizing

When we allocate the heap on POSIX platforms we generally just ask for a
1TB chunk of address space and call it a day. However, if the user has
set a ulimit then this request will fail. In this case we would
previously try successively smaller allocation requests, reducing the
request size by a factor of two each time.

However, this means that GHC will significantly allocate a significantly
smaller heap than the available physical memory size in some
circumstances.  Imagine, for instance, a machine with 512 GB of physical
memory but a ulimit of 511 GB: we would be limited to a 256 GB heap.

We now use a less aggressive back-off policy, reducing by one-eighth the
last allocation size each try.

Thanks to luispedro for the suggested approach.

Test Plan: Validate

Reviewers: simonmar, erikd

Subscribers: rwbarton, thomie

GHC Trac Issues: #14492

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