16 months agoRemove obsolete file
Herbert Valerio Riedel [Thu, 2 Aug 2018 13:46:21 +0000 (15:46 +0200)] 
Remove obsolete file

This was missed by 0960a37868e6d08857e86465c8ca346b29b1c813

[skip ci]

16 months agoFix #15415 and simplify tcWildCardBinders
Vladislav Zavialov [Wed, 1 Aug 2018 18:28:16 +0000 (14:28 -0400)] 
Fix #15415 and simplify tcWildCardBinders

Test Plan: Validate

Reviewers: goldfire, simonpj, bgamari

Reviewed By: simonpj

Subscribers: RyanGlScott, rwbarton, thomie, carter

GHC Trac Issues: #15415

Differential Revision:

16 months agoFix #15450 by refactoring checkEmptyCase'
Ryan Scott [Wed, 1 Aug 2018 18:26:44 +0000 (14:26 -0400)] 
Fix #15450 by refactoring checkEmptyCase'

`checkEmptyCase'` (the code path for coverage-checking
`EmptyCase` expressions) had a fair bit of code duplication from the
code path for coverage-checking non-`EmptyCase` expressions, and to
make things worse, it behaved subtly different in some respects (for
instance, emitting different warnings under unsatisfiable
constraints, as shown in #15450). This patch attempts to clean up
both this discrepancy and the code duplication by doing the

* Factor out a `pmInitialTmTyCs` function, which returns the initial
  set of term and type constraints to use when beginning coverage
  checking. If either set of constraints is unsatisfiable, we use an
  empty set in its place so that we can continue to emit as many
  warnings as possible. (The code path for non-`EmptyCase`
  expressions was doing this already, but not the code path for
  `EmptyCase` expressions, which is the root cause of #15450.)

  Along the way, I added a `Note` to explain why we do this.
* Factor out a `pmIsSatisfiable` constraint which checks if a set of
  term and type constraints are satisfiable. This does not change any
  existing behavior; this is just for the sake of deduplicating code.

Test Plan: make test TEST=T15450

Reviewers: simonpj, bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15450

Differential Revision:

16 months agolinker: Nub rpaths
Moritz Angermann [Wed, 1 Aug 2018 18:25:03 +0000 (14:25 -0400)] 
linker: Nub rpaths

When compiling and linking files in `ghci`, we keep adding rpath
arguments to the linker command invoation.  If those are identical we
should `nub` them out.  Otherwise we not only risk overflowing the
argument limit, but also embed huge amounts of identical rpath values
into the dynamic library, eventually leading to the overflow of the load
command size limit, due to the number of rpath entries alone.

A further improvement could be to pass `-Xlinker -dead_strip_dylibs`;
that however might be stipping too aggressively, and potentially lead to
missing symbols?

For the time being I suggest to only do the nubbing and if need be to
provide -Wl,-dead_strip_dylibs when invoking ghci.

Test Plan: ./validate

Reviewers: bgamari, hvr

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15446

Differential Revision:

16 months agoPlugin dependency information is stored separately
Christiaan Baaij [Wed, 1 Aug 2018 18:21:22 +0000 (14:21 -0400)] 
Plugin dependency information is stored separately

We need to store the used plugins so that we recompile
a module when a plugin that it uses is recompiled.

However, storing the `ModuleName`s of the plugins used by a
module in the `dep_mods` field made the rest of GHC think
that they belong in the HPT, causing at least the issues
reported in #15234

We therefor store the `ModuleName`s of the plugins in a
new field, `dep_plgins`, which is only used the the
recompilation logic.

Reviewers: mpickering, bgamari

Reviewed By: mpickering, bgamari

Subscribers: alpmestan, rwbarton, thomie, carter

GHC Trac Issues: #15234

Differential Revision:

16 months agoRemove the type-checking knot.
Richard Eisenberg [Tue, 17 Jul 2018 04:12:34 +0000 (00:12 -0400)] 
Remove the type-checking knot.

Bug #15380 hangs because a knot-tied TyCon ended up in a kind.
Looking at the code in tcInferApps, I'm amazed this hasn't happened
before! I couldn't think of a good way to fix it (with dependent
types, we can't really keep types out of kinds, after all), so
I just went ahead and removed the knot.

This was remarkably easy to do. In tcTyVar, when we find a TcTyCon,
just use it. (Previously, we looked up the knot-tied TyCon and used
that.) Then, during the final zonk, replace TcTyCons with the real,
full-blooded TyCons in the global environment. It's all very easy.

The new bit is explained in the existing
Note [Type checking recursive type and class declarations]
in TcTyClsDecls.

Naturally, I removed various references to the knot and the
zonkTcTypeInKnot (and related) functions. Now, we can print types
during type checking with abandon!

NB: There is a teensy error message regression with this patch,
around the ordering of quantified type variables. This ordering
problem is fixed (I believe) with the patch for #14880. The ordering
affects only internal variables that cannot be instantiated with
any kind of visible type application.

There is also a teensy regression around the printing of types
in TH splices. I think this is really a TH bug and will file

Test case: dependent/should_fail/T15380

16 months agoRevert "Don't inline functions with RULES too early"
Ben Gamari [Wed, 1 Aug 2018 10:42:19 +0000 (06:42 -0400)] 
Revert "Don't inline functions with RULES too early"

This commit causes significant performance regressions:
bytes allocated value is too high:
    Expected    T9872d(normal) bytes allocated: 578498120 +/-5%
    Lower bound T9872d(normal) bytes allocated: 549573214
    Upper bound T9872d(normal) bytes allocated: 607423026
    Actual      T9872d(normal) bytes allocated: 677179968
    Deviation   T9872d(normal) bytes allocated:      17.1 %
bytes allocated value is too high:
    Expected    T9872c(normal) bytes allocated: 3096670112 +/-5%
    Lower bound T9872c(normal) bytes allocated: 2941836606
    Upper bound T9872c(normal) bytes allocated: 3251503618
    Actual      T9872c(normal) bytes allocated: 3601872536
    Deviation   T9872c(normal) bytes allocated:       16.3 %
bytes allocated value is too high:
    Expected    T9872b(normal) bytes allocated: 3730686224 +/-5%
    Lower bound T9872b(normal) bytes allocated: 3544151912
    Upper bound T9872b(normal) bytes allocated: 3917220536
    Actual      T9872b(normal) bytes allocated: 4374298272
    Deviation   T9872b(normal) bytes allocated:       17.3 %
bytes allocated value is too high:
    Expected    T9872a(normal) bytes allocated: 2729927408 +/-5%
    Lower bound T9872a(normal) bytes allocated: 2593431037
    Upper bound T9872a(normal) bytes allocated: 2866423779
    Actual      T9872a(normal) bytes allocated: 3225788896
    Deviation   T9872a(normal) bytes allocated:       18.2 %
It's not clear that this was intentional so I'm going to revert for now.

This reverts commit 2110738b280543698407924a16ac92b6d804dc36.

16 months agorts: Fix unused function
Ben Gamari [Wed, 1 Aug 2018 10:15:59 +0000 (06:15 -0400)] 
rts: Fix unused function

16 months agobase: Fix documentation of System.Environment.Blank
Ben Gamari [Tue, 31 Jul 2018 15:34:01 +0000 (11:34 -0400)] 
base: Fix documentation of System.Environment.Blank

This documentation was a bit unprofessional and the markup wasn't

Reviewers: hvr, alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agousers-guide: Document default +RTS -I value
Ben Gamari [Tue, 31 Jul 2018 15:33:50 +0000 (11:33 -0400)] 
users-guide: Document default +RTS -I value

As mentioned in #15402.

[no ci]

Test Plan: Read it.

Reviewers: alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15402

Differential Revision:

16 months agotestsuite: Add test for #14346
Sylvain Henry [Tue, 31 Jul 2018 15:02:20 +0000 (11:02 -0400)] 
testsuite: Add test for #14346

16 months agoBump Cabal submodule
Ben Gamari [Mon, 30 Jul 2018 23:46:13 +0000 (19:46 -0400)] 
Bump Cabal submodule

16 months agodoc: Fix command for creating a shared library.
Mathieu Boespflug [Sat, 28 Jul 2018 05:33:13 +0000 (07:33 +0200)] 
doc: Fix command for creating a shared library.

The previous command did not work. The `-o` flag was missing.
Moreover, without `-dynamic`, the `-shared` flag will raise obscure
link errors because GHC will try to use static objects when creating
the shared library.

16 months agoEnable two-step allocator on FreeBSD
Ben Gamari [Mon, 30 Jul 2018 22:01:40 +0000 (18:01 -0400)] 
Enable two-step allocator on FreeBSD

Simplify #ifdef nesting and use MAP_GUARD on FreeBSD and similar
systems. This allows the two-step allocator to be used on FreeBSD,
fixing #15348.

16 months agorts: Disable -fkeep-inline-functions due to lack of support on Clang
Ben Gamari [Tue, 31 Jul 2018 00:48:21 +0000 (20:48 -0400)] 
rts: Disable -fkeep-inline-functions due to lack of support on Clang

But keep it as a comment since it is quite useful yet not very discoverable.

16 months agoAdd the paper "Evidence normalisation in System FC"
Simon Peyton Jones [Tue, 31 Jul 2018 12:17:58 +0000 (13:17 +0100)] 
Add the paper "Evidence normalisation in System FC"

This is with a view to editing it to include new developments in
the coerion infrastructure.

16 months agoDon't inline functions with RULES too early
Simon Peyton Jones [Mon, 30 Jul 2018 12:43:56 +0000 (13:43 +0100)] 
Don't inline functions with RULES too early

Trac #15445 showed that a function with an automatically
generated specialisation RULE coudl be inlined before the
RULE had a chance to fire.

This patch attaches a NOINLINE[2] activation to the Id, to
stop this happening.

16 months agobase: Make Foreign.Marshal.Alloc.allocBytes[Aligned] NOINLINE
Ben Gamari [Tue, 24 Oct 2017 16:19:08 +0000 (12:19 -0400)] 
base: Make Foreign.Marshal.Alloc.allocBytes[Aligned] NOINLINE

As noted in #14346, touch# may be optimized away when the simplifier can see
that the continuation passed to allocaBytes will not return. Marking CPS-style
functions with NOINLINE ensures that the simplier can't draw any unsound

Ultimately the right solution here will be to do away with touch# and instead
introduce a scoped primitive as is suggested in #14375.

Note: This was present in 8.2 but was never merged to 8.4 in hopes that
we would have #14375 implemented in time. This meant that the issue
regressed again in 8.4. Thankfully we caught it in time to fix it for

(cherry picked from commit 404bf05ed3193e918875cd2f6c95ae0da5989be2)

16 months agoFix minor formatting issue in users_guide/bugs.rst
Josh Price [Fri, 27 Jul 2018 04:00:31 +0000 (00:00 -0400)] 
Fix minor formatting issue in users_guide/bugs.rst

16 months agoBump terminfo submodule to
Ben Gamari [Fri, 27 Jul 2018 13:57:52 +0000 (09:57 -0400)] 
Bump terminfo submodule to

16 months agoGHC doesn't handle ./ prefixed paths correctly (#12674)
roland [Mon, 30 Jul 2018 20:34:20 +0000 (21:34 +0100)] 
GHC doesn't handle ./ prefixed paths correctly (#12674)

Summary: If a filename starts with a hypen, GHC keeps the prefixed "./" path.

Test Plan: make test TEST=T12674

Reviewers: Phyx, nomeata, bgamari, erikd

Reviewed By: Phyx

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #12674

Differential Revision:

16 months agoFix #15385 by using addDictsDs in matchGuards
Ryan Scott [Mon, 30 Jul 2018 12:47:39 +0000 (08:47 -0400)] 
Fix #15385 by using addDictsDs in matchGuards

When coverage checking pattern-matches, we rely on the call
sites in the desugarer to populate the local dictionaries and term
evidence in scope using `addDictsDs` and `addTmCsDs`. But it turns
out that only the call site for desugaring `case` expressions was
actually doing this properly. In another part of the desugarer,
`matchGuards` (which handles pattern guards), it did not update the
local dictionaries in scope at all, leading to #15385.

Fixing this is relatively straightforward: just augment the
`BindStmt` case of `matchGuards` to use `addDictsDs` and `addTmCsDs`.
Accomplishing this took a little bit of import/export tweaking:

* We now need to export `collectEvVarsPat` from `HsPat.hs`.
* To avoid an import cycle with `Check.hs`, I moved `isTrueLHsExpr`
  from `DsGRHSs.hs` to `DsUtils.hs`, which resides lower on the
  import chain.

Test Plan: make test TEST=T15385

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15385

Differential Revision:

16 months agoFix #15453: bug in ForAllCo case in opt_trans_rule
Ningning Xie [Sun, 29 Jul 2018 11:15:33 +0000 (13:15 +0200)] 
Fix #15453: bug in ForAllCo case in opt_trans_rule


co1 = \/ tv1 : eta1. r1
co2 = \/ tv2 : eta2. r2

We would like to optimize `co1; co2` so we push transitivity inside forall.
It should be

\/tv1 : (eta1;eta2).  (r1; r2[tv2 |-> tv1 |> eta1])

It is implemented in the ForAllCo case in opt_trans_rule in OptCoercion.
However current implementation is not right:

r2' = substCoWithUnchecked [tv2] [TyVarTy tv1] r2 -- ill-kinded!

This patch corrects it to be

r2' = substCoWithUnchecked [tv2] [mkCastTy (TyVarTy tv1) eta1] r2

Test Plan: validate

Reviewers: bgamari, goldfire, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15453

Differential Revision:

16 months agoFix Git commit ID detection in Git worktrees
Sylvain Henry [Sat, 28 Jul 2018 15:48:04 +0000 (17:48 +0200)] 
Fix Git commit ID detection in Git worktrees

Summary: When using a Git worktree, ".git" is a file, not a directory

Reviewers: bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, thomie, erikd, carter

Differential Revision:

16 months agoFix Ar crashing on odd-sized object files (Trac #15396)
Krzysztof Gogolewski [Fri, 27 Jul 2018 20:10:52 +0000 (22:10 +0200)] 
Fix Ar crashing on odd-sized object files (Trac #15396)

Summary: All the work was done by Moritz Angermann.

Test Plan: validate

Reviewers: angerman, RyanGlScott, bgamari

Reviewed By: angerman

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15396

Differential Revision:

16 months agoRemove dead code in testsuite driver
Krzysztof Gogolewski [Fri, 27 Jul 2018 16:40:26 +0000 (18:40 +0200)] 
Remove dead code in testsuite driver

Test Plan: validate

Reviewers: bgamari, O7 GHC - Testsuite

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoFix endian issues in ghc-heap
Peter Trommler [Thu, 26 Jul 2018 21:23:22 +0000 (17:23 -0400)] 
Fix endian issues in ghc-heap

In test heap_all arity and n_args were swapped on big endian

Take care of endianness when reading parts of a machine word
from a `Word`.

This fixes one out of 36 failing tests reported in #15399.

Test Plan: validate

Reviewers: simonmar, bgamari, hvr, erikd

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15399

Differential Revision:

16 months agoDisable GNUC_ATTR_HOT when compiling with DEBUG
Ben Gamari [Thu, 26 Jul 2018 21:23:12 +0000 (17:23 -0400)] 
Disable GNUC_ATTR_HOT when compiling with DEBUG

Test Plan: Validate

Reviewers: simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agorts: More forceful cc debugging flags
Ben Gamari [Thu, 26 Jul 2018 21:21:48 +0000 (17:21 -0400)] 
rts: More forceful cc debugging flags

Reviewers: simonmar, alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoModifications to support loading GHC into GHCi
Michael Sloan [Thu, 26 Jul 2018 21:21:08 +0000 (17:21 -0400)] 
Modifications to support loading GHC into GHCi

This change was previously part of
[D4904](, but is being split off
to aid in getting this reviewed and merged.

* The compiler code is built with `NoImplicitPrelude`, but GHCi's
  modules are incompatible with it. So, this adds the pragma to all GHCi
  modules that didn't have it, and adds imports of Prelude.

* In order to run GHC within itself, a `call of 'initGCStatistics`
  needed to be skipped. This uses CPP to skip it when

* There is an environment variable workaround suggested by Ben Gamari
  [1], where `_GHC_TOP_DIR` can be used to specify GHC's top dir if `-B`
  isn't provided.  This can be used to solve a problem where the GHC being
  run within GHCi attempts to look in `inplace/lib/lib/` instead of


Reviewers: goldfire, bgamari, erikd, alpmestan

Reviewed By: alpmestan

Subscribers: alpmestan, lelf, rwbarton, thomie, carter

Differential Revision:

16 months agoupdate core-spec for GRefl and re-factored Refl
ningning [Thu, 26 Jul 2018 21:20:42 +0000 (17:20 -0400)] 
update core-spec for GRefl and re-factored Refl

Ticket #15192 introduced the generalized reflexive coercion `GRefl` and
nominal reflexive `Refl`, and removed `CoherenceCo`. Update core-spec
accordingly.  Not sure about notations though; suggestions on more
concise notations would be great.

Test Plan: Read core-spec.pdf

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoAdd an expect_broken test for #14185
Krzysztof Gogolewski [Thu, 26 Jul 2018 21:20:29 +0000 (17:20 -0400)] 
Add an expect_broken test for #14185

Test Plan: validate

Reviewers: goldfire, bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14185

Differential Revision:

16 months agoFix gcCAFs()
Simon Marlow [Thu, 26 Jul 2018 21:19:54 +0000 (17:19 -0400)] 
Fix gcCAFs()

The test here should have been changed after D1106.  It was harmless
but we caught fewer GC'd CAFs than we should have.

Test Plan:
Using `nofib/imaginary/primes` compiled with `-debug`.

> ./primes 100 +RTS -G1 -A32k -DG
CAF gc'd at 0x0x7b0960
CAF gc'd at 0x0x788728
CAF gc'd at 0x0x790db0
CAF gc'd at 0x0x790de0
12 CAFs live
CAF gc'd at 0x0x788880
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
CAF gc'd at 0x0x7995c8
13 CAFs live


> ./primes 100 +RTS -G1 -A32k -DG
CAF gc'd at 0x0x7b0960
CAF gc'd at 0x0x788728
CAF gc'd at 0x0x790db0
CAF gc'd at 0x0x790de0
12 CAFs live
CAF gc'd at 0x0x788880
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
12 CAFs live
CAF gc'd at 0x0x7995c8
CAF gc'd at 0x0x790ea0
12 CAFs live

Reviewers: bgamari, osa1, erikd, noamz

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoRun StgCse after unarise, fixes #15300
Ömer Sinan Ağacan [Thu, 26 Jul 2018 21:19:35 +0000 (17:19 -0400)] 
Run StgCse after unarise, fixes #15300

Given two unboxed sum terms:

    (# 1 | #) :: (# Int | Int# #)
    (# 1 | #) :: (# Int | Int  #)

These two terms are not equal as they unarise to different unboxed
tuples. However StgCse was thinking that these are equal, and replacing
one of these with a binder to the other.

To not deal with unboxed sums in StgCse we now do it after unarise. For
StgCse to maintain post-unarise invariants we factor-out case binder
in-scopeness check to `stgCaseBndrInScope` and use it in StgCse.

Also did some refactoring in SimplStg.

Another way to fix this would be adding a special case in StgCse to not
bring unboxed sum binders in scope:

    diff --git a/compiler/simplStg/StgCse.hs
    index 6c740ca4cb..93a0f8f6ad 100644
    --- a/compiler/simplStg/StgCse.hs
    +++ b/compiler/simplStg/StgCse.hs
    @@ -332,7 +332,11 @@ stgCseExpr env (StgLetNoEscape binds body)
     stgCseAlt :: CseEnv -> OutId -> InStgAlt -> OutStgAlt
     stgCseAlt env case_bndr (DataAlt dataCon, args, rhs)
         = let (env1, args') = substBndrs env args
    -          env2 = addDataCon case_bndr dataCon (map StgVarArg
args') env1
    +          env2
    +            | isUnboxedSumCon dataCon
    +            = env1
    +            | otherwise
    +            = addDataCon case_bndr dataCon (map StgVarArg args')
                 -- see note [Case 2: CSEing case binders]
               rhs' = stgCseExpr env2 rhs
           in (DataAlt dataCon, args', rhs')

I think this patch seems better in that it doesn't add a special case to

Test Plan:

I tried to come up with a minimal example but failed. I thought a simple
program like

    data T = T (# Int | Int #) (# Int# | Int #)

    case T (# 1 | #) (# 1 | #) of ...

should be enough to trigger this bug, but for some reason StgCse
doesn't do
anything on this program.

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15300

Differential Revision:

16 months agoFail instead of panic-ing when qAddTopDecls has conversion error
Michael Sloan [Thu, 26 Jul 2018 21:18:22 +0000 (17:18 -0400)] 
Fail instead of panic-ing when qAddTopDecls has conversion error

See for an example where
GHC panics when using qAddTopDecls on [d| f = Bool |]. Instead, it
should be a normal error message, and that's what this change is for. It
does not entirely resolve Trac#14627, since "Illegal variable name:
'bool'" isn't a very good error for this cirumstance.

Test Plan: Manually tested.

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoAdd a script for running a ghci that can load and run ghc
Michael Sloan [Thu, 26 Jul 2018 21:17:41 +0000 (17:17 -0400)] 
Add a script for running a ghci that can load and run ghc

Add scripts and .ghci files for loading GHC into GHCi

Major credit to Csongor Kiss who wrote nearly all of settings.ghci

Some small modifications to GHC are needed to make this work, and this
diff depends on [D4986]( being

Test Plan:
Manual for now. I have some thoughts on how to run the entire testsuite

Reviewers: alpmestan, mpickering, goldfire, bgamari, erikd

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoMake :doc work for the ghc library
Simon Jakobi [Thu, 26 Jul 2018 21:17:17 +0000 (17:17 -0400)] 
Make :doc work for the ghc library

We already include -haddock in the GhcLibHcOpts in order to include
the boot libraries' docs in their .hi-files.

By including -haddock in the GhcStage2HcOpts and GhcStage3HcOpts, we
make the docs for the ghc library also available to the GHCi :doc

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agorts: Flush eventlog in hs_init_ghc (fixes #15440)
Mitsutoshi Aoe [Thu, 26 Jul 2018 05:50:51 +0000 (14:50 +0900)] 
rts: Flush eventlog in hs_init_ghc (fixes #15440)

Without this change RTS typically doesn't flush some important
events until the process terminates or it doesn't write them at
all in case it terminates abnormally.

Here is a list of such events:


16 months agoBump haddock submodule
Ben Gamari [Fri, 27 Jul 2018 15:40:30 +0000 (11:40 -0400)] 
Bump haddock submodule

16 months agoSmall refactor in desugar of pattern matching
Simon Peyton Jones [Fri, 27 Jul 2018 08:17:20 +0000 (09:17 +0100)] 
Small refactor in desugar of pattern matching

In reviewing Phab:D4968 for Trac #15385 I saw a small
but simple refactor to avoid unnecessary work in the

This patch just arranges to call
   matchSinglePatVar v ...
rather than
   matchSinglePat (Var v) ...

The more specialised function already existed, as

I also added more comments about decideBangHood

16 months agoRefactor (~) to reduce the suerpclass stack
Simon Peyton Jones [Fri, 27 Jul 2018 08:01:46 +0000 (09:01 +0100)] 
Refactor (~) to reduce the suerpclass stack

The constraint (~) used to be (effectively):
  class a ~~ b => (a :: k) ~ (b :: k)

but, with this patch, it is now defined uniformly with
(~~) and Coercible like this:
  class a ~# b => (a :: k) ~ (b :: k)

  * One less superclass selection when goinng from (~) to (~#)
    Better for compile time and better for debugging with -ddump-simpl

  * The code for (~), (~~), and Coercible looks uniform, and appears
    together, e.g. in TysWiredIn and ClsInst.matchGlobalInst.
    Previously the code for (~) was different, and unique.

Not only is this simpler, but it also makes the compiler a bit faster;
  T12227: 9% less allocation
  T12545: 7% less allocation

This patch fixes Trac #15421

16 months agoComments only
Simon Peyton Jones [Wed, 25 Jul 2018 16:50:28 +0000 (17:50 +0100)] 
Comments only

16 months agoFix PrelRules.caseRules to account for out-of-range tags
Simon Peyton Jones [Wed, 25 Jul 2018 15:41:16 +0000 (16:41 +0100)] 
Fix PrelRules.caseRules to account for out-of-range tags

As Trac #15436 points out, it is possible to get
   case dataToTag# (x :: T) of
      DEFAULT -> blah1
      -1#     -> blah2
      0       -> blah3

The (-1#) alterantive is unreachable, because dataToTag# returns
tags in the range [0..n-1] where n is the number of data constructors
in type T.

This actually made GHC crash; now we simply discard the unreachable
alterantive.  See Note [Unreachable caseRules alternatives]
in PrelRules

16 months agoComments only
Simon Peyton Jones [Wed, 25 Jul 2018 11:03:43 +0000 (12:03 +0100)] 
Comments only

16 months agotc-tracing only
Simon Peyton Jones [Wed, 25 Jul 2018 10:52:44 +0000 (11:52 +0100)] 
tc-tracing only

16 months agoFix and document cloneWC
Simon Peyton Jones [Wed, 25 Jul 2018 10:47:45 +0000 (11:47 +0100)] 
Fix and document cloneWC

The cloneWC, cloneWanted, cloneImplication family are used by
  * TcHoleErrors
  * TcRule
to clone the /bindings/ in a constraint, so that solving the
constraint will not add bindings to the program. The idea is only
to affect unifications.

But I had it wrong -- I failed to clone the EvBindsVar of an
implication.  That gave an assert failure, I think, as well as
useless dead code.

The fix is easy.  I'm not adding a test case.

In the type 'TcEvidence.EvBindsVar', I also renamed the
'NoEvBindsVar' constructor to 'CoEvBindsVar'.  It's not that we
have /no/ evidence bindings, just that we can only have coercion
bindings, done via HoleDest.

16 months agoTreat isConstraintKind more consistently
Simon Peyton Jones [Wed, 25 Jul 2018 10:35:43 +0000 (11:35 +0100)] 
Treat isConstraintKind more consistently

It turned out that we were not being consistent
about our use of isConstraintKind.

It's delicate, because the typechecker treats Constraint and Type as
/distinct/, whereas they are the /same/ in the rest of the compiler
(Trac #11715).

And had it wrong, which led to Trac #15412.  This patch does the

* Rename isConstraintKind      to tcIsConstraintKind
         returnsConstraintKind to tcReturnsConstraintKind
  to emphasise that they use the 'tcView' view of types.

* Move these functions, and some related ones (tcIsLiftedTypeKind),
  from Kind.hs, to group together in Type.hs, alongside isPredTy.

It feels very unsatisfactory that these 'tcX' functions live in Type,
but it happens because isPredTy is called later in the compiler
too.  But it's a consequence of the 'Constraint vs Type' dilemma.

16 months agoImprove error message on un-satisfied import
Simon Peyton Jones [Wed, 25 Jul 2018 10:21:36 +0000 (11:21 +0100)] 
Improve error message on un-satisfied import

  import M( C( a,b,c ) )
where class C is defined as
  module M where
     class C x where
        a :: blah
        c :: blah

Tnen (Trac #15413) we'd like to get an error message only about
failing to import C( b ), not C( a,b,c ).

This was fairly easy (and local) to do.

Turned out that the existing tests mod81 and mod91 are adequate
tests for the feature.

16 months agoSet GenSigCtxt for the argument part of tcSubType
Simon Peyton Jones [Wed, 25 Jul 2018 08:55:36 +0000 (09:55 +0100)] 
Set GenSigCtxt for the argument part of tcSubType

The reason for this change is described in TcUnify
Note [Settting the argument context], and Trac #15438.

The only effect is on error messages, where it stops GHC
reporting an outright falsity (about the type signature for
a function) when it finds an errors in a higher-rank situation.

The testsuite changes in this patch illustrate the problem.

16 months agoBuild more implications
Simon Peyton Jones [Wed, 25 Jul 2018 08:51:38 +0000 (09:51 +0100)] 
Build more implications

The "non-local error" problem in Trac #14185 was due to the
interaction of constraints from different function definitions.

This patch makes a start towards fixing it.  It adds
TcUnify.alwaysBuildImplication to unconditionally build an
implication in some cases, to keep the constraints from different
functions separate.

See the new Note [When to build an implication] in TcUnify.

But a lot of error messages change, so for now I have set
   alwaysBuildImplication = False

Result: no operational change at all.  I'll get back to it!

16 months agoClone relevant constraints to avoid side-effects on HoleDests. Fixes #15370.
Matthías Páll Gissurarson [Tue, 24 Jul 2018 21:57:48 +0000 (23:57 +0200)] 
Clone relevant constraints to avoid side-effects on HoleDests. Fixes #15370.

Summary: When looking for valid hole fits, the constraints relevant
to the hole may sometimes contain a HoleDest. Previously,
these were not cloned, which could cause the filling of filled
coercion hole being, which would cause an assert to fail. This is now fixed.

Test Plan: Regression test included.

Reviewers: simonpj, bgamari, goldfire

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15370

Differential Revision:

16 months agoRemove dead code in TcUnify
Krzysztof Gogolewski [Tue, 24 Jul 2018 21:26:56 +0000 (23:26 +0200)] 
Remove dead code in TcUnify

Summary: RelaxedPolyRec is not used anymore

Test Plan: validate

Reviewers: bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoSuppress -Winaccessible-code in derived code
Ryan Scott [Tue, 24 Jul 2018 12:40:42 +0000 (14:40 +0200)] 
Suppress -Winaccessible-code in derived code

It's rather unfortunate that derived code can produce inaccessible
code warnings (as demonstrated in #8128, #8740, and #15398), since
the programmer has no control over the generated code. This patch
aims to suppress `-Winaccessible-code` in all derived code. It
accomplishes this by doing the following:

* Generalize the `ic_env :: TcLclEnv` field of `Implication` to
  be of type `Env TcGblEnc TcLclEnv` instead. This way, it also
  captures `DynFlags`, which record the flag state at the time
  the `Implication` was created.
* When typechecking derived code, turn off `-Winaccessible-code`.
  This way, any insoluble given `Implication`s that are created when
  typechecking this derived code will remember that
  `-Winaccessible-code` was disabled.
* During error reporting, consult the `DynFlags` of an
  `Implication` before making the decision to report an inaccessible
  code warning.

Test Plan: make test TEST="T8128 T8740 T15398"

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: monoidal, rwbarton, thomie, carter

GHC Trac Issues: #8128, #8740, #15398

Differential Revision:

16 months agoFix a nasty bug in piResultTys
Simon Peyton Jones [Tue, 24 Jul 2018 07:57:34 +0000 (08:57 +0100)] 
Fix a nasty bug in piResultTys

I was failing to instantiate vigorously enough in Type.piResultTys
and in the very similar function ToIface.toIfaceAppArgsX

This caused Trac #15428.  The fix is easy.

See Note [Care with kind instantiation] in Type.hs

16 months agoStop marking soluble ~R# constraints as insoluble
Simon Peyton Jones [Mon, 23 Jul 2018 14:33:13 +0000 (15:33 +0100)] 
Stop marking soluble ~R# constraints as insoluble

We had a constraint (a b ~R# Int), and were marking it as 'insoluble'.
That's bad; it isn't.  And it caused Trac #15431. Soultion is simple.

I did a tiny refactor on can_eq_app, so that it is used only for
nominal equalities.

16 months agoFix some casts.
Richard Eisenberg [Thu, 19 Jul 2018 04:16:13 +0000 (00:16 -0400)] 
Fix some casts.

This fixes #15346, and is a team effort between Ryan Scott and
myself (mostly Ryan). We discovered two errors related to FC's
"push" rules, one in the TPush rule (as implemented in pushCoTyArg)
and one in KPush rule (it shows up in liftCoSubstVarBndr).

The solution: do what the paper says, instead of whatever random
thoughts popped into my head as I was actually implementing.

Also fixes #15419, which is actually the same underlying problem.

Test case: dependent/should_compile/T{15346,15419}.

16 months agofixup! Disable T10962 on llvm for now
Krzysztof Gogolewski [Sun, 22 Jul 2018 20:50:06 +0000 (22:50 +0200)] 
fixup! Disable T10962 on llvm for now

16 months agoDisable T10962 on llvm for now
Krzysztof Gogolewski [Sun, 22 Jul 2018 20:34:52 +0000 (22:34 +0200)] 
Disable T10962 on llvm for now

This breaks Harbormaster builds.

16 months agoFix pretty-printing of data declarations in splices
Krzysztof Gogolewski [Sun, 22 Jul 2018 16:58:33 +0000 (18:58 +0200)] 
Fix pretty-printing of data declarations in splices

Test Plan: validate

Reviewers: RyanGlScott, bgamari

Reviewed By: RyanGlScott

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15365

Differential Revision:

16 months agoFix a major copy'n'paste error in LLVM CodeGen
Krzysztof Gogolewski [Sun, 22 Jul 2018 15:33:32 +0000 (17:33 +0200)] 
Fix a major copy'n'paste error in LLVM CodeGen

In D4592, `AddWordC` is lowered as an unsigned subtraction instead
of an unsigned addition when compiling with LLVM.

This patch rectifies that.

Reviewers: angerman, bgamari, monoidal

Reviewed By: angerman, bgamari, monoidal

Subscribers: osa1, rwbarton, thomie, carter

Differential Revision:

16 months agoFix the GHCi debugger with ApplicativeDo
Simon Marlow [Sun, 22 Jul 2018 15:03:33 +0000 (17:03 +0200)] 
Fix the GHCi debugger with ApplicativeDo

`collectLStmtsBinders` was returning nothing for `ApplicativeStmts`, which
caused the debugger to not track free variables in many cases when using

Test Plan:
* new test case
* validate

Reviewers: bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15422

Differential Revision:

16 months agoHarden fixST
David Feuer [Sat, 21 Jul 2018 19:45:35 +0000 (15:45 -0400)] 
Harden fixST

Trac #15349 reveals that lazy blackholing can cause trouble for
`fixST` much like it can for `fixIO`. Make `fixST` work just
like `fixIO`.

Reviewers: simonmar, hvr, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15349

Differential Revision:

16 months agoFix the TcLevel not being set correctly when finding valid hole fits
Matthías Páll Gissurarson [Sat, 21 Jul 2018 13:48:53 +0000 (15:48 +0200)] 
Fix the TcLevel not being set correctly when finding valid hole fits

This fixes the problem revealed by a new assert as it relates to valid
hole fits. However, tests `T10384`, `T14040a` and `TcStaticPointersFail02`
still fail the assert, but they are unrelated to valid hole fits.

Reviewers: bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie, carter

GHC Trac Issues: #15384

Differential Revision:

16 months agoAvoid redundant invocation of 'findTopDir'
Michael Sloan [Fri, 20 Jul 2018 14:53:41 +0000 (16:53 +0200)] 
Avoid redundant invocation of 'findTopDir'

While working on [D904](, I noticed that
'findTopDir' was being invoked three times.  This isn't a big problem, because
it is usually very cheap.  On windows, it does require some involved logic,
though, so to me it would make sense to only run it once.

Reviewers: bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoFix #15423 by using pprAStmtContext
Ryan Scott [Fri, 20 Jul 2018 10:50:50 +0000 (12:50 +0200)] 
Fix #15423 by using pprAStmtContext

Previously, we were using `pprStmtContext` instead, which
led to error messages missing indefinite articles where they were

Test Plan: make test TEST="T13242a T7786 Typeable1"

Reviewers: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15423

Differential Revision:

16 months agoSmall spelling fixes for Unify.hs
Sasa Bogicevic [Thu, 19 Jul 2018 10:23:20 +0000 (13:23 +0300)] 
Small spelling fixes for Unify.hs

Reviewers: bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agofix osReserveHeapMemory block alignment
Sergei Trofimovich [Wed, 18 Jul 2018 22:36:58 +0000 (23:36 +0100)] 
fix osReserveHeapMemory block alignment

Before the change osReserveHeapMemory() attempted
to allocate chunks of memory via osTryReserveHeapMemory()
not multiple of MBLOCK_SIZE in the following fallback code:

    if (at == NULL) {
        *len -= *len / 8;

and caused assertion failure:

$ make fulltest TEST=T11607 WAY=threaded1
T11607: internal error: ASSERTION FAILED: file rts/posix/OSMem.c, line 457
    (GHC version 8.7.20180716 for riscv64_unknown_linux)


The change applies alignment mask before each MBLOCK allocation attempt
and fixes WAY=threaded1 test failures on qemu-riscv64.

Signed-off-by: Sergei Trofimovich <>
Test Plan: run 'make fulltest WAY=threaded1'

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agostack: fix stack allocations on Windows
Tamar Christina [Wed, 18 Jul 2018 20:03:58 +0000 (21:03 +0100)] 
stack: fix stack allocations on Windows

On Windows one is not allowed to drop the stack by more than a page size.
The reason for this is that the OS only allocates enough stack till what
the TEB specifies. After that a guard page is placed and the rest of the
virtual address space is unmapped.

The intention is that doing stack allocations will cause you to hit the
guard which will then map the next page in and move the guard.  This is
done to prevent what in the Linux world is known as stack clash

There are modules in GHC for which the liveliness analysis thinks the
reserved 8KB of spill slots isn't enough.  One being DynFlags and the
other being Cabal.

Though I think the Cabal one is likely a bug:

  4d6544:       81 ec 00 46 00 00       sub    $0x4600,%esp
  4d654a:       8d 85 94 fe ff ff       lea    -0x16c(%ebp),%eax
  4d6550:       3b 83 1c 03 00 00       cmp    0x31c(%ebx),%eax
  4d6556:       0f 82 de 8d 02 00       jb     4ff33a <_cLpg_info+0x7a>
  4d655c:       c7 45 fc 14 3d 50 00    movl   $0x503d14,-0x4(%ebp)
  4d6563:       8b 75 0c                mov    0xc(%ebp),%esi
  4d6566:       83 c5 fc                add    $0xfffffffc,%ebp
  4d6569:       66 f7 c6 03 00          test   $0x3,%si
  4d656e:       0f 85 a6 d7 02 00       jne    503d1a <_cLpb_info+0x6>
  4d6574:       81 c4 00 46 00 00       add    $0x4600,%esp

It allocates nearly 18KB of spill slots for a simple 4 line function
and doesn't even use it.  Note that this doesn't happen on x64 or
when making a validate build.  Only when making a build without a
validate and

This and the allocation in DynFlags means the stack allocation will jump
over the guard page into unmapped memory areas and GHC or an end program

The pagesize on x86 Windows is 4KB which means we hit it very easily for
these two modules, which explains the total DOA of GHC 32bit for the past
3 releases and the "random" segfaults on Windows.

0:000> bp 00503d29
0:000> gn
Breakpoint 0 hit
WARNING: Stack overflow detected. The unwound frames are extracted from outside
         normal stack bounds.
eax=03b6b9c9 ebx=00dc90f0 ecx=03cac48c edx=03cac43d esi=03b6b9c9 edi=03abef40
eip=00503d29 esp=013e96fc ebp=03cf8f70 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
00503d29 89442440        mov     dword ptr [esp+40h],eax ss:002b:013e973c=????????
WARNING: Stack overflow detected. The unwound frames are extracted from outside
         normal stack bounds.
WARNING: Stack overflow detected. The unwound frames are extracted from outside
         normal stack bounds.
0:000> !teb
TEB at 00384000
    ExceptionList:        013effcc
    StackBase:            013f0000
    StackLimit:           013eb000

This doesn't fix the liveliness analysis but does fix the allocations, by
emitting a function call to `__chkstk_ms` when doing allocations of larger
than a page, this will make sure the stack is probed every page so the kernel
maps in the next page.

`__chkstk_ms` is provided by `libGCC`, which is under the
`GNU runtime exclusion license`, so it's safe to link against it, even for
proprietary code. (Technically we already do since we link compiled C code in.)

For allocations smaller than a page we drop the stack and probe the new address.
This avoids the function call and still makes sure we hit the guard if needed.

PS: In case anyone is Wondering why we didn't notice this before, it's because we
only test x86_64 and on Windows 10.  On x86_64 the page size is 8KB and also the
kernel is a bit more lenient on Windows 10 in that it seems to catch the segfault
and resize the stack if it was unmapped:

0:000> t
eax=03b6b9c9 ebx=00dc90f0 ecx=03cac48c edx=03cac43d esi=03b6b9c9 edi=03abef40
eip=00503d2d esp=013e96fc ebp=03cf8f70 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
00503d2d 8b461b          mov     eax,dword ptr [esi+1Bh] ds:002b:03b6b9e4=03cac431
0:000> !teb
TEB at 00384000
    ExceptionList:        013effcc
    StackBase:            013f0000
    StackLimit:           013e9000

Likely Windows 10 has a guard page larger than previous versions.

This fixes the stack allocations, and as soon as I get the time I will look at
the liveliness analysis. I find it highly unlikely that simple Cabal function
requires ~2200 spill slots.

Test Plan: ./validate

Reviewers: simonmar, bgamari

Reviewed By: bgamari

Subscribers: AndreasK, rwbarton, thomie, carter

GHC Trac Issues: #15154

Differential Revision:

16 months agotestsuite: force plugin tests sequentially on Windows.
Tamar Christina [Wed, 18 Jul 2018 20:05:41 +0000 (21:05 +0100)] 
testsuite: force plugin tests sequentially on Windows.

Package registration does not seem to be thread-safe on
Windows.  Placing the system under heavily load seems to
trigger registration failures even though they are all
different package-dbs.   This makes the plugin tests
a bit flaky.

I think this is because on Windows we use pessimistic locks
while on Linux we use atomic file replacement.

On Windows ReplaceFile is atomic, just the metadata write
may not be.  Since the metadata is not of importance
we should either switch over to ReplaceFile or
fix the locking code to not error out but wait.

For now however I have to force these 25 tests to run
serially in order to guarantee their correctness.

Test Plan: ./validate

Reviewers: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15313, #13194

Differential Revision:

16 months agoFix some typos in docs
Sasa Bogicevic [Tue, 17 Jul 2018 19:34:23 +0000 (21:34 +0200)] 
Fix some typos in docs

Reviewers: bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15410

Differential Revision:

16 months agoCorrect spelling errors
Sasa Bogicevic [Tue, 17 Jul 2018 19:34:04 +0000 (21:34 +0200)] 
Correct spelling errors

Reviewers: bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15408

Differential Revision:

16 months agoFix spelling errors
Sasa Bogicevic [Tue, 17 Jul 2018 19:33:47 +0000 (21:33 +0200)] 
Fix spelling errors

Reviewers: goldfire, bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15407

Differential Revision:

16 months agoFix a typo
Sasa Bogicevic [Tue, 17 Jul 2018 19:33:25 +0000 (21:33 +0200)] 
Fix a typo

Reviewers: goldfire, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15406

Differential Revision:

16 months agoaclocal.m4: narrow down 'riscv*' to 'riscv-*' and 'riscv32*'
Sergei Trofimovich [Tue, 17 Jul 2018 19:01:44 +0000 (20:01 +0100)] 
aclocal.m4: narrow down 'riscv*' to 'riscv-*' and 'riscv32*'

Two minor changes:
- 32-bit CPU macro is called riscv32_HOST_ARCH (was riscv_HOST_ARCH)
- shrink understood tuples from riscv* to riscv-* and riscv32*-* as
  a tiny safeguard against riscv128*- in future.

Suggested-by: James Clarke <>
Signed-off-by: Sergei Trofimovich <>
16 months agoFix a typo in related trac ticket number
Sasa Bogicevic [Tue, 17 Jul 2018 09:07:53 +0000 (11:07 +0200)] 
Fix a typo in related trac ticket number

Reviewers: goldfire, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, goldfire, rwbarton, thomie, carter

GHC Trac Issues: #15405

Differential Revision:

16 months agosplit-obj: disable split-objects on Windows.
Tamar Christina [Tue, 17 Jul 2018 00:04:04 +0000 (20:04 -0400)] 
split-obj: disable split-objects on Windows.

A change has caused GHC to generate excessive specializations.
This is making GHC generate 1800 splits for a simple GHC.Prim module,
which means 1800 fork/exec calls.

Due to this compilation times on Windows with split-objs on take over
24 hours to complete depending on your disk speed.  Also the end
compiling medium to large project is also much slower.

So I think we need to just disable split-objects. As there's nothing
can be done about this.

Test Plan: ./validate

Reviewers: bgamari

Subscribers: tdammers, rwbarton, thomie, erikd, carter

GHC Trac Issues: #15051

Differential Revision:

16 months agoSupport the GHCi debugger with -fexternal-interpreter
Simon Marlow [Mon, 16 Jul 2018 23:58:31 +0000 (19:58 -0400)] 
Support the GHCi debugger with -fexternal-interpreter

* All the tests in tests/ghci.debugger now pass with
  -fexternal-interpreter. These tests are now run with the ghci-ext way
  in addition to the normal way so we won't break it in the future.

* I removed all the unsafeCoerce# calls from RtClosureInspect. Yay!

The main changes are:

* New messages: GetClosure and Seq.  GetClosure is a remote interface to
  GHC.Exts.Heap.getClosureData, which required Binary instances for
  various datatypes. Fortunately this wasn't too painful thanks to

* No cheating by unsafeCoercing values when printing them. Now we have
  to turn the Closure representation back into the native representation
  when printing Int, Float, Double, Integer and Char. Of these, Integer
  was the most painful - we now have a dependency on integer-gmp due to
  needing access to the representation.

* Fixed a bug in rts/Heap.c - it was bogusly returning stack content as
  pointers for an AP_STACK closure.

Test Plan:
* `cd testsuite/tests/ghci.debugger && make`
* validate

Reviewers: bgamari, patrickdoc, nomeata, angerman, hvr, erikd, goldfire

Subscribers: alpmestan, snowleopard, rwbarton, thomie, carter

GHC Trac Issues: #13184

Differential Revision:

16 months agoFixed "Memory Model" example.
Francesco Ariis [Mon, 16 Jul 2018 23:56:03 +0000 (19:56 -0400)] 
Fixed "Memory Model" example.

removed whitespace and added relevant imports to the
"Memory Model" example (haddock documentation).

Reviewers: hvr, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, rwbarton, thomie, carter

Differential Revision:

16 months agoFix hash in haddock of ghc-prim.
Masahiro Sakai [Sat, 14 Jul 2018 14:52:51 +0000 (23:52 +0900)] 
Fix hash in haddock of ghc-prim.

Some hash signs in documents in primops.txt.pp were not escaped
properly. Those raw hash signs were kept in haddock and texts
between those hash signs were interpreted as anchors by haddock.

16 months agoFix example in `asum` docs
Simon Jakobi [Mon, 2 Jul 2018 12:52:47 +0000 (14:52 +0200)] 
Fix example in `asum` docs

16 months agoDo not imply NoStarIsType by TypeOperators/TypeInType
Vladislav Zavialov [Mon, 16 Jul 2018 22:46:52 +0000 (18:46 -0400)] 
Do not imply NoStarIsType by TypeOperators/TypeInType

Implementation of the "Embrace TypeInType" proposal was done according
to the spec, which specified that TypeOperators must imply NoStarIsType.
This implication was meant to prevent breakage and to be removed in 2
releases.  However, compiling head.hackage has shown that this
implication only magnified the breakage, so there is no reason to have
it in the first place.

To remain in compliance with the three-release policy, we add a
workaround to define the (*) type operator even when -XStarIsType is on.

Test Plan: ./validate

Reviewers: bgamari, RyanGlScott, goldfire, phadej, hvr

Reviewed By: bgamari, RyanGlScott

Subscribers: harpocrates, rwbarton, thomie, carter

Differential Revision:

16 months agoModernize S_TPush in the core spec
Ryan Scott [Mon, 16 Jul 2018 22:10:01 +0000 (18:10 -0400)] 
Modernize S_TPush in the core spec

The specification for the `S_TPush` rule in the core spec's
operational semantics is woefully out-of-date. Let's bring it in line
with the presentation in //System FC with Explicit Kind Equality//.

Test Plan: Read it

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

Differential Revision:

16 months agoaclocal.m4: allow riscv and riscv64 CPU
Sergei Trofimovich [Mon, 16 Jul 2018 21:28:21 +0000 (22:28 +0100)] 
aclocal.m4: allow riscv and riscv64 CPU

Tested on riscv64-unknown-linux-gnu tuple.

Signed-off-by: Sergei Trofimovich <>
16 months agodriver: skip -Bsymbolic on unregisterised targets (Trac #15338)
Sergei Trofimovich [Mon, 16 Jul 2018 20:38:30 +0000 (21:38 +0100)] 
driver: skip -Bsymbolic on unregisterised targets (Trac #15338)

Trac #15338 is yet another example where -Bsymbolic breaks
semantics of a C program: global variable duplication happens
and unsafePerformIO creates two stdout copies.

When -Bsymbolic is not used both C compiler and linker agree
on how global variables are handled. In case of sh4 it consists
on a few assertions:

1. global variable is exported from shared library
2. code is referred to this variable via GOT-like mechanism to allow
3. global variable is present .bss section on an executable
   (as an R_*_COPY relocation: symbol contents is copied at executable
   startup time)
4. and symbol in executable interposes symbol in shared library.

This way both code in shared library and code in executable refer
to a copy of global variable in .bss section of an executable.

Unfortunately -Bsymbolic option breaks assumption [2.] and generates
direct references to the symbol. This causes mismatch between
values seen from executable and values seen from shared library code.

This change disables '-Bsymbolic' for unregisterised targets.

Signed-off-by: Sergei Trofimovich <>
Test Plan: test 'ghc-pkg --version | cat' to emit data

Reviewers: simonmar, bgamari, jrtc27

Reviewed By: jrtc27

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15338

Differential Revision:

16 months ago#15387 Fix setting testsuite verbose to zero
Antti Siponen [Sun, 15 Jul 2018 19:47:42 +0000 (21:47 +0200)] 
#15387 Fix setting testsuite verbose to zero

16 months agoFix space leaks
Simon Marlow [Mon, 18 Jun 2018 16:18:10 +0000 (17:18 +0100)] 
Fix space leaks

All these were detected by -fghci-leak-check when GHC was
compiled *without* optimisation (e.g. using the "quick" build flavour).

Unfortunately I don't know of a good way to keep this working.  I'd like
to just disable the -fghci-leak-check flag when the compiler is built
without optimisation, but it doesn't look like we have an easy way to do
that. And even if we could, it would be fragile anyway,

Test Plan: `cd testsuite/tests/ghci; make`

Reviewers: bgamari, hvr, erikd, tdammers

Subscribers: tdammers, rwbarton, thomie, carter

GHC Trac Issues: #15246

Differential Revision:

16 months agoFix parse errors in core-spec.pdf
Ryan Scott [Mon, 16 Jul 2018 13:51:18 +0000 (09:51 -0400)] 
Fix parse errors in core-spec.pdf

`core-spec.pdf` was emitting parse errors due to not specifying
role arguments in some uses of `nth`. This patch adds those
role arguments. (Credit goes to Richard Eisenberg for actually
figuring out what said arguments should be.)

Test Plan: Read it

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15373

Differential Revision:

16 months agoTTG typo: XFieldOcc should be XCFieldOcc
Alan Zimmerman [Sun, 15 Jul 2018 17:35:51 +0000 (19:35 +0200)] 
TTG typo: XFieldOcc should be XCFieldOcc

In the following

  data FieldOcc pass = FieldOcc { extFieldOcc     :: XFieldOcc pass
                                , rdrNameFieldOcc :: Located RdrName
                                   -- ^ See Note [Located RdrNames] in HsExpr

    | XFieldOcc
        (XXFieldOcc pass)

we are using XFieldOcc for both the extFieldOcc type and the extra constructor.

The first one should be XCFieldOcc

Updates haddock submodule
closes #15386

16 months agoReplace atomicModifyMutVar#
David Feuer [Sun, 15 Jul 2018 14:15:15 +0000 (10:15 -0400)] 
Replace atomicModifyMutVar#

Reviewers: simonmar, hvr, bgamari, erikd, fryguybob, rrnewton

Reviewed By: simonmar

Subscribers: fryguybob, rwbarton, thomie, carter

GHC Trac Issues: #15364

Differential Revision:

16 months agoReclassify some performance tests
Richard Eisenberg [Sat, 14 Jul 2018 19:43:01 +0000 (15:43 -0400)] 
Reclassify some performance tests

There were some performance tests not classified by
compiler_num_stats_field, causing erroneous failures when
testing a DEBUG compiler. This fixes that oversight,
addressing #15374.

16 months agoDisable -fghci-leak-check in DEBUG mode
Richard Eisenberg [Sat, 14 Jul 2018 19:27:48 +0000 (15:27 -0400)] 
Disable -fghci-leak-check in DEBUG mode

The DEBUG compiler's GHCi still leaks. This commit suppresses
testsuite failures due to this leak. See #15372.

16 months agoDon't mkNakedCastTy on something unsaturated
Richard Eisenberg [Thu, 12 Jul 2018 22:45:09 +0000 (18:45 -0400)] 
Don't mkNakedCastTy on something unsaturated

A recent commit added extra calls to mkNakedCastTy to satisfy
Note [The tcType invariant]. However, some of these casts were
being applied to unsaturated type family applications, which
caused ASSERTion failures in TcFlatten later on. This patch
is more judicious in using mkNakedCastTy to avoid this problem.

16 months agoMove check for dcUserTyVarBinders invariant
Richard Eisenberg [Thu, 12 Jul 2018 21:48:39 +0000 (17:48 -0400)] 
Move check for dcUserTyVarBinders invariant

Previously, this check was done in mkDataCon. But this
sometimes caused assertion failures if an invalid data
con was made. I've moved the check to checkValidDataCon,
where we can be sure the datacon is otherwise valid first.

16 months agoMake some tests robust against DEBUG compiler
Richard Eisenberg [Thu, 12 Jul 2018 20:21:54 +0000 (16:21 -0400)] 
Make some tests robust against DEBUG compiler

Several tests were failing in DEBUG mode, but fixing this
was easy: just pass $(TEST_HC_OPTS) in the relevant

16 months agoRemove ASSERTion about increasing TcLevels
Richard Eisenberg [Thu, 12 Jul 2018 20:10:34 +0000 (16:10 -0400)] 
Remove ASSERTion about increasing TcLevels

This removes an ASSERTion that TcLevels should increase by
exactly one in every implication. While this is a sensible
goal, it's not true today, and we should not be crippling
DEBUG for everyone while debugging this.

The ASSERT was added in 261dd83cacec71edd551e9c581d05285c9ea3226

16 months agoOptimise wakeups for STM
Simon Marlow [Sun, 15 Jul 2018 00:02:03 +0000 (20:02 -0400)] 
Optimise wakeups for STM

Avoids repeated wakeup messages being sent when a TVar is written to
multiple times. See comments for details.

Test Plan:
* Test from #15136 (will be added to stm shortly)
* existing stm tests

Reviewers: bgamari, osa1, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15136

Differential Revision:

16 months agoRemove random submodule
Ben Gamari [Sat, 14 Jul 2018 15:47:37 +0000 (11:47 -0400)] 
Remove random submodule

I believe this was originally introduced to help test DPH, which is now

16 months agoBump unix submodule
Ben Gamari [Sat, 14 Jul 2018 15:43:31 +0000 (11:43 -0400)] 
Bump unix submodule

16 months agoBump directory submodule to v1.3.3.0
Ben Gamari [Sat, 14 Jul 2018 15:36:00 +0000 (11:36 -0400)] 
Bump directory submodule to v1.3.3.0

16 months agoBump mtl submodule to v2.2.2
Ben Gamari [Sat, 14 Jul 2018 15:33:13 +0000 (11:33 -0400)] 
Bump mtl submodule to v2.2.2