2 years agobuild system: Include CONF_LD_LINKER_OPTS in ALL_LD_OPTS
Ben Gamari [Fri, 4 Nov 2016 19:03:44 +0000 (15:03 -0400)] 
build system: Include CONF_LD_LINKER_OPTS in ALL_LD_OPTS

This ensures that artifacts built with build-prog see these options.
Also spruce up comments.

Test Plan: Carefully read it.

Reviewers: austin, hvr, erikd

Reviewed By: erikd

Subscribers: thomie, erikd

Differential Revision:

(cherry picked from commit e2a9b529a8b06e2dace8c2b4c58710cf5e57ef03)

2 years agoghc-cabal: Use correct name of linker flags env variable
Ben Gamari [Fri, 4 Nov 2016 19:03:33 +0000 (15:03 -0400)] 
ghc-cabal: Use correct name of linker flags env variable

Currently passing the `CONF_LD_LINKER_OPTS_STAGE0` environment
variable to `configure` is broken due to this naming inconsistency.

Test Plan: Try passing `CONF_LD_LINKER_OPTS_STAGE0` to `configure`.
Look at resulting stage0 ghc invocation.

Reviewers: austin

Subscribers: thomie

Differential Revision:

(cherry picked from commit 97505ad7b23f5e43e1e1a69c159c2c7054f600e7)

2 years agoAlign GHCi's library search order more closely with LDs
Tamar Christina [Mon, 31 Oct 2016 21:03:14 +0000 (21:03 +0000)] 
Align GHCi's library search order more closely with LDs

Given a static library and an import library in the same folder. e.g.


running `ghci -lfoo` we should prefer the import library `libfoo.dll.a`
over `libfoo.a` because we prefer having to just load the DLL.
And not having to do any linking.

This also more closely emulated the behaviour of LD, which has a search order of

cygxxx.dll (*)

Test Plan: ./validate

Reviewers: RyanGlScott, austin, hvr, bgamari, erikd, simonmar

Reviewed By: RyanGlScott

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12771

(cherry picked from commit 795be0ea60fc81aefdaf6ecb1dc9b03c4a5c9f86)

2 years agoDescribe symptoms of (and the cure for) #12768 in 8.0.2 release notes
Ryan Scott [Sun, 6 Nov 2016 14:40:48 +0000 (09:40 -0500)] 
Describe symptoms of (and the cure for) #12768 in 8.0.2 release notes

GHC 8.0.2 introduced a bugfix involving GeneralizedNewtypeDeriving in
96d451450923a80b043b5314c5eaaa9d0eab7c56. This made typechecking of
GND-produced code a bit stricter, and an unfortunate side effect of this was
that there were a couple of corner-case programs that stopped compiling
when transitioning from GHC 8.0.1 to 8.0.2.

Since the number of affected programs seems quite small, and since the fix
is so straightforward, we opt to simply note this discrepancy in the 8.0.2
release notes.

Resolves #12768.

(cherry picked from commit ead83db8a7db772a9f248af9767a4283218a5c9f)

2 years agoFundeps work even for unary type classes
Simon Peyton Jones [Wed, 26 Oct 2016 09:54:16 +0000 (10:54 +0100)] 
Fundeps work even for unary type classes

The functional-dependency improvement functions,
had a side-condition that said the type class has to have at
least two arguments.  But not so, as Trac #12763 shows:

   class C a | -> a where ...

is perfectly legal, albeit a bit of a corner case.

(cherry picked from commit 801c26372742fc79bd3756bdcb710031c716c402)

2 years agoUpdate 8.0.2 release notes for #12784
Ryan Scott [Mon, 7 Nov 2016 13:56:22 +0000 (08:56 -0500)] 
Update 8.0.2 release notes for #12784

The fix for #12220 exposed some ill-typed programs which passed the typechecker
in GHC 8.0.1 but now fail to typecheck in GHC 8.0.2. It's a bit difficult to
characterize what exactly triggers this bug, but we at least have a minimal
example and a simple fix to illustrate the problem and solution, so let's
add that the the 8.0.2 release notes to advertise this change.

Resolves #12784.

Reviewers: rwbarton, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12784

(cherry picked from commit 2e8463b232054b788b73e6551947a9434aa76009)

2 years agoFix Trac #12797: approximateWC
Simon Peyton Jones [Wed, 2 Nov 2016 11:53:21 +0000 (11:53 +0000)] 
Fix Trac #12797: approximateWC

This patch makes approximateWC a bit more gung-ho when called
from the defaulting code.  See Note [ApproximateWC], item (1).

(cherry picked from commit 13508bad4810d4fa8581afbcb4f41c97fe4c92e2)

2 years agoAdd test for #12732
Ryan Scott [Fri, 28 Oct 2016 21:00:29 +0000 (17:00 -0400)] 
Add test for #12732

(cherry picked from commit 60343a419ab44d387cfd11f0dd2b522fd922e63a)

2 years agoFix the in-scope set for extendTvSubstWithClone
Simon Peyton Jones [Sat, 11 Jun 2016 23:04:30 +0000 (00:04 +0100)] 
Fix the in-scope set for extendTvSubstWithClone

We'd forgotten the variables free in the kind.

Ditto extendCvSubstWithClone

(cherry picked from commit 15fc52819c440f9e9b91ce92fcfda3c264cbe1c1)

2 years agoRefine ASSERT in buildPatSyn for the nullary case.
Matthew Pickering [Wed, 26 Oct 2016 15:19:48 +0000 (11:19 -0400)] 
Refine ASSERT in buildPatSyn for the nullary case.

For a nullary pattern synonym we add an extra void argument to the
matcher in order to preserve laziness. The check in buildPatSyn
wasn't aware of this special case which was causing the assertion to

Reviewers: austin, simonpj, bgamari

Reviewed By: simonpj, bgamari

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #12746

(cherry picked from commit 23143f60680f78f80762754fe060a3e8c6dc9a01)

2 years agoOmit unnecessary linker flags
Simon Marlow [Thu, 27 Oct 2016 11:52:00 +0000 (12:52 +0100)] 
Omit unnecessary linker flags

This omits -L and -l flags from the linker command line that shouldn't
be necessary because GHC will already add them via the -package-id
flags we pass.

This also reverts part of 90538d86af579595987826cd893828d6f379f35a
that rearranges the linker command line and causes some knock-on
problems (see D2618).

Test Plan: validate (need to validate on Windows too)

Reviewers: Phyx, bgamari, niteria, austin, erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12738

(cherry picked from commit a977c96537bb7077c6445f02db98636b150e6e14)

2 years agoFix failure in setnumcapabilities001 (#12728)
Simon Marlow [Fri, 21 Oct 2016 16:02:57 +0000 (12:02 -0400)] 
Fix failure in setnumcapabilities001 (#12728)

The value of enabled_capabilities can change across a call to
requestSync(), and we were erroneously using an old value, causing
things to go wrong later.  It manifested as an assertion failure, I'm
not sure whether there are worse consequences or not, but we should
get this fix into 8.0.2 anyway.

The failure didn't happen for me because it only shows up on machines
with fewer than 4 processors, due to the new logic to enable -qn
automatically.  I've bumped the test parameter 8 to make it more
likely to exercise that code.

Test Plan: Ran setnumcapabilities001 many times

Reviewers: niteria, austin, erikd, rwbarton, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12728

(cherry picked from commit acc98510c5e32474b0bba9fba54e78df2b11078c)

2 years agoBump filepath submodule
Ben Gamari [Tue, 1 Nov 2016 19:26:04 +0000 (15:26 -0400)] 
Bump filepath submodule

2 years agoAdd and use a new dynamic-library-dirs field in the ghc-pkg info
Duncan Coutts [Sat, 22 Oct 2016 17:52:40 +0000 (13:52 -0400)] 
Add and use a new dynamic-library-dirs field in the ghc-pkg info

Build systems / package managers want to be able to control the file
layout of installed libraries. In general they may want/need to be able
to put the static libraries and dynamic libraries in different places.
The ghc-pkg library regisrtation needs to be able to handle this.

This is already possible in principle by listing both a static lib dir
and a dynamic lib dir in the library-dirs field (indeed some previous
versions of Cabal did this for shared libs on ELF platforms).

The downside of listing both dirs is twofold. There is a lack of
precision, if we're not careful with naming then we could end up
picking up the wrong library. The more immediate problem however is
that if we list both directories then both directories get included
into the ELF and Mach-O shared object runtime search paths. On ELF this
merely slows down loading of shared libs (affecting prog startup time).
On the latest OSX versions this provokes a much more serious problem:
that there is a rather low limit on the total size of the section
containing the runtime search path (and lib names and related) and thus
listing any unnecessary directories wastes the limited space.

So the solution in this patch is fairly straightforward: split the
static and dynamic library search paths in the ghc-pkg db and its use
within ghc. This is a traditional solution: pkg-config has the same
static / dynamic split (though it describes in in terms of private and
public, but it translates into different behaviour for static and
dynamic linking).

Indeed it would make perfect sense to also have a static/dynamic split
for the list of the libraries to use i.e. to have dynamic variants of
the hs-libraries and extra-libraries fields. These are not immediately
required so this patch does not add it, but it is a reasonable
direction to follow.

To handle compatibility, if the new dynamic-library-dirs field is not
specified then its value is taken from the library-dirs field.

Contains Cabal submodule update.

Test Plan:
Run ./validate

Get christiaanb and carter to test it on OSX Sierra, in combination
with Cabal/cabal-install changes to the default file layout for

Reviewers: carter, bgamari, hvr, austin, christiaanb

Subscribers: thomie, Phyx, ezyang

Differential Revision:

GHC Trac Issues: #12479

2 years agoTest for newtype with unboxed argument
Simon Peyton Jones [Wed, 19 Oct 2016 11:22:11 +0000 (12:22 +0100)] 
Test for newtype with unboxed argument

Newtypes cannot (currently) have an unboxed argument type.
But Trac #12729 showed that this was only being checked for
newtypes in H98 syntax; in GADT snytax they were let through.

This patch moves the test to checkValidDataCon, where it properly

(cherry picked from commit 1f09c16c38a2112322d8eab95cd1269daaf5a818)

2 years agoAdd test for #12411
Ryan Scott [Wed, 12 Oct 2016 18:57:32 +0000 (14:57 -0400)] 
Add test for #12411

The fix for #12584 also fixed the problem in #12411. Let's add a test to ensure
that it stays fixed.

(cherry picked from commit 184d7cb8278b9c6cb3f9786a96f081d08e4640db)

2 years agoFix Show derivation in the presence of RebindableSyntax/OverloadedStrings
Ryan Scott [Sat, 15 Oct 2016 15:11:20 +0000 (11:11 -0400)] 
Fix Show derivation in the presence of RebindableSyntax/OverloadedStrings

To fix this issue, we simply disable `RebindableSyntax` whenever we rename
the code generated from a deriving clause.

Fixes #12688.

Test Plan: make test TEST=T12688

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12688

(cherry picked from commit b501709ed79ba03e72518ef9dd101ce2d03db2de)

2 years agoFix shadowing in mkWwBodies
Simon Peyton Jones [Fri, 14 Oct 2016 11:05:46 +0000 (12:05 +0100)] 
Fix shadowing in mkWwBodies

This bug, exposed by Trac #12562 was very obscure, and has been
lurking for a long time.  What happened was that, in the
worker/wrapper split

  a tyvar binder for a worker function
  accidentally shadowed an in-scope term variable
  that was mentioned in the body of the function

It's jolly hard to provoke, so I have not even attempted to make
a test case.  There's a Note [Freshen WW arguments] to explain.

Interestingly, fixing the bug (which meant fresher type variables)
revealed a second lurking bug: I'd failed to apply the substitution to
the coercion in the second last case of mkWWArgs, which introduces a

(cherry picked from commit 692c8df03969ee6a0de5158f05907b16689945d0)

2 years agoAdd test for #12589
Ryan Scott [Wed, 12 Oct 2016 23:16:46 +0000 (19:16 -0400)] 
Add test for #12589

Commit af21e38855f7d517774542b360178b05045ecb08 fixed #12598. Let's add a test
to make sure it stays fixed.

(cherry picked from commit 042c5930bff239337d21836db5b8d0ebf0180ffc)

2 years agoDon't omit any evidence bindings
Simon Peyton Jones [Fri, 24 Jun 2016 14:49:05 +0000 (15:49 +0100)] 
Don't omit any evidence bindings

This fixes Trac #12156, where we were omitting to make an
evidence binding (because cec_suppress was on), but yet the
program was compiled and run.

The fix is easy, and involves deleting code :-).

(cherry picked from commit af21e38855f7d517774542b360178b05045ecb08)

2 years agoFix wrapping order in matchExpectedConTy
Simon Peyton Jones [Fri, 14 Oct 2016 16:13:43 +0000 (17:13 +0100)] 
Fix wrapping order in matchExpectedConTy

The wrappers in matchExpectedConTy were being composed back
to front, resulting in a Core Lint error.  Yikes!  This has
been here a long time.

Fixes Trac #12676.

(cherry picked from commit f7278a9068dab28f50351c18177cc352d6570285)

2 years agoCorrect order of existentials in pattern synonyms
Simon Peyton Jones [Fri, 14 Oct 2016 14:54:14 +0000 (15:54 +0100)] 
Correct order of existentials in pattern synonyms

Trac #12698 exposed a nasty bug in the typechecking for
pattern synonmys: the existential type variables weren't
being put in properly-scoped order.

For some reason TcPatSyn.tcCollectEx was colleting them as a
set, not as a list!  Easily fixed.

(cherry picked from commit a693d1cb0ee9499af3145d73b1aebe5b6df0da98)

2 years agoCheck for empty entity string in "prim" foreign imports
Sylvain HENRY [Fri, 14 Oct 2016 14:43:30 +0000 (10:43 -0400)] 
Check for empty entity string in "prim" foreign imports

Foreign imports with "prim" convention require a valid symbol identifier
(see linked issue). We check this.

Fix line too long

Test Plan: Validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12355

(cherry picked from commit 6c7393261e723af3651f47bcee9af8db6bb6cf17)

2 years agotestsuite: Add testcase for #12355
Ben Gamari [Fri, 1 Jul 2016 12:29:54 +0000 (14:29 +0200)] 
testsuite: Add testcase for #12355

Test Plan: Validate

Reviewers: austin, osa1

Reviewed By: osa1

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12355

(cherry picked from commit afec447cde1f97438bbc5bf7a31000e948c721eb)

2 years agoDisable T-signals-child test on single-threaded runtime
Michael Snoyman [Fri, 14 Oct 2016 14:53:40 +0000 (10:53 -0400)] 
Disable T-signals-child test on single-threaded runtime

As identified by Joachim, this test broke the Travis build. It appears
that this is due to the usage of the single-threaded runtime there. I've
confirmed that this fix causes the Travis build to pass:

Test Plan: Confirm tests now pass

Reviewers: austin, nomeata, bgamari

Reviewed By: nomeata, bgamari

Subscribers: thomie

Differential Revision:

(cherry picked from commit 0d9524a813a381dd13d461e731fc4ec8c0404aef)

2 years agoFurther improve error handling in TcRn monad
Simon Peyton Jones [Thu, 13 Oct 2016 11:24:53 +0000 (12:24 +0100)] 
Further improve error handling in TcRn monad

This patch builds on the one for Trac #12124, by dealing properly
with out-of-scope "hole" errors.

This fixes Trac #12529. The hard error coming from visible type application
is still there, but the out-of-scope error is no longer suppressed.

(Arguably the VTA message should be suppressed somehow, but that's a
battle for another day.)

(cherry picked from commit 2fdf21bf26386ac5558ed5b95105bcf78e31f093)

2 years agoAdd test for #12456
Ryan Scott [Thu, 13 Oct 2016 01:06:48 +0000 (21:06 -0400)] 
Add test for #12456

Commit f352e5cd7bb629fe0ca3b913bfbe7bee43d62f3a fixed #12456. Let's add a test
to make sure it stays fixed.

(cherry picked from commit fef1df4bb4f4b74f4a0d0d22c913d29189e140e4)

2 years agotestsuite: Bump T1969 expected bytes allocated
Ben Gamari [Wed, 12 Oct 2016 18:03:10 +0000 (14:03 -0400)] 
testsuite: Bump T1969 expected bytes allocated

2 years agoFix an assertion that could randomly fail
Simon Marlow [Thu, 4 Aug 2016 14:57:37 +0000 (15:57 +0100)] 
Fix an assertion that could randomly fail

returning_tasks queue, but that requires cap->lock to access safely.
This assertion would randomly fail if stressed enough.

Instead I've removed it from the catch-all
ASSERT_PARTIAL_CAPABILITIY_INVARIANTS and made it a separate assertion
only called under cap->lock.

Test Plan:
cd testsuite/tests/concurrent/should_run
make TEST=setnumcapabilities001 WAY=threaded1 EXTRA_HC_OPTS=-with-rtsopts=-DS CLEANUP=0
while true; do ./ 4 9 2000 || break; done

Reviewers: niteria, bgamari, ezyang, austin, erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10860

(cherry picked from commit ce13a9a9f57d61170837532948fed8bc1924a7ab)

2 years agovalidate: Add --build-only
Ben Gamari [Sun, 2 Oct 2016 00:11:03 +0000 (20:11 -0400)] 
validate: Add --build-only

This will allow us to split up Harbormaster output for the build and
test stages of validation.

Test Plan: `./validate --build-only && ./validate --testsuite-only`

Reviewers: thomie, hvr, austin

Differential Revision:

(cherry picked from commit 4d2b15d5895ea10a64194bffe8c321e447e39683)

2 years agoFix impredicativity (again)
Simon Peyton Jones [Sun, 25 Sep 2016 14:50:18 +0000 (15:50 +0100)] 
Fix impredicativity (again)

This patch fixes Trac #12616.

Dignosis.  In TcUnify.tc_sub_type_ds we were going to some trouble to
support co- and contra-variance even for impredicative types.  With
-XImpredicativeTYpes, this allowed a unification variable to be
unified with a polytype (probably wrongly) and that caused later
trouble in the constraint solver, where -XImpredicativeTypes was /not/
on.  In effect, -XImpredicativeTypes can't be switched on locally.

Why did we want ImpredicativeTypes locally?  Because the program
generated by GND for a higher-rank method involved impredicative
instantation of 'coerce':
      op = coerce op   -- where op has a higher rank type
See Note [Newtype-deriving instances] in TcGenDeriv.


1.  It is ghastly to rely on ImpredicativeTypes (a 100% flaky
    feature) to instantiate coerce polymorphically.  Happily we
    now have Visible Type Application, so I've used that instead
    which should be solid and reliable.

2.  I deleted the code in tc_sub_type_ds that allows the constraint
    solver to "look through" a unification variable to find a
    polytype.  That used to be essential in the days of ReturnTv,
    but it's utterly unreliable and should be consigned to the dustbin
    of history.  (We have ExpType now for the essential uses.)

Tests involving ImpredicativeTypes are affected, but I'm not worried
about them... it's advertised as a feature you can't rely on, and
I want to reform it outright.

(cherry picked from commit b612da667fe8fa5277fc78e972a86d4b35f98364)

2 years agoSome tiding up in TcGenDeriv
Simon Peyton Jones [Mon, 8 Feb 2016 15:29:12 +0000 (15:29 +0000)] 
Some tiding up in TcGenDeriv

..around newtype deriving instances.

See esp the new Note [Newtype-deriving instances]

No change in behaviour

(cherry picked from commit 96d451450923a80b043b5314c5eaaa9d0eab7c56)

2 years agoAdd derived shadows only for Wanted constraints
Simon Peyton Jones [Wed, 12 Oct 2016 11:02:04 +0000 (12:02 +0100)] 
Add derived shadows only for Wanted constraints

This patch implements choice (3) of comment:14 on Trac #12660.
It cures an infinite loop (caused by the creation of an infinite
type) in in compiling the 'singletons' package.

See Note [Add derived shadows only for Wanteds] in TcSMonad.

(cherry picked from commit 8fa5f5b197542b6e7e9e570991a1488204e606c9)

2 years agoRnExpr: Actually fail if patterns found in expression
Ben Gamari [Tue, 11 Oct 2016 13:26:46 +0000 (09:26 -0400)] 
RnExpr: Actually fail if patterns found in expression

This fixes #12584, where wildcard patterns were snuck into an
expression, which then crashed the typechecker in TcExpr since EWildPats
aren't supposed to appear in the AST after renaming.

The problem was that `rnTopSpliceDecl` failed to check for errors from
`rnSplice` (as done by other callers to `rnSplice`).

Thanks to Shayan for reporting this!

Reviewers: simonpj, austin

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #12584

(cherry picked from commit bce99086e9f54909f51ff5a74cb8c666083bb021)

2 years agoFix test output
Ben Gamari [Mon, 10 Oct 2016 14:58:42 +0000 (10:58 -0400)] 
Fix test output

2 years agoDon't ignore addTopDecls in module finalizers.
Facundo Domínguez [Thu, 1 Sep 2016 14:00:08 +0000 (11:00 -0300)] 
Don't ignore addTopDecls in module finalizers.

Module finalizer could call addTopDecls, however, the declarations
added in this fashion were ignored. This patch makes sure to rename,
type check and incorporate this declarations.

Because a declaration may include a splice which calls addModFinalizer,
the list of finalizers is repeteadly checked after adding declarations
until no more finalizers remain.

Test Plan: ./validate

Reviewers: bgamari, goldfire, simonpj, austin

Reviewed By: bgamari, simonpj

Subscribers: simonmar, mboes, thomie

Differential Revision:

GHC Trac Issues: #12559

(cherry picked from commit 71dd6e4429833238bcdaf96da8e2e41a62dacbf4)

2 years agoRemove reexports from ghc-boot, help bootstrap with GHC 8.
Edward Z. Yang [Sun, 2 Oct 2016 19:59:44 +0000 (12:59 -0700)] 
Remove reexports from ghc-boot, help bootstrap with GHC 8.

(cherry picked from commit 940ded858157173e75504e8cb0750f059ffd48b9)

2 years agoDo not segfault if no common root can be found
Moritz Angermann [Sun, 9 Oct 2016 22:17:46 +0000 (18:17 -0400)] 
Do not segfault if no common root can be found

When trying to profile a plugin, ghc mysteriously segfaulted.  Upon
closer examination the segfault happend due to a `->prevStack` lookup
on a NULL pointer.

A new CostCentre: Unknown is introduced that is set, if ccsapp and
ccsfn are of equal depth (e.g. 0), and do not have a common CostCentre
in their stacks.

Reviewers: bgamari, simonmar, austin, erikd

Reviewed By: simonmar

Subscribers: Phyx, thomie

Differential Revision:

(cherry picked from commit bcd34451382e0d1b52ef82cb9d762e9d68bc0887)

2 years agoFix memory leak from #12664
Bartosz Nitka [Thu, 6 Oct 2016 12:40:24 +0000 (05:40 -0700)] 
Fix memory leak from #12664

This fixes the leak with `setProgArgv`. The problem was
that `setProgArgv` would not free the objects pointed
to by `prog_argc`, `prog_argv` when the globals were
changed resulting in a leak.

The only strictly necessary change is in `rts/RtsFlags.c`, but
the code in `System.Environment` was a bit confusing and not
exception safe, so I refactored it.

Test Plan: ./validate

Reviewers: simonmar, ezyang, austin, hvr, bgamari, erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12664

(cherry picked from commit e41b9c614984b63c4660018cecde682453e083e5)

2 years agoAdd missing test from D2545
Matthew Pickering [Sat, 1 Oct 2016 21:55:26 +0000 (17:55 -0400)] 
Add missing test from D2545

This was somehow dropped from the original merge.

Differential Revision:

GHC Trac Issues: #12615

(cherry picked from commit 1851349acd9e73f1c18d68f70d5cf7b46a843cb5)

2 years agoMore tests for Trac #12522
Simon Peyton Jones [Mon, 10 Oct 2016 12:57:01 +0000 (13:57 +0100)] 
More tests for Trac #12522

These ones test the variations in coment:15 of the ticket

(cherry picked from commit a6111b8cc14a5dc019e2613f6f634dec4eb57a8a)

2 years agoOrient improvement constraints better
Simon Peyton Jones [Fri, 7 Oct 2016 22:51:44 +0000 (23:51 +0100)] 
Orient improvement constraints better

This patch fixes an infinite loop in the constraint solver,
shown up by Trac #12522.

The solution is /very/ simple: just reverse the orientation of the
derived constraints arising from improvement using type-family
injectivity.  I'm not very proud of the fix --- it seems fragile
--- but it has the very great merit of simplicity, and it works

See Note [Improvement orientation] in TcInteract, and some
discussion on the Trac ticket.

(cherry picked from commit b255ae7b555b4b63085a6de4a7a6bd742326b9c9)

2 years agoImprove error handling in TcRnMonad
Simon Peyton Jones [Wed, 5 Oct 2016 21:00:02 +0000 (22:00 +0100)] 
Improve error handling in TcRnMonad

See Note [Constraints and errors] in TcRnMonad.  This
patch fixes Trac #12124 in quite a neat way.

(cherry picked from commit 465c6c5d15f8fb54afb78408f3a79e75e74d2cd4)

2 years agoEscape lambda.
Vaibhav Sagar [Sun, 9 Oct 2016 22:21:58 +0000 (18:21 -0400)] 
Escape lambda.

Test Plan: View updated documentation?

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12672

(cherry picked from commit 1a9705c32f6841be8bc6df3c1084a50dacba2730)

2 years agorunghc: Fix import of System.Process on Windows
Ben Gamari [Sun, 2 Oct 2016 23:40:56 +0000 (19:40 -0400)] 
runghc: Fix import of System.Process on Windows

This apparently should have been an import of rawSystem instead of
runProcess. Oops.

Fixes D2538.

Test Plan: Validate on Linux and Windows.

Reviewers: austin, snowleopard

Reviewed By: snowleopard

Subscribers: thomie

Differential Revision:

(cherry picked from commit 8952cc3e8e36985b06166c23c482174b07ffa66d)

2 years agorunghc: use executeFile to run ghc process on POSIX
Michael Snoyman [Sun, 2 Oct 2016 01:24:05 +0000 (21:24 -0400)] 
runghc: use executeFile to run ghc process on POSIX

This means that, on POSIX systems, there will be only one ghc process
used for running scripts, as opposed to the current situation of a
runghc process and a ghc process. Beyond minor performance benefits of
not having an extra fork and resident process, the more important impact
of this is automatically getting proper signal handling. I noticed this
problem myself when running runghc as PID1 inside a Docker container.

I attempted to create a shim library for executeFile that would work for
both POSIX and Windows, but unfortunately I ran into issues with exit
codes being propagated correctly (see Therefore, this patch
leaves the Windows behavior unchanged. Given that signals are a POSIX
issue, this isn't too bad a trade-off. If someone has suggestions for
better Windows _exec support, please let me know.

Reviewers: erikd, austin, bgamari

Reviewed By: bgamari

Subscribers: Phyx, thomie

Differential Revision:

(cherry picked from commit 42f1d86770f963cf810aa4d31757dda8a08a52fa)

2 years agoFix expected output for T7786
Ben Gamari [Sun, 2 Oct 2016 18:52:27 +0000 (14:52 -0400)] 
Fix expected output for T7786

I believe this is a benign difference between master and ghc-8.0.

2 years agoTurn `__GLASGOW_HASKELL_LLVM__` into an integer again
Nicolas Trangez [Sat, 1 Oct 2016 21:58:11 +0000 (17:58 -0400)] 
Turn `__GLASGOW_HASKELL_LLVM__` into an integer again

In GHC < 8.0.1, the value of `__GLASGOW_HASKELL_LLVM__`, exposed
through the preprocessor when compiled with `-fllvm`, was an integer
value, encoded according to some rules specified in the user guide.

Due to an oversight, in GHC 8.0.1 the value of this define became a
tuple, exposed as e.g. `(3, 7)`. This was an unintended regression.

This patch turns the value of the `__GLASGOW_HASKELL_LLVM__` definition
into a single integer again, but changes the formatting of said number
slightly. Before, any LLVM version where the major or minor component >=
10 would cause ambiguous values for `__GLASGOW_HASKELL_LLVM__`. With
this patch, the value is in line with `__GLASGOW_HASKELL__`, adding a
padding `0` in-between major and minor component if applicable (we
assume no minors >= 100 will ever exist).

The documentation in the user guide is updated accordingly, and a
reference is made in the 8.0.2 release notes.

Test Plan: validate

Reviewers: bgamari, erikd

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12628

(cherry picked from commit b0d53a839da0149e0142da036b6ebf5a01b3216f)

2 years agoFix T12593
Ben Gamari [Sun, 2 Oct 2016 03:25:46 +0000 (23:25 -0400)] 
Fix T12593

(cherry picked from commit 779bcc90cf8a52270bcd70a82442d01d35d7c788)

2 years agoFix T12512
Ben Gamari [Sun, 2 Oct 2016 03:19:09 +0000 (23:19 -0400)] 
Fix T12512

2 years agoFix a bug in occurs checking
Simon Peyton Jones [Thu, 22 Sep 2016 21:18:22 +0000 (22:18 +0100)] 
Fix a bug in occurs checking

1. Trac #12593 exposed a long-standing bug in the occurs
   checking machinery.  When unifying two type variables
          a ~ b
   where a /= b, we were assuming that there could be
   no occurs-check error.  But there can: 'a' can occur
   in b's kind!  When the RHS was a non-tyvar we used
   occurCheckExpand, which /did/ look in kinds, but not
   when the RHS was a tyvar.

   This bug has been lurking ever since TypeInType, maybe
   longer.  And it was present both in TcUnify (the on-the-fly
   unifier), and in TcInteract.

   I ended up refactoring both so that the tyvar/tyvar
   path naturally goes through the same occurs-check as
   non-tyvar rhss.  It's simpler and more robust now.

   One good thing is that both unifiers now share
   previously they had different logic for the same goals

2. Fixing this bug exposed another!  In T11635 we end
   up unifying
   (alpha :: forall k. k->*) ~ (beta :: forall k. k->*)
   Now that the occurs check is done for tyvars too, we
   look inside beta's kind.  And then reject the program
   becuase of the forall inside there.  But in fact that
   forall is fine -- it does not count as impredicative
   polymoprhism.   See Note [Checking for foralls]
   in TcType.

3. All this fuss around occurrence checking forced me
   to look at TcUnify.checkTauTvUpdate
          and TcType.occurCheckExpand
   There's a lot of duplication there, and I managed
   to elminate quite a bit of it. For example,
   checkTauTvUpdate called a local 'defer_me'; and then
   called occurCheckExpand, which then used a very
   similar 'fast_check'.

   Things are better, but there is more to do.

(cherry picked from commit 66a8c194520aadcaa0482736f3fdd4d2f31a5586)

2 years agoKill off redundant SigTv check in occurCheckExpand
Simon Peyton Jones [Mon, 16 May 2016 21:08:08 +0000 (22:08 +0100)] 
Kill off redundant SigTv check in occurCheckExpand

This patch simply deletes code, the SigTv check in
occurCheckExpand.  As the new comment says

In the past we also rejected a SigTv matched with a non-tyvar
But it is wrong to reject that for Givens;
and SigTv is in any case handled separately by
   - TcUnify.checkTauTvUpdate (on-the-fly unifier)
   - TcInteract.canSolveByUnification (main constraint solver)

(cherry picked from commit d25cb61a1c2a135a2564143a332f8b2962f134bc)

2 years agoDisallow standalone deriving declarations involving unboxed tuples or sums
Ryan Scott [Sat, 1 Oct 2016 21:58:44 +0000 (17:58 -0400)] 
Disallow standalone deriving declarations involving unboxed tuples or sums

There was an awful leak where GHC permitted standalone `deriving`
declarations to create instances for unboxed sum or tuple types. This
fortifies the checks that GHC performs to catch this scenario and give
an appropriate error message.

Fixes #11509.

Test Plan: ./validate

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11509

(cherry picked from commit 23cf32da76fe6ed29fa141047749d390df763f94)

2 years agoPrint foralls in user format
Simon Peyton Jones [Mon, 26 Sep 2016 07:37:47 +0000 (08:37 +0100)] 
Print foralls in user format

This fixes Trac #12597: in RnNames.warnMissingSignatures,
use pprSigmaType not pprType

(cherry picked from commit 796f0f2ad7eefd1c9af5a7ef9bf56848067e85b1)

2 years agoFix layout of MultiWayIf expressions (#10807)
Ömer Sinan Ağacan [Mon, 26 Sep 2016 21:09:01 +0000 (17:09 -0400)] 
Fix layout of MultiWayIf expressions (#10807)

With this patch we stop generating virtual semicolons in MultiWayIf
guards. Fixes #10807.

Test Plan:

Reviewers: simonmar, austin, bgamari

Reviewed By: simonmar

Subscribers: mpickering, thomie

Differential Revision:

GHC Trac Issues: #10807

(cherry picked from commit c36904d66f30d4386a231ce365a056962a881767)

2 years agoFix desugaring of pattern bindings (again)
Simon Peyton Jones [Fri, 16 Sep 2016 21:33:20 +0000 (22:33 +0100)] 
Fix desugaring of pattern bindings (again)

This patch fixes Trac #12595.  The problem was with a
pattern binding like
     !x = e
For a start it's silly to match that pattern and build
a unit tuple (the General Case of mkSelectorBinds); but
that's what was happening because the bang fell through
to the general case.  But for a variable pattern building
any auxiliary bindings is stupid.  So the patch
introduces a new case in mkSelectorBinds for variable

Then it turned out that if 'e' was a plain variable, and
moreover was imported GlobalId, then matchSinglePat made
it a /bound/ variable, which should never happen.  That
ultimately caused a linker error, but the original bug
was much earlier.

(cherry picked from commit 2fbfbca2d12a8e9a09627529cf4f8284b19023ff)

2 years agoFix interaction of record pattern synonyms and record wildcards
Matthew Pickering [Sat, 1 Oct 2016 21:55:04 +0000 (17:55 -0400)] 
Fix interaction of record pattern synonyms and record wildcards

We were missing an appropiate *ConLike lookup in the case when
the pattern synonym was defined in a different module.

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #11987

(cherry picked from commit 2d6642bd1956edf8b842c07d78e83c500246998a)

2 years agoDo not warn about unused underscore-prefixed fields (fixes Trac #12609)
Adam Gundry [Sat, 1 Oct 2016 21:56:58 +0000 (17:56 -0400)] 
Do not warn about unused underscore-prefixed fields (fixes Trac #12609)

When DuplicateRecordFields is enabled, the mangling of selector names
was causing them to be reported as unused even if prefixed by an
underscore. This corrects the OccName used by the check.

Test Plan: New test overloadedrecflds/should_compile/T12609

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12609

(cherry picked from commit 48ff0843eee29313cc2da14c04dc57f6589ab040)

2 years agoDon't warn about name shadowing when renaming the patten in a PatSyn decl
Matthew Pickering [Sat, 1 Oct 2016 21:55:26 +0000 (17:55 -0400)] 
Don't warn about name shadowing when renaming the patten in a PatSyn decl

Previously the renamer assumed that *any* time we renamed a pattern, the
pattern was introducing new binders. This isn't true in pattern synonym
declarations where the pattern is used as part of a definition.

We add a special case to not warn in this situation.

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #12615

(cherry picked from commit 1851349acd9e73f1c18d68f70d5cf7b46a843cb5)

2 years agoPPC/CodeGen: fix lwa instruction generation
Peter Trommler [Sat, 1 Oct 2016 21:56:31 +0000 (17:56 -0400)] 
PPC/CodeGen: fix lwa instruction generation

Opcode lwa is a 64-bit opcode and allows a DS-form only.  This patch
generates lwa opcodes only when the offset is a multiple of 4.

Fixes #12621

Test Plan: validate

Reviewers: erikd, hvr, simonmar, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12621

(cherry picked from commit ce3370e06165690e79a8eb22e5229b515157e00f)

2 years agoCodeGen X86: fix unsafe foreign calls wrt inlining
Sylvain HENRY [Sat, 1 Oct 2016 04:25:49 +0000 (00:25 -0400)] 
CodeGen X86: fix unsafe foreign calls wrt inlining

Foreign calls (unsafe and safe) interact badly with inlining and
register passing ABIs (see #11792 and #12614):
the inlined code to compute a parameter of the call may overwrite a
register already set to pass a preceding parameter.

With this patch, we compute all parameters which are not simple
expressions before assigning them to fixed registers required by the

Test Plan:
   - Add test (test both reg and stack parameters)
   - Validate

Reviewers: osa1, bgamari, austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11792, #12614

(cherry picked from commit b61b7c2462b919de7eb4c373e2e2145c6d78d04c)

2 years agoBump Haddock submodule
Ben Gamari [Tue, 27 Sep 2016 21:33:24 +0000 (17:33 -0400)] 
Bump Haddock submodule

Fixes #12519.

2 years fix --host= handling
Sergei Trofimovich [Fri, 2 Sep 2016 07:35:25 +0000 (08:35 +0100)] fix --host= handling

The following command fails as:
    $ ./configure --prefix=/usr \
        --build=x86_64-pc-linux-gnu \
        --host=x86_64-pc-linux-gnu \
    configure: error:
    You've selected:

      BUILD:  x86_64-unknown-linux
      HOST:   x86_64-unknown-linux
      TARGET: x86_64-unknown-linux

    BUILD must equal HOST;

18f06878ed5d8cb0cf366a876f2bfea29647e5f0 changed native
configure $build/$host/$target checks to ghc-mangled ones,
but not completely.

Signed-off-by: Sergei Trofimovich <>
Reviewers: rwbarton, erikd, austin, hvr, bgamari, Phyx

Reviewed By: Phyx

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12487

(cherry picked from commit 0cc3931bd7831fa8d042f968a5a9114534a656e4)

2 years agoFix configure detection.
Tamar Christina [Sat, 13 Aug 2016 15:27:30 +0000 (16:27 +0100)] 
Fix configure detection.

GHC's configure script seems to normalize the values returned from config.guess.
So for Windows it turns x86_64-pc-mingw64 into x86_64-unknown-mingw32.
These mangled names are stored in the values $BuildPlatform, $HostPlatform
and $TargetPlatform.

However further down the file when the comparison is done between the stage0
compiler and the host the normalized versions are not used.
So when normalization actually changes the triple this check will fail.

Not sure why it's worked for all this time.. Nor if this is the right fix?
Does it still work for cross compiling correctly?

Test Plan: ./configure

Reviewers: hvr, austin, thomie, bgamari, erikd

Reviewed By: erikd

Subscribers: erikd, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12487

(cherry picked from commit 18f06878ed5d8cb0cf366a876f2bfea29647e5f0)

2 years agoTrim all spaces after 'version:'
Gabor Greif [Fri, 5 Aug 2016 07:42:09 +0000 (09:42 +0200)] 
Trim all spaces after 'version:'

... that we grep out of libraries/Cabal/Cabal/Cabal.cabal

This is necessary because the file got reformatted
in the 'master' branch.

(cherry picked from commit 1101045cbdbd6f240fa7e2438d9488822cd604fb)

2 years agoFix scoping of type variables in instances
Simon Peyton Jones [Fri, 26 Aug 2016 16:32:42 +0000 (17:32 +0100)] 
Fix scoping of type variables in instances

This fixes Trac #12531:

   class Foo x where
     foo :: forall a . x a -> x a
     default foo :: forall b . x b -> x b
     foo x = go
       where go :: x b
             go = undefined

We want 'b' to scope over the code for 'foo', but we were
using 'a' instead.

(cherry picked from commit 0050aff22ba04baca732bf5124002417ab667f8a)

2 years agorts: Fix reference to NUMA-specific field
Ben Gamari [Sun, 18 Sep 2016 17:11:52 +0000 (13:11 -0400)] 
rts: Fix reference to NUMA-specific field

This snuck into c51caafae7669d4246f4efd3d1a6858020780e02.

2 years agoMore testsuite wibbles
Ben Gamari [Sun, 18 Sep 2016 16:57:18 +0000 (12:57 -0400)] 
More testsuite wibbles

The old testsuite driver still requires a relative path to Defer02.

2 years agoTest wibbles for commit 03541cba
Simon Peyton Jones [Mon, 12 Sep 2016 21:21:15 +0000 (22:21 +0100)] 
Test wibbles for commit 03541cba

I must have failed to validate properly, sorry.
These testsuite wibbles belong with

  commit 03541cbae50f0d1cdf99120ab88698f29a278159
  Author: Simon Peyton Jones <>
  Date:   Fri Sep 9 17:42:42 2016 +0100

      Be less picky about reporing inaccessible code

(cherry picked from commit 5eeabe250a1de456f70af07bd3f507a32cb8e10e)

2 years agoBe less picky about reporing inaccessible code
Simon Peyton Jones [Fri, 9 Sep 2016 16:42:42 +0000 (17:42 +0100)] 
Be less picky about reporing inaccessible code

Triggered by the discussion on Trac #12466, this patch
makes GHC less aggressive about reporting an error when
there are insoluble Givens.

Being so agressive was making some libraries fail to
compile, and is arguably wrong in at least some cases.
See the discussion on the ticket.

Several test now pass when they failed before; see
the files-modified list for this patch.

(cherry picked from commit 03541cbae50f0d1cdf99120ab88698f29a278159)

2 years agoGet in-scope set right in top_instantiate
Simon Peyton Jones [Sat, 11 Jun 2016 22:55:10 +0000 (23:55 +0100)] 
Get in-scope set right in top_instantiate

...thereby being able to replace substThetaUnchecked
with substTheta

(cherry picked from commit 7afb7adf45216701e4f645676ecc0668f64b424d)

3 years agoFix T12504
Ben Gamari [Thu, 15 Sep 2016 17:30:57 +0000 (13:30 -0400)] 
Fix T12504

This had an extra_files directive, which does not exist in ghc-8.0, from

3 years agoImprove typechecking of instance defaults
Simon Peyton Jones [Thu, 23 Jun 2016 13:51:22 +0000 (14:51 +0100)] 
Improve typechecking of instance defaults

In an instance declaration when you don't specify the code for a
method, GHC fills in from the default binding in the class.
The type of the default method can legitmiately be ambiguous ---
see Note [Default methods in instances] in TcInstDcls --- so
typechecking it can be tricky.

Trac #12220 showed that although we were dealing with that ambiguity
for /vanilla/ default methods, we were not doing so for /generic/
default methods.  Moreover we were dealing with it clumsily, by
generating post-typechecked code.

This patch fixes the bug AND deletes code!  We now use the same code
path for both vanilla and generic default methods; and generate
/pre-typechecked/ code in both cases.  The key trick is that we can use
Visible Type Application to deal with the ambiguity, which wasn't
possible before.  Hooray.

There is a small hit to performance in compiler/perf/T1969 which
consists of nothing BUT instance declarations with several default
methods to fill, which we now have to typecheck. The actual hit is
from 724 -> 756 or 4% in that extreme example.  Real world programs
have vastly fewer instance decls.

(cherry picked from commit d2958bd08a049b61941f078e51809c7e63bc3354)

3 years agoFix codegen bug in PIC version of genSwitch (#12433)
Simon Marlow [Thu, 15 Sep 2016 09:11:34 +0000 (10:11 +0100)] 
Fix codegen bug in PIC version of genSwitch (#12433)

* getNonClobberedReg instead of getSomeReg, because the reg needs to
  survive across t_code
* Use a new reg for the table offset calculation instead of clobbering
  the reg returned by expr (this was the bug affecting #12433)

Test Plan: New unit test; validate

Reviewers: rwbarton, bgamari, austin, erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12433

3 years agoAdd failing testcase for #12433
Ben Gamari [Mon, 5 Sep 2016 23:19:10 +0000 (19:19 -0400)] 
Add failing testcase for #12433

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11433

(cherry picked from commit dcc49044e8ac5b905955f99b042449635eb47e64)

3 years agorts: Disable -hb with multiple capabilities
Ben Gamari [Mon, 12 Sep 2016 12:44:24 +0000 (08:44 -0400)] 
rts: Disable -hb with multiple capabilities

Biographical profiling is not thread-safe as documented in #12019. Throw
an error when it is used in this way.

Test Plan: Validate

Reviewers: simonmar, austin, erikd

Reviewed By: erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12019

(cherry picked from commit 6555c6bb8447ed65d5da4bab462ee9da7dc3f97a)

3 years agoMake start address of `osReserveHeapMemory` tunable via command line -xb
Francesco Mazzoli [Fri, 9 Sep 2016 17:15:49 +0000 (18:15 +0100)] 
Make start address of `osReserveHeapMemory` tunable via command line -xb

We stumbled upon a case where an external library (OpenCL) does not work
if a specific address (0x200000000) is taken.

It so happens that `osReserveHeapMemory` starts trying to mmap at 0x200000000:

        void *hint = (void*)((W_)8 * (1 << 30) + attempt * BLOCK_SIZE);
        at = osTryReserveHeapMemory(*len, hint);

This makes it impossible to use Haskell programs compiled with GHC 8
with C functions that use OpenCL.

See this example ​ for a repro.

This patch allows the user to work around this kind of behavior outside
our control by letting the user override the starting address through an
RTS command line flag.

Reviewers: bgamari, Phyx, simonmar, erikd, austin

Reviewed By: Phyx, simonmar

Subscribers: rwbarton, thomie

Differential Revision:

(cherry picked from commit 1b5f9207a649a64a1bba20b0283253425f9208d7)

3 years agoFix TH ppr output for list comprehensions with only one Stmt
Ryan Scott [Sun, 11 Sep 2016 15:10:36 +0000 (11:10 -0400)] 
Fix TH ppr output for list comprehensions with only one Stmt

A folow-up to D2521 (which addressed #12583), where the `Outputable` `ppr`
output was tweaked to display a list comprehension with only one `Stmt` as
`[Foo]` instead of `[Foo|]` (which isn't valid Haskell). I forgot to update
the corresponding code in `Language.Haskell.TH.Ppr` which pretty-prints
`CompE`, however, so this commit takes care of that.

(cherry picked from commit 0e7ccf6d233c66b23a60de4e35e039f78ea3e162)

3 years agoFix derived Ix instances for one-constructor GADTs
Ryan Scott [Sun, 11 Sep 2016 14:27:36 +0000 (10:27 -0400)] 
Fix derived Ix instances for one-constructor GADTs

Standalone-derived `Ix` instances would panic on GADTs with exactly
one constructor, since the list of fields was being passed to a function that
uses `foldl1` in order to generate an implementation for `inRange`. This adds a
simple check that makes `inRange` be `True` whenever a product type has no

Fixes #12583.

Test Plan: make test TEST=12583

Reviewers: simonpj, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12583

(cherry picked from commit 7b7ea8f40e7400b8c183595a85bb2c65c9f9bb29)

3 years agoUpdate unix submodule to latest HEAD.
Edward Z. Yang [Thu, 8 Sep 2016 19:05:30 +0000 (12:05 -0700)] 
Update unix submodule to latest HEAD.

Fixes readdir validation error (fixes #12572).

Signed-off-by: Edward Z. Yang <>
(cherry picked from commit a8238a4eb628dcab93e19021b27c0cf2b38ef7d0)

3 years agoAdd platform warning to Foreign.C.Types
Tamar Christina [Sat, 10 Sep 2016 12:04:19 +0000 (13:04 +0100)] 
Add platform warning to Foreign.C.Types

The generated documentation for thhe Foreign.C.Types
module is generated based on the platform which ran Haddock.

This is generating incorrect types for e.g. Windows.

Add a disclaimer to the top of the page to ask people to
keep this in mind.

Test Plan: make documentation and inspect Haddock

Reviewers: erikd, austin, hvr, bgamari

Reviewed By: erikd

Subscribers: RyanGlScott, #ghc_windows_task_force, thomie

Differential Revision:

GHC Trac Issues: #12586

(cherry picked from commit 710f21cc3a6f10dac1b31d089458e5fd16f6d3db)

3 years agousers_guide: Add release note for createIservProcessHook
Ben Gamari [Fri, 9 Sep 2016 13:14:15 +0000 (09:14 -0400)] 
users_guide: Add release note for createIservProcessHook

3 years agoAdd hook for creating ghci external interpreter
Alan Zimmerman [Thu, 8 Sep 2016 06:59:48 +0000 (08:59 +0200)] 
Add hook for creating ghci external interpreter

The external interpreter is launched by calling
'System.Process.createProcess' with a 'CreateProcess' parameter.

The current value for this has the 'std_in', 'std_out' and 'std_err'
fields use the default of 'Inherit', meaning that the remote interpreter
shares the stdio with the original ghc/ghci process.

This patch introduces a new hook to the DynFlags, which has an
opportunity to override the 'CreateProcess' fields, launch the process,
and retrieve the stdio handles actually used.

So if a ghci external interpreter session is launched from the GHC API
the stdio can be redirected if required, which is useful for tooling/IDE

Test Plan: ./validate

Reviewers: austin, hvr, simonmar, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

(cherry picked from commit 65d9597d98ead78198bb747aed4e1163ee0d60d3)

3 years agoDocument meaning of order of --package-db flags, fixes #12485.
Edward Z. Yang [Mon, 5 Sep 2016 23:19:57 +0000 (19:19 -0400)] 
Document meaning of order of --package-db flags, fixes #12485.

Test Plan: none

Reviewers: austin, niteria, bgamari

Reviewed By: niteria

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12485

(cherry picked from commit 5eab6a0da5f22a47d04b97a0ec8988346675b33b)

3 years agoClarify pkg selection when multiple versions are available
Harendra Kumar [Tue, 30 Aug 2016 20:55:08 +0000 (16:55 -0400)] 
Clarify pkg selection when multiple versions are available

Reviewers: austin, bgamari, ezyang

Reviewed By: ezyang

Subscribers: thomie

Differential Revision:

(cherry picked from commit 6781f37d1915ab08cdb3846839a1d485a874049b)

3 years agoRemove references to -XRelaxedPolyRec
Ben Gamari [Mon, 5 Sep 2016 23:19:23 +0000 (19:19 -0400)] 
Remove references to -XRelaxedPolyRec

Test Plan: Read it

Reviewers: dfeuer, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11691

(cherry picked from commit feaa31fbc41685d69045ac8d34be4e18f4f27ffd)

3 years agoFix GHCi perf-llvm build on x86_64
Erik de Castro Lopo [Sat, 13 Aug 2016 21:23:35 +0000 (07:23 +1000)] 
Fix GHCi perf-llvm build on x86_64

With BuildFlavour set to `perf-llvm`, GHCi would fail as soon as it
was run with:

  ghc-stage2: .../ghc-prim/dist-install/build/HSghc-prim-
  unknown symbol `__udivti3'
  ghc-stage2: unable to load package `ghc-prim-'

Fix this by adding `__udivti3` and `__umodti3` to RtsSymbols.c.

Test Plan: Validate

Reviewers: simonmar, austin, bgamari, Phyx, trofi

Reviewed By: Phyx, trofi

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11981

(cherry picked from commit bd0c31063551744d00796219174739216c398da5)

3 years agoInstEnv: Ensure that instance visibility check is lazy
Ben Gamari [Wed, 20 Jul 2016 07:56:03 +0000 (09:56 +0200)] 
InstEnv: Ensure that instance visibility check is lazy

Previously instIsVisible had completely broken the laziness of
lookupInstEnv' since it would examine is_dfun_name to check the name of
the defining module (to know whether it is an interactive module). This
resulted in the visibility check drawing in an interface file
unnecessarily. This contributed to the unnecessary regression in
compiler allocations reported in #12367.

Test Plan: Validate, check nofib changes

Reviewers: simonpj, ezyang, austin

Reviewed By: ezyang

Subscribers: thomie, ezyang

Differential Revision:

GHC Trac Issues: #12367

(cherry picked from commit ed4809813fa51524ae73a4475afe33018a67f87d)

3 years agoBe more aggressive when checking constraints for custom type errors.
Iavor S. Diatchki [Tue, 3 May 2016 20:55:07 +0000 (22:55 +0200)] 
Be more aggressive when checking constraints for custom type errors.

This fixes #11990.

The current rule is simpler than before: if we encounter an unsolved
constraint that contains any mentions of properly applied `TypeError`,
then we report the type error.

If there are multiple `TypeErrors`, then we just report one of them.

Reviewers: simonpj, bgamari, austin

Reviewed By: simonpj

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11990

(cherry picked from commit b75d1940dd3362382c0bc94018a9045c2def82a9)

3 years agodistrib: Fix libdw bindist check
Ben Gamari [Sun, 4 Sep 2016 17:23:35 +0000 (13:23 -0400)] 
distrib: Fix libdw bindist check

As reported in #12555 this code was terribly broken. Sadly, Autoconf was
none-the-wiser. Thanks to @rwbarton for pointing this out.

Test Plan: Test with libdw version newer and older and 0.158

Reviewers: hvr, austin, rwbarton

Reviewed By: rwbarton

Subscribers: thomie, rwbarton, erikd

Differential Revision:

GHC Trac Issues: #12555

(cherry picked from commit 05b497ece50f508526d0906f675bdb4c8109d46a)

3 years agoLess scary arity mismatch error message when deriving
mniip [Sun, 4 Sep 2016 17:23:03 +0000 (13:23 -0400)] 
Less scary arity mismatch error message when deriving

Test Plan: Corrected a few tests to include the new message.

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: goldfire, thomie

Differential Revision:

GHC Trac Issues: #12546

(cherry picked from commit 8d00175f4ba969ca5f4edf26b0e8593a79d4f508)

3 years agoAdded support for deprecated POSIX functions on Windows.
Tamar Christina [Thu, 1 Sep 2016 20:30:07 +0000 (21:30 +0100)] 
Added support for deprecated POSIX functions on Windows.

With the introduction of 8.0.1 We've stopped supporting in GHCi
the use of POSIX functions under their deprecated names on Windows.

This to be compatible with object and libraries from the most
popular compilers on the platform (Microsoft and Intel compilers).

However this brings a confusing disparity between the compiled and
interpreted behavior since MingW-W64 does support the deprecated names.

Also It seems clear that package writers won't update their packages to
properly support Windows. As such I have added redirects in the RTS
for the deprecated functions as listed on

This won't export the functions (as in, they won't be in the symbol table
of compiled code for the RTS.) but we inject them into the symbol table
of the dynamic linker at startup.

Test Plan:

make test TEST="ffi017 ffi021"

Reviewers: thomie, simonmar, RyanGlScott, bgamari, austin, hvr, erikd

Reviewed By: simonmar, bgamari

Subscribers: RyanGlScott, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12209, #12497, #12496

(cherry picked from commit e5ecb2010514405ac1b9b1285a8a65c00a5fd4e0)

3 years agoTestsuite: fix T12010 for real
Thomas Miedema [Sun, 22 May 2016 12:41:48 +0000 (14:41 +0200)] 
Testsuite: fix T12010 for real

* Don't depend on generated files from build tree
  (libraries/base/include/HsBaseConfig.h). Running
  'make test TEST=T12010' should work, even without building GHC first
  (it will use the system installed ghc).

Test Plan: 'make test TEST=T12010' on Linux and Windows.

Reviewed by: Phyx

Differential Revision:

GHC Trac Issues: #12010

(cherry picked from commit 2230c8822233d6d68f930170cd51d96169649056)

3 years agoFix failing T12010
Tamar Christina [Sat, 21 May 2016 14:23:59 +0000 (10:23 -0400)] 
Fix failing T12010

T12010 seems to be failing because it can't find the correct paths.
This gives the test some more qualified paths.

Test Plan: make TEST=12010

Reviewers: hvr, bgamari, austin, thomie

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #12010

(cherry picked from commit a1f3bb8ca454f05fa35cb6b5c64e92f640380802)

3 years agoUse the correct return type for Windows' send()/recv() (Fix #12010)
Tamar Christina [Thu, 19 May 2016 19:48:53 +0000 (21:48 +0200)] 
Use the correct return type for Windows' send()/recv() (Fix #12010)

They return signed 32 bit ints on Windows, even on a 64 bit OS, rather than
Linux's 64 bit ssize_t. This means when recv() returned -1 to signal an error we
thought it was 4294967295. It was converted to an int, -1 and the buffer was
memcpy'd which caused a segfault. Other bad stuff happened with send()s.

See also note CSsize in System.Posix.Internals.

Add a test for #12010

Test Plan:
- GHC testsuite (T12010)
- http-conduit test (

Reviewers: austin, hvr, bgamari, Phyx

Reviewed By: Phyx

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12010

(cherry picked from commit 1ee47c1bfa35c7be435adaec5c1fa9ec92cc776d)

3 years agotestsuite: Add test for #11959
Ben Gamari [Tue, 3 May 2016 20:58:47 +0000 (22:58 +0200)] 
testsuite: Add test for #11959

Test Plan: Validate, expected to fail

Reviewers: goldfire, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11959

(cherry picked from commit 4f2afe1e674606230f2dc2f8ce040a2bd345a647)

3 years agoFix binary-trees regression from unnecessary floating in CorePrep.
Edward Z. Yang [Tue, 30 Aug 2016 20:55:58 +0000 (16:55 -0400)] 
Fix binary-trees regression from unnecessary floating in CorePrep.

In the previous patch, I handled lazy @(Int -> Int) f x
correctly, but failed to handle lazy @Int (f x) (we need
to collect arguments in f x).

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin, bgamari, nomeata

Reviewed By: nomeata

Subscribers: simonmar, thomie

Differential Revision:

(cherry picked from commit 83b326cda759cfd4c538595cf38ee23eb81a4c76)

3 years agoFix #12472 by looking for noinline/lazy inside oversaturated applications.
Edward Z. Yang [Sat, 6 Aug 2016 20:47:05 +0000 (13:47 -0700)] 
Fix #12472 by looking for noinline/lazy inside oversaturated applications.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12472

(cherry picked from commit 0d3bf62092de83375025edca6f7242812338542d)

Note that this diverges slightly from the original commit in that the
noinline logic has been removed, since this feature is not present in

3 years agoFix and complete runghc documentation
Harendra Kumar [Tue, 30 Aug 2016 20:54:30 +0000 (16:54 -0400)] 
Fix and complete runghc documentation

Reviewers: austin, thomie, bgamari

Reviewed By: bgamari

Differential Revision:

GHC Trac Issues: #12517

(cherry picked from commit d168c41a231cd92ca993e0bdd621cf554694df1c)

3 years agoRnExpr: Fix ApplicativeDo desugaring with RebindableSyntax
Ben Gamari [Wed, 31 Aug 2016 20:03:33 +0000 (16:03 -0400)] 
RnExpr: Fix ApplicativeDo desugaring with RebindableSyntax

We need to compare against the local return and pure, not returnMName
and pureAName.

Fixes #12490.

Test Plan: Validate, add testcase

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12490

(cherry picked from commit 043604c7232adb698d5008a46d3f29d532acd12d)