13 months agoAdd fusion rules for the zipWith functions in base (#15263)
Tobias Decking [Thu, 6 Dec 2018 20:32:18 +0000 (15:32 -0500)] 
Add fusion rules for the zipWith functions in base (#15263)

This patch will allow `zip3` and `zipWith3` in `GHC.List` as well
as `zipWith4`, `zipWith5`, `zipWith6` and `zipWith7` in `Data.OldList` to fuse.

These rules are kept in a similar style as the rules for `zip` and `zipWith`.

Added a corresponding test case.

Test Plan: validate

Reviewers: hvr, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rockbmb, rwbarton, carter

GHC Trac Issues: #15263

Differential Revision:

13 months agoWindows: Use the "big" PE object format on amd64
Ben Gamari [Thu, 6 Dec 2018 20:28:47 +0000 (15:28 -0500)] 
Windows: Use the "big" PE object format on amd64

Test Plan: Do full build on Windows.

Reviewers: AndreasK, Phyx

Reviewed By: AndreasK

Subscribers: rwbarton, erikd, carter

GHC Trac Issues: #15934

Differential Revision:

13 months agoDon't use a generic apply thunk for known calls
Sebastian Graf [Thu, 6 Dec 2018 15:40:08 +0000 (16:40 +0100)] 
Don't use a generic apply thunk for known calls

Currently, an AP thunk like `sat = f a b c` will not have its own entry
point and info pointer and will instead reuse a generic apply thunk
like `stg_ap_4_upd`.

That's great from a code size perspective, but if `f` is a known
function, a specialised entry point with a plain call can be much faster
than figuring out the arity and doing dynamic dispatch.

This looks at `f`s arity to figure out if it is a known function and if so, it
will not lower it to a generic apply function.

Benchmark results are encouraging: No changes to allocation, but 0.2% less
counted instructions.

Test Plan: Validates locally

Reviewers: simonmar, osa1, simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #16005

Differential Revision:

13 months agoRemove a tcTrace
Simon Peyton Jones [Thu, 6 Dec 2018 14:22:31 +0000 (14:22 +0000)] 
Remove a tcTrace

This tcTrace, in tcTyFamInstEqn, caused a knot-tying loop, because
it was printing a type after zonking-to-Type.  Easy solution: don't
do that.

13 months agoTests Trac #14847
Simon Peyton Jones [Thu, 6 Dec 2018 14:21:33 +0000 (14:21 +0000)] 
Tests Trac #14847

13 months agoRemove explicit recursion in retainer profiling (fixes #14758)
Alexander Vershilov [Wed, 5 Dec 2018 16:47:32 +0000 (19:47 +0300)] 
Remove explicit recursion in retainer profiling (fixes #14758)

Retainer profiling contained a recursion that under
certain circumstances could lead to the stack overflow
in C code.

The idea of the improvement is to keep an explicit stack for the
object, more precise to reuse existing stack, but allow new type of
objects to be stored there.

There is no reliable reproducer that is not a big program
but in some cases foldr (+) 0 [1..10000000] can work.

Reviewers: bgamari, simonmar, erikd, osa1

Reviewed By: bgamari, osa1

Subscribers: osa1, rwbarton, carter

GHC Trac Issues: #14758

Differential Revision:

13 months agoRemove duplicates in -ddump-minimial-imports
Simon Peyton Jones [Wed, 5 Dec 2018 10:12:09 +0000 (10:12 +0000)] 
Remove duplicates in -ddump-minimial-imports

This fixes Trac #15994.

Previously RdrName.gresToAvailInfo assumed that the input list
of GREs had no duplicates. I accidentally broke this precondition
in this refactoring:

    commit 6353efc7694ba8ec86c091918e02595662169ae2
    Date:   Thu Nov 22 14:48:05 2018 -0500

    Fix unused-import warnings

    This patch fixes a fairly long-standing bug (dating back to 2015) in
    RdrName.bestImport, namely

(There was an ASSERT, but it's usually switched off in stage2.  It
tripped when I switched stage2 assertions on.)

The fix is straightforward: account for dups in gresToAvailInfo.

13 months agolinker: store entire link map and use it.
Tamar Christina [Tue, 4 Dec 2018 00:29:08 +0000 (00:29 +0000)] 
linker: store entire link map and use it.

This fixes a corner case in which we have seen the symbol multiple times in
different static libraries, but due to a depencency we end up loading the
symbol from a library other than the first one.

Previously the runtime linker would only track symbols from the first
library and did not store the full link map.  In this case it was unable
to find the address for the symbols in the second library during delay

This change stores the address of all symbols seen so a full link map
is generated, such that when we make a different decision later than what
was expected we're able to still correctly load the library.

Test Plan: ./validate, new testcase T15894

Reviewers: angerman, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15894

Differential Revision:

13 months agoHadrian: include 'findPtr' via find-ptr cabal flag
Alec Theriault [Tue, 4 Dec 2018 00:21:48 +0000 (00:21 +0000)] 
Hadrian: include 'findPtr' via find-ptr cabal flag

This is the latest in the 'findPtr' saga. See

  * 900c47f88784b91517c00be3e1087322e62f698e
  * 561748cb507505bd5b7bd76bdc57796d896b62a2

for the previous attempts. The problem with re-using the 'debug'
cabal flag for the purpose of forcing inclusion of 'findPtr' occurs
when 'debug' is one of the RTS ways, but RTS is not being compiled
with '-DDEBUG':

  * the 'debug' flag gets passed to cabal, signalling to build
    'rts' with the debug flavour, but also forcing inclusion of
    the 'findPtr'/'_findPtr' symbol

  * since '-DDEBUG' isn't enabled, that symbol doesn't show up in
    the libraries, so executable that depend on 'rts' (everything)
    will end up always requiring 'findPtr'/'_findPtr' but 'rts' won'y
    provide it!

The fix is simple: create a a new 'find-ptr' cabal-flag whose only
purpose is forcing '-Wl,-u,findPtr'/'-Wl,-u,_findPtr'. Then, enable that
flag when the RTS is being compiled with '-DDEBUG'

Test Plan: ./hadrian/ -c # on mac

Reviewers: alpmestan, snowleopard, bgamari, erikd, simonmar, Phyx

Reviewed By: alpmestan, snowleopard, Phyx

Subscribers: Phyx, rwbarton, carter

GHC Trac Issues: #15956

Differential Revision:

13 months agoImprove test T14452 for Windows
Roland Senn [Tue, 4 Dec 2018 00:17:47 +0000 (00:17 +0000)] 
Improve test T14452 for Windows

Summary: Under Windows all parameters to gcc are enclosed in quotes, opposite to
Linux, where the quotes are missing. Therefore in the test, we remove all
quotes in the stdout file with sed.

Test Plan: make test TEST=T14452

Reviewers: osa1, hvr, bgamari, monoidal, Phyx, simonpj

Reviewed By: Phyx

Subscribers: rwbarton, carter

GHC Trac Issues: #14452

Differential Revision:

13 months agoBump nofib submodule [Mon, 3 Dec 2018 18:59:09 +0000 (19:59 +0100)] 
Bump nofib submodule

Test Plan: run nofib

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: rwbarton, carter

Differential Revision:

13 months agoFix link name to a note
Arnaud Spiwack [Mon, 3 Dec 2018 18:54:19 +0000 (19:54 +0100)] 
Fix link name to a note

Reviewers: goldfire, bgamari, tdammers

Reviewed By: tdammers

Subscribers: rwbarton, carter

Differential Revision:

13 months agoAdd test cases for #7503, #14451
Ryan Scott [Mon, 3 Dec 2018 16:34:02 +0000 (11:34 -0500)] 
Add test cases for #7503, #14451

At some point between 8.4 and 8.6, two things were fixed:

* The entirety of #14451.
* One of the test cases in #7503. I've added this as T7503a. The
  other test case from that ticket still does /not/ work, so we'll
  have to add T7503b some other day.

13 months agoComments only
Simon Peyton Jones [Mon, 3 Dec 2018 13:47:55 +0000 (13:47 +0000)] 
Comments only

13 months agoIntroduce tcTypeKind, and use it
Simon Peyton Jones [Mon, 3 Dec 2018 11:30:22 +0000 (11:30 +0000)] 
Introduce tcTypeKind, and use it

In the type checker Constraint and * are distinct; and the function
that takes the kind of a type should respect that distinction
(Trac #15971).

This patch implements the change:

* Introduce Type.tcTypeKind, and use it throughout the type
  inference engine

* Add new Note [Kinding rules for types] for the kinding
  rules, especially for foralls.

* Redefine
    isPredTy ty = tcIsConstraintKind (tcTypeKind ty)
  (it had a much more complicated definition before)

Some miscellaneous refactoring

* Get rid of TyCoRep.isTYPE, Kind.isTYPEApp,
  in favour of TyCoRep.kindRep, kindRep_maybe

* Rename Type.getRuntimeRepFromKind_maybe
  to getRuntimeRep_maybe

I did some spot-checks on compiler perf, and it really doesn't
budge (as expected).

13 months agoFix embarrassing infinite loop in pprParendType
Ryan Scott [Mon, 3 Dec 2018 12:03:55 +0000 (07:03 -0500)] 
Fix embarrassing infinite loop in pprParendType

`pprParendType` was missing an explicit case for
`EqualityT`, which caused it to fall through to a catch-all case
that invokes `ppr`. But `ppr` itself does not have a case for a
partial application of `EqualityT`, so //it// falls back to
`pprParendType`, resulting in an infinite loop!

The fix is simple: add a case for `EqualityT` in `pprParendType`.
While I was in the neighborhood, I removed the catch-call case in
`pprParendType` to make this sort of mistake less likely to happen
in the future.

Test Plan: make test TEST=T15985

Reviewers: bgamari, monoidal, simonpj

Reviewed By: monoidal, simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15985

Differential Revision:

13 months agoFix #15954 by rejigging check_type's order
Ryan Scott [Mon, 3 Dec 2018 12:03:52 +0000 (07:03 -0500)] 
Fix #15954 by rejigging check_type's order

Previously, `check_type` (which catches illegal uses of
unsaturated type synonyms without enabling `LiberalTypeSynonyms`,
among other things) always checks for uses of polytypes before
anything else. There is a problem with this plan, however:
checking for polytypes requires decomposing `forall`s and other
invisible arguments, an action which itself expands type synonyms!
Therefore, if we have something like:

type A a = Int
type B (a :: Type -> Type) = forall x. x -> x
type C = B A

Then when checking `B A`, `A` will get expanded to `forall x. x -> x`
before `check_type` has an opportunity to realize that `A` is an
unsaturated type synonym! This is the root cause of #15954.

This patch fixes the issue by moving the case of `check_type` that
detects polytypes to be //after// the case that checks for
`TyConApp`s. That way, the `TyConApp` case will properly flag things
like the unsaturated use of `A` in the example above before we ever
attempt to check for polytypes.

Test Plan: make test TEST=T15954

Reviewers: simonpj, bgamari, goldfire

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15954

Differential Revision:

13 months agoWarn on all out-of-range literals in pats/exprs
Alec Theriault [Mon, 3 Dec 2018 12:03:44 +0000 (07:03 -0500)] 
Warn on all out-of-range literals in pats/exprs

These changes were motivated by #13256. While poking around, I
realized we weren't very consistent in our "-Woverflowed-literals"
warnings. This patch fixes that by:

  * warning earlier on in the pipeline (ie. before we've desugared
    'Int' patterns into 'I# Int#')
  * handling 'HsLit' as well as 'HsOverLit' (this covers unboxed
  * covering more pattern / expression forms

4/6 of the warnings in the 'Overflow' test are due to this patch. The
other two are mostly for completeness.

Also fixed a missing empty-enumeration warning for 'Natural'.

This warnings were tripped up by the 'Bounded Word' instance (see #9505),
but the fix was obvious and simple: use unboxed word literals.

Test Plan: make TEST=Overflow && make TEST=T10930

Reviewers: hvr, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #13256, #10930

Differential Revision:

13 months agoupdate (CicleCI) CI script to work with ghc-ci
Alp Mestanogullari [Wed, 28 Nov 2018 15:31:31 +0000 (16:31 +0100)] 
update (CicleCI) CI script to work with ghc-ci

ghc-ci is a tiny webservice that acts as an intermediate between our
CircleCI jobs on Gitlab and the actual builds running on CircleCI, so that
the build script doesn't need to rely on any secret, which makes the whole
setup fork-friendly.

The concrete effect of this patch is to allow any fork of GHC on Gitlab to
run CircleCI jobs.

13 months agoHadrian: Print all testsuite output to stdout
Andrey Mokhov [Mon, 26 Nov 2018 22:18:36 +0000 (22:18 +0000)] 
Hadrian: Print all testsuite output to stdout


13 months agotestsuite: Don't use git status to determine whether we are inside a repo
Ben Gamari [Sat, 1 Dec 2018 14:28:57 +0000 (09:28 -0500)] 
testsuite: Don't use git status to determine whether we are inside a repo

Git status is extremely expensive for this task. We instead use `git rev-parse
HEAD` and throw away the output to ensure we don't spam the user.

13 months agoDisable most Pipelines-based validation ways
Ben Gamari [Sat, 1 Dec 2018 14:10:35 +0000 (09:10 -0500)] 
Disable most Pipelines-based validation ways

13 months agoAdd GitLab CI
Ben Gamari [Sat, 24 Nov 2018 00:20:00 +0000 (19:20 -0500)] 
Add GitLab CI

13 months agohadrian/test: Don't depend upon iserv on Windows
Ben Gamari [Mon, 26 Nov 2018 16:08:39 +0000 (11:08 -0500)] 
hadrian/test: Don't depend upon iserv on Windows

Iserv is not supported on Windows. This fixes #15950 but this whole situation
feels awfully fragile to me.

13 months agoAdd a Gitlab CI script that runs Circle CI validation jobs
Alp Mestanogullari [Wed, 7 Nov 2018 00:21:55 +0000 (01:21 +0100)] 
Add a Gitlab CI script that runs Circle CI validation jobs

And put it to use for running i386 and x86_64 linux validate,
x86_64 darwin validate and building with hadrian. For all the validate
jobs, we save the artifacts (bindist + test results for now) in Circle CI
and subsequently grab them in Gitlab. The nice side effect is that merge
requests now show the change in test results from the patches and let you
download or browse the artifacts.

13 months agoSkip all performance tests if not in a git repo.
David Eichmann [Fri, 30 Nov 2018 16:48:25 +0000 (16:48 +0000)] 
Skip all performance tests if not in a git repo.

Reviewers: bgamari, tdammers, osa1

Reviewed By: tdammers

Subscribers: osa1, tdammers, rwbarton, carter

GHC Trac Issues: #15923

Differential Revision:

13 months agoDeduplicate decision to count thunks in `-ticky`
Sebastian Graf [Fri, 30 Nov 2018 16:18:45 +0000 (17:18 +0100)] 
Deduplicate decision to count thunks in `-ticky`

Previously, the logic that checks whether a thunk has a counter or not
was duplicated in multiple functions.

This led to thunk enters being accounted to their enclosing functions in
`StgCmmTicky.tickyEnterThunk`, because the outer call to
`withNewTickyCounterThunk` didn't set the counter label for the thunk.
And rightly so! `tickyEnterThunk` should only account thunk enters to a
counter if `-ticky-dyn-thunk` is on.

This patch extracts the logic that was already present in its most
general form in `withNewTickyCounterThunk` into its own functions and
lets all other call sites checking for `-ticky-dyn-thunk` call this new
function named `thunkHasCounter` instead.

Reviewers: bgamari, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

Differential Revision:

13 months agoAdd 'Lift' instances for 'NonEmpty' and 'Void'
Alec Theriault [Fri, 30 Nov 2018 14:18:10 +0000 (09:18 -0500)] 
Add 'Lift' instances for 'NonEmpty' and 'Void'

Since 'NonEmpty' and 'Void' are now part of 'base', it makes
sense that we put 'Lift' instances for them in 'template-haskell'.
Not doing so is going to force users to define their own (possibly
colliding) orphan instances downstream.

Test Plan: ./validate

Reviewers: goldfire, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #15961

Differential Revision:

13 months agoTwo tests for Trac #14230
Simon Peyton Jones [Fri, 30 Nov 2018 14:00:14 +0000 (14:00 +0000)] 
Two tests for Trac #14230

13 months agoAccept T15828 test output
Ryan Scott [Fri, 30 Nov 2018 00:43:32 +0000 (19:43 -0500)] 
Accept T15828 test output

This test output changed slightly due to commit
2257a86daa72db382eb927df12a718669d5491f8 (which is expected).

13 months agoAdd a test case for #15962
Chaitanya Koparkar [Thu, 29 Nov 2018 23:47:33 +0000 (18:47 -0500)] 
Add a test case for #15962

Test Plan: make test TEST=T15962

Reviewers: RyanGlScott, bgamari

Reviewed By: RyanGlScott

Subscribers: rwbarton, carter

GHC Trac Issues: #15962

Differential Revision:

13 months agoMake ghc-in-ghci support Hadrian
Ryan Scott [Thu, 29 Nov 2018 23:46:39 +0000 (18:46 -0500)] 
Make ghc-in-ghci support Hadrian

Currently, `ghc-in-ghci` is hard-coded to only support
the installation path of the `make`-based build system. There isn't
a fundamental reason why this must be the case, however—it's just a
matter of communicating which directories to look into.

For the time being, I've hacked `utils/ghc-in-ghci/` to just
check the default Hadrian installation path in addition to the `make`
one. Disclaimer: I'm not well-versed in `bash`-fu, so it's possible
that there is a better way to accomplish what I'm setting out to do.
Suggestions welcome.

Test Plan: ./utils/ghc-in-ghci/

Reviewers: alpmestan, bgamari

Reviewed By: alpmestan

Subscribers: rwbarton, carter

Differential Revision:

13 months agoAllow containers-0.6, QuickCheck-2.12 in Hadrian
Ryan Scott [Thu, 29 Nov 2018 23:46:16 +0000 (18:46 -0500)] 
Allow containers-0.6, QuickCheck-2.12 in Hadrian

Currently, Hadrian has restrictive upper bounds on
`containers` and `QuickCheck` that prevents it from building with
the latest versions of each respective library ( and There doesn't appear to be any good reason to do so,
since Hadrian builds fine with them, so let's bump the upper version
bounds accordingly.

Test Plan: ./build/

Reviewers: bgamari, alpmestan, snowleopard

Reviewed By: snowleopard

Subscribers: rwbarton, carter

Differential Revision:

13 months agoFix #15953 by consistently using dumpIfSet_dyn to print debug output
Chaitanya Koparkar [Thu, 29 Nov 2018 23:45:07 +0000 (18:45 -0500)] 
Fix #15953 by consistently using dumpIfSet_dyn to print debug output

In some modules we directly dump the debugging output to STDOUT
via 'putLogMsg', 'printInfoForUser' etc. However, if `-ddump-to-file`
is enabled, that output should be written to a file. Easily fixed.

Certain tests (T3017, Roles3, T12763 etc.) expect part of the
output generated by `-ddump-types` to be in 'PprUser' style. However,
generally we want all other debugging output to use 'PprDump'
style. `traceTcRn` and `traceTcRnForUser` help us accomplish this.

This patch also documents some missing flags in the users guide.

Reviewers: RyanGlScott, bgamari, hvr

Reviewed By: RyanGlScott

Subscribers: rwbarton, carter

GHC Trac Issues: #15953

Differential Revision:

13 months agoAdd missing since annotations
Victor Nawothnig [Thu, 29 Nov 2018 23:44:36 +0000 (18:44 -0500)] 
Add missing since annotations

Reviewers: hvr, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #15930

Differential Revision:

13 months agoFix #15828, from `More explicit foralls`
Matthew Yacavone [Thu, 29 Nov 2018 23:42:39 +0000 (18:42 -0500)] 
Fix #15828, from `More explicit foralls`

Fix a bug in commit 12eeb9 which permits the following:

class C a where
  type T a b
instance C (Maybe a) where
  type forall a b. T (Maybe a) b = b

where instead, the user should write:

instance C (Maybe a) where
  type forall b. T (Maybe a) b = b

Update the users guide to discuss scoping of type variables in
explicit foralls in type family instances.

Test Plan: validate

Reviewers: bgamari, goldfire, monoidal

Reviewed By: goldfire

Subscribers: monoidal, rwbarton, carter

GHC Trac Issues: #15828

Differential Revision:

13 months agoTaming the Kind Inference Monster
Simon Peyton Jones [Wed, 28 Nov 2018 16:06:15 +0000 (16:06 +0000)] 
Taming the Kind Inference Monster

My original goal was (Trac #15809) to move towards using level numbers
as the basis for deciding which type variables to generalise, rather
than searching for the free varaibles of the environment.  However
it has turned into a truly major refactoring of the kind inference

Let's deal with the level-numbers part first:

* Augment quantifyTyVars to calculate the type variables to
  quantify using level numbers, and compare the result with
  the existing approach.  That is; no change in behaviour,
  just a WARNing if the two approaches give different answers.

* To do this I had to get the level number right when calling
  quantifyTyVars, and this entailed a bit of care, especially
  in the code for kind-checking type declarations.

* However, on the way I was able to eliminate or simplify
  a number of calls to solveEqualities.

This work is incomplete: I'm not /using/ level numbers yet.
When I subsequently get rid of any remaining WARNings in
quantifyTyVars, that the level-number answers differ from
the current answers, then I can rip out the current
"free vars of the environment" stuff.

Anyway, this led me into deep dive into kind inference for type and
class declarations, which is an increasingly soggy part of GHC.
Richard already did some good work recently in

   commit 5e45ad10ffca1ad175b10f6ef3327e1ed8ba25f3
   Date:   Thu Sep 13 09:56:02 2018 +0200

    Finish fix for #14880.

    The real change that fixes the ticket is described in
    Note [Naughty quantification candidates] in TcMType.

but I kept turning over stones. So this patch has ended up
with a pretty significant refactoring of that code too.

Kind inference for types and classes

* Major refactoring in the way we generalise the inferred kind of
  a TyCon, in kcTyClGroup.  Indeed, I made it into a new top-level
  function, generaliseTcTyCon.  Plus a new Note to explain it
  Note [Inferring kinds for type declarations].

* We decided (Trac #15592) not to treat class type variables specially
  when dealing with Inferred/Specified/Required for associated types.
  That simplifies things quite a bit. I also rewrote
  Note [Required, Specified, and Inferred for types]

* Major refactoring of the crucial function kcLHsQTyVars:
  I split it into
       kcLHsQTyVars_Cusk  and  kcLHsQTyVars_NonCusk
  because the two are really quite different. The CUSK case is
  almost entirely rewritten, and is much easier because of our new
  decision not to treat the class variables specially

* I moved all the error checks from tcTyClTyVars (which was a bizarre
  place for it) into generaliseTcTyCon and/or the CUSK case of
  kcLHsQTyVars.  Now tcTyClTyVars is extremely simple.

* I got rid of all the all the subtleties in tcImplicitTKBndrs. Indeed
  now there is no difference between tcImplicitTKBndrs and
  kcImplicitTKBndrs; there is now a single bindImplicitTKBndrs.
  Same for kc/tcExplicitTKBndrs.  None of them monkey with level
  numbers, nor build implication constraints.  scopeTyVars is gone
  entirely, as is kcLHsQTyVarBndrs. It's vastly simpler.

  I found I could get rid of kcLHsQTyVarBndrs entirely, in favour of
  the bnew bindExplicitTKBndrs.

* I now deal with the "naughty quantification candidates"
  of the previous patch in candidateQTyVars, rather than in
  quantifyTyVars; see Note [Naughty quantification candidates]
  in TcMType.

  I also killed off closeOverKindsCQTvs in favour of the same
  strategy that we use for tyCoVarsOfType: namely, close over kinds
  at the occurrences.

  And candidateQTyVars no longer needs a gbl_tvs argument.

* Passing the ContextKind, rather than the expected kind itself,
  to tc_hs_sig_type_and_gen makes it easy to allocate the expected
  result kind (when we are in inference mode) at the right level.

Type families
* I did a major rewrite of the impenetrable tcFamTyPats. The result
  is vastly more comprehensible.

* I got rid of kcDataDefn entirely, quite a big function.

* I re-did the way that checkConsistentFamInst works, so
  that it allows alpha-renaming of invisible arguments.

* The interaction of kind signatures and family instances is tricky.
    Type families: see Note [Apparently-nullary families]
    Data families: see Note [Result kind signature for a data family instance]
                   and Note [Eta-reduction for data families]

* The consistent instantation of an associated type family is tricky.
  See Note [Checking consistent instantiation] and
      Note [Matching in the consistent-instantation check]
  in TcTyClsDecls.  It's now checked in TcTyClsDecls because that is
  when we have the relevant info to hand.

* I got tired of the compromises in etaExpandFamInst, so I did the
  job properly by adding a field cab_eta_tvs to CoAxBranch.
  See Coercion.etaExpandCoAxBranch.

tcInferApps and friends
* I got rid of the mysterious and horrible ClsInstInfo argument
  to tcInferApps, checkExpectedKindX, and various checkValid
  functions.  It was horrible!

* I got rid of [Type] result of tcInferApps.  This list was used
  only in tcFamTyPats, when checking the LHS of a type instance;
  and if there is a cast in the middle, the list is meaningless.
  So I made tcInferApps simpler, and moved the complexity
  (not much) to tcInferApps.

  Result: tcInferApps is now pretty comprehensible again.

* I refactored the many function in TcMType that instantiate skolems.

Smaller things

* I rejigged the error message in checkValidTelescope; I think it's
  quite a bit better now.

* checkValidType was not rejecting constraints in a kind signature
     forall (a :: Eq b => blah). blah2
  That led to further errors when we then do an ambiguity check.
  So I make checkValidType reject it more aggressively.

* I killed off quantifyConDecl, instead calling kindGeneralize

* I fixed an outright bug in tyCoVarsOfImplic, where we were not
  colleting the tyvar of the kind of the skolems

* Renamed ClsInstInfo to AssocInstInfo, and made it into its
  own data type

* Some fiddling around with pretty-printing of family
  instances which was trickier than I thought.  I wanted
  wildcards to print as plain "_" in user messages, although
  they each need a unique identity in the CoAxBranch.

Some other oddments

* Refactoring around the trace messages from reportUnsolved.
* A bit of extra tc-tracing in TcHsSyn.commitFlexi

This patch fixes a raft of bugs, and includes tests for them.

 * #14887
 * #15740
 * #15764
 * #15789
 * #15804
 * #15817
 * #15870
 * #15874
 * #15881

13 months agoHadrian: support dynamically linking ghc
David Eichmann [Thu, 29 Nov 2018 17:22:16 +0000 (18:22 +0100)] 
Hadrian: support dynamically linking ghc

* (#15837 point 5) Use the -rpath gcc option and using the $ORIGIN
variable which the dynamic linker sets to the location of the ghc
* (#15837 point 4) "-fPIC -dynamic" options are used when building ghc
when either ghc or the rts have a dynamic way.
* (#15837 point 7) "-shared -dynload deploy" options are only used when
linking a library (no longer when linking a program).

Reviewers: bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: adamse, rwbarton, carter

Differential Revision:

13 months agoHadrian: bump Cabal submodule, install extra dynamic flavours of RTS
Alp Mestanogullari [Thu, 29 Nov 2018 16:14:57 +0000 (17:14 +0100)] 
Hadrian: bump Cabal submodule, install extra dynamic flavours of RTS

Previously, Hadrian was building all the appropriate dynamic ways for
but they were not picked up and installed in the package database when
we register the rts library. Since we use Cabal for registering
packages and
the .cabal files of packages as sources of truth for configuring and
we ended up patching Cabal to add a new field,
to specify those extra flavours to install in .cabal files:

We now make use of this in to expose dynamic flavours
behind a
Cabal flag, which Hadrian will use whenever we are building a GHC
flavour that
requires dynamic libraries.

This is all part of a larger plan to build a dynamic stage 2 GHC by
like with make, which in turn will fix a lot of test failures. See

Test Plan:
hadrian/ _build/stage1/lib/package.conf.d/rts-1.0.conf
_build/stage1/lib/x86_64-.../ should contain many libHSrts-*.so

Reviewers: snowleopard, DavidEichmann, bgamari, erikd, simonmar

Reviewed By: snowleopard, DavidEichmann

Subscribers: rwbarton, carter

GHC Trac Issues: #15837

Differential Revision:

13 months agoTest Trac #15943
Simon Peyton Jones [Thu, 29 Nov 2018 11:42:58 +0000 (11:42 +0000)] 
Test Trac #15943

This test seems to work in HEAD

13 months agoComments only
Simon Peyton Jones [Wed, 28 Nov 2018 15:30:10 +0000 (15:30 +0000)] 
Comments only

13 months agoAdd Note [Dead case binders in -O0]
Sebastian Graf [Wed, 28 Nov 2018 12:28:29 +0000 (13:28 +0100)] 
Add Note [Dead case binders in -O0]

After reverting Phab:D5358, Simon (Peyton Jones) asked for a Note
summarising why we want to keep the dead case binder check in `cgCase`.

Summary from mail conversation:

* Phab:D5324 means that we no longer /recompute/ dead-ness of case-binders in

* But TidyPgm preserves dead-ness info (see CoreTidy.tidyIdBndr)

* And so we can take advantage of it to avoid a redundant load. This load
  would be eliminated by CmmSink, but that only happens with -O

13 months agoHadrian: improve bindist rule
Alp Mestanogullari [Tue, 27 Nov 2018 12:17:53 +0000 (13:17 +0100)] 
Hadrian: improve bindist rule

As outlined in #15925, hadrian bindists had not made a clear choice with
respect to relocatable GHCs and wrapper scripts. This commit implements
the policy described in the ticket. That is:

- the bindists ship {bin, lib} as they are, modulo the addition of
  haddock from stage2/bin
- we now _always_ generate wrapper scripts for all the programs that
  are in the bindist's bin/ directory

The idea being that anyone on Linux/Windows/OS X can just unpack
the binary distribution anywhere and start using bin/ghc, while the
installation process systematicaly generates wrapper scripts.

Test Plan: hadrian/ binary-dist ; cd
_build/bindist/ghc-X.Y.Z-arch/; configure --prefix=/tmp/foo && make

Reviewers: snowleopard, bgamari, angerman

Reviewed By: snowleopard, bgamari, angerman

Subscribers: rwbarton, carter

GHC Trac Issues: #15925

Differential Revision:

13 months agoFix #15941 by only special-casing visible infix applications
Ryan Scott [Mon, 26 Nov 2018 17:59:50 +0000 (12:59 -0500)] 
Fix #15941 by only special-casing visible infix applications

The iface pretty-printer had a special case for an
application of an infix type constructor to two arguments. But this
didn't take the visibilities of the arguments into account, which
could lead to strange output like `@{LiftedRep} -> @{LiftedRep}` when
`-fprint-explicit-kinds` was enabled (#15941). The fix is relatively
straightforward: simply plumb through the visibilities of each
argument, and only trigger the special case for infix applications
if both arguments are visible (i.e., required).

Test Plan: make test TEST=T15941

Reviewers: goldfire, bgamari, monoidal

Reviewed By: goldfire, monoidal

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #15941

Differential Revision:

13 months agoUse autoconf to generate version numbers for libiserv and friends
Ryan Scott [Mon, 26 Nov 2018 17:59:30 +0000 (12:59 -0500)] 
Use autoconf to generate version numbers for libiserv and friends

Currently, the version numbers for `libiserv`, `iserv`, and
`iserv-proxy` are hard-coded directly into their `.cabal` files.
These are easy to forget to update, and in fact, this has already
happened once (see #15866). Let's use `autoconf` to do this for us
so that it is not forgotten in the future.

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, erikd, carter

GHC Trac Issues: #15866

Differential Revision:

13 months agoPrint explicit foralls in type family eqns when appropriate
Ryan Scott [Mon, 26 Nov 2018 17:59:09 +0000 (12:59 -0500)] 
Print explicit foralls in type family eqns when appropriate

When `-fprint-explicit-foralls` is enabled, type family
equations are either printed without an explict `forall` entirely,
or with a bizarre square bracket syntax (in the case of closed type
families). I find neither satisfying, so in this patch, I introduce
support for printing explicit `forall`s in open type-family, closed
type-family, and data-family equations when appropriate. (By "when
appropriate", I refer to the conditions laid out in
`Note [When to print foralls]` in `IfaceType`.)

One tricky point in the implementation is that I had to pick a
visibility for each type variable in a `CoAxiom`/`FamInst` in order
to be able to pass it to `pprUserIfaceForAll` //et al.// Because
the type variables in a type family instance equation can't be
instantiated by the programmer anyway, the choice only really matters
for pretty-printing purposes, so I simply went with good ol'
trustworthy `Specified`. (This design choice is documented in
`Note [Printing foralls in type family instances]` in `IfaceType`.)

Test Plan: make test TEST=T15827

Reviewers: goldfire, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #15827

Differential Revision:

13 months agoFix build on darwin
Ömer Sinan Ağacan [Mon, 26 Nov 2018 09:27:59 +0000 (12:27 +0300)] 
Fix build on darwin

CPP error introduced with b2950e0

13 months agoRevert "Remove redundant check in cgCase"
Ömer Sinan Ağacan [Mon, 26 Nov 2018 09:00:02 +0000 (12:00 +0300)] 
Revert "Remove redundant check in cgCase"

This reverts commit d13b7d60650cb84af11ee15b3f51c3511548cfdb.

(See discussion in D5358)

13 months agoRemove unused declarations in MarkWeak.h
Ömer Sinan Ağacan [Sun, 25 Nov 2018 14:03:39 +0000 (17:03 +0300)] 
Remove unused declarations in MarkWeak.h

14 months agoCircleCI: More cleanup
Ben Gamari [Sat, 24 Nov 2018 18:08:06 +0000 (13:08 -0500)] 
CircleCI: More cleanup

14 months agoRevert "Fix uninformative hp2ps error when the cmdline contains double quotes"
Ben Gamari [Sat, 24 Nov 2018 19:01:40 +0000 (14:01 -0500)] 
Revert "Fix uninformative hp2ps error when the cmdline contains double quotes"

This reverts commit 390df8b51b917fb6409cbde8e73fe838d61d8832.

14 months agoCircleCI: Clean up docker image
Ben Gamari [Sat, 24 Nov 2018 17:34:57 +0000 (12:34 -0500)] 
CircleCI: Clean up docker image

14 months ago[TTG: Handling Source Locations] Foundation and Pat
Shayan-Najd [Thu, 22 Nov 2018 01:23:29 +0000 (01:23 +0000)] 
[TTG: Handling Source Locations] Foundation and Pat

This patch removes the ping-pong style from HsPat (only, for now),
using the plan laid out at (solution

- the class `HasSrcSpan`, and its functions (e.g., `cL` and `dL`), are introduced
- some instances of `HasSrcSpan` are introduced
- some constructors `L` are replaced with `cL`
- some patterns `L` are replaced with `dL->L` view pattern
- some type annotation are necessarily updated (e.g., `Pat p` --> `Pat (GhcPass p)`)

Phab diff: D5036
Trac Issues #15495

Updates haddock submodule

14 months agoFix unused import warning
= [Sat, 24 Nov 2018 09:08:36 +0000 (11:08 +0200)] 
Fix unused import warning

Presumably introduced by new unused import checker.

14 months agoRevert "'DynFlag'-free version of 'mkParserFlags'"
Ben Gamari [Fri, 23 Nov 2018 19:09:30 +0000 (14:09 -0500)] 
Revert "'DynFlag'-free version of 'mkParserFlags'"

This reverts commit 5aa29231ab7603537284eff5e4caff3a73dba6d2.

14 months agoRevert "Simplify 'ExtBits' in the lexer"
Ben Gamari [Fri, 23 Nov 2018 19:09:28 +0000 (14:09 -0500)] 
Revert "Simplify 'ExtBits' in the lexer"

This reverts commit d2fbc33c4ff3074126ab71654af8bbf8a46e4e11.

14 months agoBump text submodule
Ben Gamari [Fri, 23 Nov 2018 17:32:09 +0000 (12:32 -0500)] 
Bump text submodule

14 months agoBump containers submodule
Ben Gamari [Fri, 23 Nov 2018 17:30:13 +0000 (12:30 -0500)] 
Bump containers submodule

14 months agousers guide: Clarify meanings of -g<n> flags
Ben Gamari [Thu, 22 Nov 2018 22:20:40 +0000 (17:20 -0500)] 
users guide: Clarify meanings of -g<n> flags

14 months agodistrib/configure: Set RanlibCmd
Ben Gamari [Thu, 8 Nov 2018 02:02:19 +0000 (21:02 -0500)] 
distrib/configure: Set RanlibCmd

This fixes #15875.

14 months agoconfigure: Use LLVM 7.0
Ben Gamari [Thu, 22 Nov 2018 21:07:49 +0000 (16:07 -0500)] 
configure: Use LLVM 7.0

14 months agoImplement late lambda lift
Sebastian Graf [Fri, 23 Nov 2018 15:24:18 +0000 (16:24 +0100)] 
Implement late lambda lift

This implements a selective lambda-lifting pass late in the STG

Lambda lifting has the effect of avoiding closure allocation at the cost
of having to make former free vars available at call sites, possibly
enlarging closures surrounding call sites in turn.

We identify beneficial cases by means of an analysis that estimates
closure growth.

There's a Wiki page at

Reviewers: simonpj, bgamari, simonmar

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #9476

Differential Revision:

14 months agoTypofix in help text
Gabor Greif [Fri, 23 Nov 2018 11:02:49 +0000 (12:02 +0100)] 
Typofix in help text

14 months agoUse handy shortcut llvm_ways
Gabor Greif [Fri, 23 Nov 2018 09:09:57 +0000 (10:09 +0100)] 
Use handy shortcut llvm_ways

14 months agoFix unused-import warnings
David Eichmann [Thu, 22 Nov 2018 19:48:05 +0000 (14:48 -0500)] 
Fix unused-import warnings

This patch fixes a fairly long-standing bug (dating back to 2015) in
RdrName.bestImport, namely

   commit 9376249b6b78610db055a10d05f6592d6bbbea2f
   Author: Simon Peyton Jones <>
   Date:   Wed Oct 28 17:16:55 2015 +0000

   Fix unused-import stuff in a better way

In that patch got the sense of the comparison back to front, and
thereby failed to implement the unused-import rules described in
  Note [Choosing the best import declaration] in RdrName

This led to Trac #13064 and #15393

Fixing this bug revealed a bunch of unused imports in libraries;
the ones in the GHC repo are part of this commit.

The two important changes are

* Fix the bug in bestImport

* Modified the rules by adding (a) in
     Note [Choosing the best import declaration] in RdrName
  Reason: the previosu rules made Trac #5211 go bad again.  And
  the new rule (a) makes sense to me.

In unravalling this I also ended up doing a few other things

* Refactor RnNames.ImportDeclUsage to use a [GlobalRdrElt] for the
  things that are used, rather than [AvailInfo]. This is simpler
  and more direct.

* Rename greParentName to greParent_maybe, to follow GHC
  naming conventions

* Delete dead code RdrName.greUsedRdrName

Bumps a few submodules.

Reviewers: hvr, goldfire, bgamari, simonmar, jrtc27

Subscribers: rwbarton, carter

Differential Revision:

14 months agoDon't pass -no-pie when -pgmc is supplied
Krzysztof Gogolewski [Thu, 22 Nov 2018 19:46:27 +0000 (14:46 -0500)] 
Don't pass -no-pie when -pgmc is supplied

Test Plan: validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15319

Differential Revision:

14 months agoSimplify 'ExtBits' in the lexer
Alec Theriault [Thu, 22 Nov 2018 19:40:08 +0000 (14:40 -0500)] 
Simplify 'ExtBits' in the lexer

The main change is to export 'ExtBits' instead of defining/exporting a
bunch of boilerplate functions that test for a particular 'ExtBits'.
In the process, I also

  * cleaned up an unneeded special case for 'ITstatic'
  * made 'UsePosPrags' another variant of 'ExtBits'
  * made the logic in 'reservedSymsFM' match that of 'reservedWordsFM'

Test Plan: make test

Reviewers: bgamari, alanz

Subscribers: sjakobi, rwbarton, mpickering, carter

Differential Revision:

14 months ago'DynFlag'-free version of 'mkParserFlags'
Alec Theriault [Thu, 22 Nov 2018 19:39:41 +0000 (14:39 -0500)] 
'DynFlag'-free version of 'mkParserFlags'

Obtaining a `DynFlags` is difficult, making using the lexer/parser
for pure parsing/lexing unreasonably difficult, even with
This is despite the fact that we only really need

  * language extension flags
  * warning flags
  * a handful of boolean options

The new `mkParserFlags'` function makes is easier to directly construct
a `ParserFlags`. Furthermore, since `pExtsBitmap` is just a footgun,
I've gone ahead and made `ParserFlags` an abstract type.

Reviewers: bgamari, alanz, sjakobi

Reviewed By: bgamari, sjakobi

Subscribers: mpickering, sjakobi, rwbarton, carter

GHC Trac Issues: #11301

Differential Revision:

14 months agoDoc-only fixes
Alec Theriault [Fri, 21 Sep 2018 06:31:00 +0000 (23:31 -0700)] 
Doc-only fixes

* laws are capitalized definition lists, no emphasis on the labels
* adds missing hyperlinks
* fixes other misc. Haddock markup issues.

14 months agoLLVM: Use generic code for small size quot-rem ops
Peter Trommler [Sun, 18 Nov 2018 15:41:38 +0000 (16:41 +0100)] 
LLVM: Use generic code for small size quot-rem ops

14 months agorts/MachO: Iterate through N (all) symbols, not M external symbols
Dario Bertini [Fri, 16 Nov 2018 14:49:37 +0000 (15:49 +0100)] 
rts/MachO: Iterate through N (all) symbols, not M external symbols

Fixes #15105

14 months agorts/MachO: A bit of refactoring in ocGetNames
Dario Bertini [Fri, 16 Nov 2018 14:48:36 +0000 (15:48 +0100)] 
rts/MachO: A bit of refactoring in ocGetNames

Eliminates a bit of repetition.

14 months agorts/MachO: Add a bit more debugging output to getNames
Dario Bertini [Fri, 16 Nov 2018 14:46:54 +0000 (15:46 +0100)] 
rts/MachO: Add a bit more debugging output to getNames

14 months agocircleci: Actually build with in-tree GMP on Darwin
Dario Bertini [Fri, 16 Nov 2018 09:25:32 +0000 (10:25 +0100)] 
circleci: Actually build with in-tree GMP on Darwin

Fixes #15404.

14 months agollvmGen: Eliminate duplicate definition
Gabor Greif [Tue, 20 Nov 2018 13:35:09 +0000 (14:35 +0100)] 
llvmGen: Eliminate duplicate definition

remove local

14 months agoUNREG: PprC: Add support for adjacent floats
James Clarke [Thu, 22 Nov 2018 16:55:17 +0000 (11:55 -0500)] 
UNREG: PprC: Add support for adjacent floats

When two 32-bit floats are adjacent for a 64-bit target, there is no
padding between them to force alignment, so we must combine their bit
representations into a single word.

Reviewers: bgamari, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15853

Differential Revision:

14 months agoOverhaul -fprint-explicit-kinds to use VKA
Ryan Scott [Thu, 22 Nov 2018 16:55:00 +0000 (11:55 -0500)] 
Overhaul -fprint-explicit-kinds to use VKA

This patch changes the behavior of `-fprint-explicit-kinds`
so that it displays kind argument using visible kind application.
In other words, the flag now:

1. Prints instantiations of specified variables with `@(...)`.
2. Prints instantiations of inferred variables with `@{...}`.

In addition, this patch removes the `Use -fprint-explicit-kinds to
see the kind arguments` error message that often arises when a type
mismatch occurs due to different kinds. Instead, whenever there is a
kind mismatch, we now enable the `-fprint-explicit-kinds` flag
locally to help cue to the programmer where the error lies.
(See `Note [Kind arguments in error messages]` in `TcErrors`.)
As a result, these funny `@{...}` things can now appear to the user
even without turning on the `-fprint-explicit-kinds` flag explicitly,
so I took the liberty of documenting them in the users' guide.

Test Plan: ./validate

Reviewers: goldfire, simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15871

Differential Revision:

14 months agoHadrian: Misc. fixes in Haddock rules
Alec Theriault [Thu, 22 Nov 2018 16:53:10 +0000 (11:53 -0500)] 
Hadrian: Misc. fixes in Haddock rules

* Pass 'GHC/Prim.hs' to Haddock when processing 'ghc-prim'. This
  file is autogenerated for the sole purpose of giving Haddock
  something to process, so we really should make sure it gets
  through to Haddock!

* Add a "docs-haddock" build rule, which should build all Haddock docs
  that the Makefile builds by default (all libs + index for libs + ghc)

* Prune some unnecessary rules (esp. `gen_contents_index`)

Reviewers: bgamari, snowleopard

Reviewed By: snowleopard

Subscribers: alpmestan, snowleopard, rwbarton, carter

Differential Revision:

14 months agoRemove warnings-silencing flags for code generated by Alex
Simon Jakobi [Thu, 22 Nov 2018 16:52:53 +0000 (11:52 -0500)] 
Remove warnings-silencing flags for code generated by Alex

Current versions of Alex don't seem to produce as many warnings any

In order to silence a warning and to avoid overlong lines, I've taken
the liberty of refactoring 'tok_num'.

Test Plan: ./validate

Reviewers: bgamari, simonmar

Reviewed By: simonmar

Subscribers: erikd, rwbarton, carter

Differential Revision:

14 months agoCalling gcc: Pass optc flags as last options (#14452)
Roland Senn [Thu, 22 Nov 2018 16:52:33 +0000 (11:52 -0500)] 
Calling gcc: Pass optc flags as last options (#14452)

Test Plan: make test TEST=T14452

Reviewers: hvr, bgamari, monoidal, thomie, osa1

Reviewed By: osa1

Subscribers: rwbarton, carter

GHC Trac Issues: #14452

Differential Revision:

14 months agoFix #15852 by eta expanding data family instance RHSes, too
Ryan Scott [Thu, 22 Nov 2018 16:52:12 +0000 (11:52 -0500)] 
Fix #15852 by eta expanding data family instance RHSes, too

When I defined `etaExpandFamInstLHS`, I blatantly forgot
to eta expand the RHSes of data family instances. (Actually, I
claimed that they didn't //need// to be eta expanded. I'm not sure
what I was thinking.)

This fixes the issue by changing `etaExpandFamInstLHS` to
`etaExpandFamInst` and, well, making it actually eta expand the RHS.

Test Plan: make test TEST=T15852

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15852

Differential Revision:

14 months agoRefactor TcRnMonad.mapAndRecoverM
Simon Jakobi [Thu, 22 Nov 2018 16:51:53 +0000 (11:51 -0500)] 
Refactor TcRnMonad.mapAndRecoverM

This version doesn't require the 'reverse' step after the monadic

Test Plan: ./validate

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: monoidal, rwbarton, carter

Differential Revision:

14 months agoFix uninformative hp2ps error when the cmdline contains double quotes
Zejun Wu [Thu, 22 Nov 2018 16:51:15 +0000 (11:51 -0500)] 
Fix uninformative hp2ps error when the cmdline contains double quotes

The format of hp file didn't allow double quotes inside strings, and
under prof build, we include args in JOB, which may have double quotes.
When this happens, the error message is confusing to the user. This can
also happen under normal build if the executable name contains double
quite, which is unlikely though.

We fix this issue by introducing escaping for double quotes inside a
string by repeating it twice.

We also fix a buffer overflow bug when the length of the string happen
to be multiple of 5000.

Test Plan:
new tests, which used to fail with error message:

hp2ps: "T15904".hp, line 2: integer must follow identifier

use new ghc and hp2ps to profile a simple program.

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15904

Differential Revision:

14 months agoLoad plugins in interactive session
Christiaan Baaij [Thu, 22 Nov 2018 16:50:51 +0000 (11:50 -0500)] 
Load plugins in interactive session

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: monoidal, rwbarton, carter

GHC Trac Issues: #15633

Differential Revision:

14 months agoFix deadlock bug when mkFastStringWith is duplicated
Zejun Wu [Thu, 22 Nov 2018 16:49:51 +0000 (11:49 -0500)] 
Fix deadlock bug when mkFastStringWith is duplicated

In D5211, we use `withMVar` to guard writes to the same segment, this
is unsafe to be duplicated. It can lead to deadlock if it is only run
partially and `putMVar` is not called after `takeMVar`.

Test Plan:

We used to see deadlock when building stackage without this fix, and it
no longer happens.

Reviewers: simonmar, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

Differential Revision:

14 months agoplugins10 no longer broken
Christiaan Baaij [Thu, 22 Nov 2018 16:49:37 +0000 (11:49 -0500)] 
plugins10 no longer broken

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: rwbarton, carter

GHC Trac Issues: #15216

Differential Revision:

14 months force inclusion of findPtr/_findPtr symbol only with debug flag
Alp Mestanogullari [Thu, 22 Nov 2018 16:47:48 +0000 (11:47 -0500)] force inclusion of findPtr/_findPtr symbol only with debug flag

The previous strategy caused problems on Windows, as pointed out
at [1]


Reviewers: Phyx, bgamari, erikd, simonmar

Reviewed By: Phyx

Subscribers: rwbarton, carter

GHC Trac Issues: #15671

Differential Revision:

14 months agoHadrian: work around Cabal's/GHC's different Arch/OS strings
Alec Theriault [Thu, 22 Nov 2018 16:47:27 +0000 (11:47 -0500)] 
Hadrian: work around Cabal's/GHC's different Arch/OS strings

The path to the 'include' subdirectory of 'rts' includes a folder that
whose name is generated by Cabal and mentiones the architecture and OS.
For example:


Hadrian needs to be aware that Cabal renders architectures and OSes in
a slightly different way than GHC. There is already symmetric logic in
Cabal (for working with GHC environment files, which follow GHC's naming

Test Plan: ./hadrian/ -c "binary-dist" # on mac

Reviewers: snowleopard, alpmestan, bgamari

Reviewed By: snowleopard

Subscribers: rwbarton, carter

GHC Trac Issues: #15922

Differential Revision:

14 months agorts: fix Windows megablock allocator
Tamar Christina [Thu, 22 Nov 2018 16:47:10 +0000 (11:47 -0500)] 
rts: fix Windows megablock allocator

The megablock allocator does not currently check that after aligning the
free region if it still has enough space to actually do the allocation.

This causes it to return a memory region which it didn't fully allocate
itself.  Even worse, it can cause it to return a block with a region
that will be present in two allocation pools.

This causes if you're lucky an error from the OS that you're committing
memory that has never been reserved, or causes random heap corruption.

This change makes it consider the alignment as well.

Test Plan: ./validate , testcase testmblockalloc

Reviewers: bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

Differential Revision:

14 months agoDon't reverse explicit export lists during renaming
Simon Jakobi [Thu, 22 Nov 2018 16:45:35 +0000 (11:45 -0500)] 
Don't reverse explicit export lists during renaming

This will be useful for Hi Haddock / D5067.

Previously any export list in 'tcg_rn_exports' would be in reverse

Also remove a redundant setSrcSpan.

Test Plan: ./validate

Reviewers: bgamari

Subscribers: rwbarton, carter

Differential Revision:

14 months agoFixup the new code layout patch for SplitObjs. [Thu, 22 Nov 2018 16:43:53 +0000 (11:43 -0500)] 
Fixup the new code layout patch for SplitObjs.

When splitting objects we sometimes generate
dummy CmmProcs containing bottom in some fields.

Code introduced in the new code layout patch looked
at these which blew up the compiler. Now we instead
check first if the function actually contains code.

Reviewers: bgamari

Subscribers: simonpj, rwbarton, carter

Differential Revision:

14 months agotestuite: update more windows tests outputs
Tamar Christina [Thu, 22 Nov 2018 16:43:37 +0000 (11:43 -0500)] 
testuite: update more windows tests outputs

Test Plan: ./validate

Reviewers: bgamari, simonmar

Subscribers: rwbarton, carter

Differential Revision:

14 months agorts: Fix bss initialization on Windows
Tamar Christina [Thu, 22 Nov 2018 16:43:15 +0000 (11:43 -0500)] 
rts: Fix bss initialization on Windows

This patch fixes BSS initialization such that it is
initialized to 0 as you'd expect.

Test Plan: ./validate, test T7040_ghci

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15669

Differential Revision:

14 months agorts/M32Alloc: Abort if m32 linker mmap fails
Ben Gamari [Sat, 10 Nov 2018 20:35:37 +0000 (15:35 -0500)] 
rts/M32Alloc: Abort if m32 linker mmap fails

Previously we should just blinding dereference a NULL pointer.

14 months agoAdd test for #15437
Matthew Pickering [Thu, 22 Nov 2018 16:38:10 +0000 (11:38 -0500)] 
Add test for #15437

Reviewers: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15437

Differential Revision:

14 months agobase: Mention openFile throwing does-not-exist-errors on FIFOs
Ben Gamari [Thu, 22 Nov 2018 16:33:39 +0000 (11:33 -0500)] 
base: Mention openFile throwing does-not-exist-errors on FIFOs

As discussed in #15715, the POSIX specification specifies that
attempting to open a FIFO in write-only mode when the FIFO has no
readers will fail with -ENOENT.

[skip ci]

Test Plan: Read it

Reviewers: hvr

Subscribers: rwbarton, carter

GHC Trac Issues: #15715

Differential Revision:

14 months agoFix GhostScript detection (Trac #15856)
Krzysztof Gogolewski [Thu, 22 Nov 2018 16:32:55 +0000 (11:32 -0500)] 
Fix GhostScript detection (Trac #15856)

The option `confdir` (used in GhostScript test) was set correctly
via `--config` in `` and incorrectly via `config/ghc`.
AFAICT, some time ago this was working because the
incorrect assignment was done first, and later it broke.

Hardian doesn't pass `confdir`. I removed `confdir` and use
`` to determine the directory of the
`` and `` files. This is simpler.

I also removed some redundant assignments in `config/ghc`.

Test Plan: manually set config.have_profiling and make test

Reviewers: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15856

Differential Revision:

14 months agoRename literal constructors
Sylvain Henry [Thu, 22 Nov 2018 16:31:16 +0000 (11:31 -0500)] 
Rename literal constructors

In a previous patch we replaced some built-in literal constructors
(MachInt, MachWord, etc.) with a single LitNumber constructor.

In this patch we replace the `Mach` prefix of the remaining constructors
with `Lit` for consistency (e.g., LitChar, LitLabel, etc.).

Sadly the name `LitString` was already taken for a kind of FastString
and it would become misleading to have both `LitStr` (literal
constructor renamed after `MachStr`) and `LitString` (FastString
variant). Hence this patch renames the FastString variant `PtrString`
(which is more accurate) and the literal string constructor now uses the
least surprising `LitString` name.

Both `Literal` and `LitString/PtrString` have recently seen breaking
changes so doing this kind of renaming now shouldn't harm much.

Reviewers: hvr, goldfire, bgamari, simonmar, jrtc27, tdammers

Subscribers: tdammers, rwbarton, thomie, carter

Differential Revision:

14 months agousers guide: We no longer build libraries with -split-objs
Ben Gamari [Thu, 22 Nov 2018 00:17:41 +0000 (19:17 -0500)] 
users guide: We no longer build libraries with -split-objs

We now generally use split-sections instead.

14 months agoMinor performance optimisation
Gabor Greif [Wed, 21 Nov 2018 17:30:49 +0000 (18:30 +0100)] 
Minor performance optimisation

only concat once