ghc.git
2 years agoRevert "Install toplevel handler inside fork." ghc-8.0.2-rc2
Ben Gamari [Tue, 13 Dec 2016 20:56:44 +0000 (15:56 -0500)] 
Revert "Install toplevel handler inside fork."

The test associated with this has given us too much trouble. It's not
worth the pain for a minor release.

This reverts commit fb0f4cf66f3fc7590821e6688440bf86c25aced1.

2 years agoBump directory submodule to 1.3.0.0 and Cabal to 1.24.2.0
Ben Gamari [Tue, 6 Dec 2016 19:22:52 +0000 (14:22 -0500)] 
Bump directory submodule to 1.3.0.0 and Cabal to 1.24.2.0

2 years agotestsuite: Bump down allocations of T3064
Ben Gamari [Mon, 12 Dec 2016 21:16:15 +0000 (16:16 -0500)] 
testsuite: Bump down allocations of T3064

2 years agoInstall toplevel handler inside fork.
Alexander Vershilov [Fri, 2 Dec 2016 19:32:48 +0000 (14:32 -0500)] 
Install toplevel handler inside fork.

When rts is forked it doesn't update toplevel handler, so UserInterrupt
exception is sent to Thread1 that doesn't exist in forked process.

We install toplevel handler when fork so signal will be delivered to the
new main thread.

Fixes #12903

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #12903

(cherry picked from commit 895a131f6e56847d9ebca2e9bfe19a3189e49d72)

2 years agofdReady: use poll() instead of select()
Simon Marlow [Fri, 2 Dec 2016 19:32:24 +0000 (14:32 -0500)] 
fdReady: use poll() instead of select()

select() is limited to 1024 file descriptors.  This actually blew up
in a very hard-to-debug way in our production system when using the
hinotify package.

Test Plan:
libraries/tests pass, paricularly hGetBuf001 which exercises this
code.

Reviewers: niteria, erikd, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #12912

(cherry picked from commit f46369b8a1bf90a3bdc30f2b566c3a7e03672518)

2 years agoMake note of #12907 in 8.0.2 release notes
Ryan Scott [Thu, 1 Dec 2016 17:24:48 +0000 (12:24 -0500)] 
Make note of #12907 in 8.0.2 release notes

Test Plan: Read it, commit it, merge it, ship it

Reviewers: goldfire, bgamari, austin, hvr, simonpj

Reviewed By: simonpj

Subscribers: thomie

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

GHC Trac Issues: #12907

(cherry picked from commit a452c6e57a286f3b31f0e3fbef83cbea0cee8b34)

2 years agoTweaks to grammar and such.
Gabor Greif [Wed, 30 Nov 2016 09:21:04 +0000 (10:21 +0100)] 
Tweaks to grammar and such.

(cherry picked from commit be8a47f5b7645f395543feb7c8779482a8f6d221)

2 years agoStore string as parsed in SourceText for CImport
Alan Zimmerman [Tue, 29 Nov 2016 19:06:52 +0000 (21:06 +0200)] 
Store string as parsed in SourceText for CImport

(cherry picked from commit 36e36227e438d95fae367d10183ea43b4819854f)

2 years agoFix inference of partial signatures
Simon Peyton Jones [Fri, 25 Nov 2016 11:35:50 +0000 (11:35 +0000)] 
Fix inference of partial signatures

When we had
  f :: ( _ ) => blah
we were failing to call growThetaTyVars, as we do in the
no-type-signature case, and that meant that we weren't generalising
over the right type variables.  I'm quite surprised this didn't cause
problems earlier.

Anyway Trac #12844 showed it up and this patch fixes it

(cherry picked from commit 1bfff60fc57cd564382b86bdfb1f2764ca15d44f)

2 years agoMake note of #12881 in 8.0.2 release notes
Ryan Scott [Tue, 29 Nov 2016 13:43:46 +0000 (08:43 -0500)] 
Make note of #12881 in 8.0.2 release notes

Summary: Resolves #12881.

Test Plan: Read it, commit it, merge it, ship it

Reviewers: hvr, simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj, thomie

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

GHC Trac Issues: #12881

(cherry picked from commit abd4a4c13e5dbaac8f1c28d8c9d9446e383f6037)

2 years agoMerge cpe_ExprIsTrivial and exprIsTrivial
Ben Gamari [Wed, 2 Nov 2016 21:03:05 +0000 (17:03 -0400)] 
Merge cpe_ExprIsTrivial and exprIsTrivial

Strangely my previous attempts at resolving this all seemed to end in
perplexing segmentation faults in the GHC testsuite (including some
rather recent attempts). Somehow this attempt miraculously works.

However, there was one wrinkle that I still need to work out fully: we
need to consider Lits as non-trivial in cpeArg. Failure to do this means
that we would transform something like,

    $trModule = TrModule "HelloWorld"#

into

    $trModule = case "HelloWorld"# of x { __DEFAULT -> TrModule x }

Which then fails the consistentStgInfo check in CoreToStg for reasons
that I am still trying to work out.

Mark T12757 as fixed

Reviewers: simonmar, simonpj, austin

Reviewed By: simonpj

Subscribers: thomie

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

GHC Trac Issues: #11158

(cherry picked from commit 967dd5c9f59e532fe9d6484888a2bae7d02fba11)

2 years agoAdd testcase for #12757
Ben Gamari [Wed, 2 Nov 2016 21:02:14 +0000 (17:02 -0400)] 
Add testcase for #12757

Test Plan: Validate, expected to fail

Reviewers: austin

Subscribers: thomie

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

GHC Trac Issues: #12757

(cherry picked from commit b5460dd6e54f4ba54bfb11469221e8c8f957e964)

2 years agoClean up 8.0.2 release notes
Ben Gamari [Fri, 18 Nov 2016 19:46:36 +0000 (14:46 -0500)] 
Clean up 8.0.2 release notes

2 years agoMark T11978a as broken due to #12019
Ben Gamari [Sat, 1 Oct 2016 21:02:49 +0000 (17:02 -0400)] 
Mark T11978a as broken due to #12019

Test Plan: `validate --slow`

Reviewers: austin

Subscribers: thomie

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

GHC Trac Issues: #12019

(cherry picked from commit d1b4fec12250e608ca8a863ba4ef911084c468ef)

2 years agoRemove fancy shadowing logic; always override in package database order. ghc-8.0.2-rc1
Edward Z. Yang [Thu, 17 Nov 2016 22:08:21 +0000 (17:08 -0500)] 
Remove fancy shadowing logic; always override in package database order.

This is a stopgap fix for GHC 8.0 bug #12485: in particular,
it relaxes need for -package-db flags to be given in
dependency order.  The trade-off is that we are a lot more
unsafe when there are packages with duplicate 'id's in
the database stack: the new code will not do an ABI compatibility
check: if two packages have the same 'id', they are assumed to
be ABI compatible.  If this is not true, GHC may build
segfaulting executables.

Missing test updates, but I'm putting it up so people can
take a look.

In GHC 8.2, we'll record ABIs for all dependencies, allowing
GHC to make better decisions about shadowing.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: austin, niteria, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

GHC Trac Issues: #12485

2 years agoHave reify work for local variables with functional dependencies.
Facundo Domínguez [Thu, 17 Nov 2016 15:04:13 +0000 (10:04 -0500)] 
Have reify work for local variables with functional dependencies.

It turned out that finalizers were run too early and information
resulting from simplifying constraints was not available.

This patch runs finalizers after a first call to simplifyTop, and
then calls simplifyTop a second time to deal with constraints
that could result from running the finalizers.

Fixes T12777

Test Plan: ./validate

Reviewers: goldfire, simonpj, bgamari, austin

Reviewed By: simonpj

Subscribers: mpickering, mboes, thomie

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

GHC Trac Issues: #12777

(cherry picked from commit 231a3ae1644403c1f295e993105c4346d0db22db)

2 years agotestsuite: Kill redundant test definitions
Ben Gamari [Wed, 16 Nov 2016 14:49:31 +0000 (09:49 -0500)] 
testsuite: Kill redundant test definitions

2 years agoBump base library version
Ben Gamari [Tue, 15 Nov 2016 15:29:08 +0000 (10:29 -0500)] 
Bump base library version

2 years agoBump filepath submodule to 1.4.1.1
Ben Gamari [Mon, 14 Nov 2016 22:37:45 +0000 (17:37 -0500)] 
Bump filepath submodule to 1.4.1.1

2 years agoSkip 64-bit symbol tables
Sylvain HENRY [Mon, 14 Nov 2016 22:16:27 +0000 (17:16 -0500)] 
Skip 64-bit symbol tables

This patch makes the RTS linker skip 64-bit symbol table entries.  See
https://mail.haskell.org/pipermail/ghc-devs/2016-November/013210.html

Test Plan: validate

Reviewers: austin, erikd, simonmar, bgamari

Reviewed By: bgamari

Subscribers: osa1, thomie

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

GHC Trac Issues: #12827

(cherry picked from commit 1b336d9064514219f370a4a12d7019f23393600e)

2 years agoStgCmmPrim: Add missing write barrier.
Peter Trommler [Wed, 19 Oct 2016 13:02:54 +0000 (09:02 -0400)] 
StgCmmPrim: Add missing write barrier.

On architectures with weak memory consistency a write barrier
is needed before the write to the pointer array.

Fixes #12469

Test Plan: rebuilt Stackage nightly twice on powerpc64le

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

Reviewed By: erikd, bgamari

Subscribers: thomie

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

GHC Trac Issues: #12469

(cherry picked from commit 2cb8cc26df6af431d30b6964710ea2d859ca2bcd)

2 years agoconfigure: Verify that GCC recognizes -no-pie flag
Ben Gamari [Mon, 14 Nov 2016 19:13:30 +0000 (14:13 -0500)] 
configure: Verify that GCC recognizes -no-pie flag

It seems like GCC versions prior to 4.8 exit with code 0 when faced with
an unrecognized flag. Silly compilers.

Test Plan: Validate

Reviewers: hvr, austin, ggreif

Reviewed By: ggreif

Subscribers: thomie, erikd

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

GHC Trac Issues: #12759

(cherry picked from commit 011af2bf448c28db68a55293abaa5b294f170e37)

2 years agotemplate-haskell: Version bump and update changelog
Ben Gamari [Sat, 12 Nov 2016 16:24:39 +0000 (11:24 -0500)] 
template-haskell: Version bump and update changelog

2 years agorts: Fix build when linked with gold
Ben Gamari [Sat, 12 Nov 2016 03:04:32 +0000 (22:04 -0500)] 
rts: Fix build when linked with gold

As reported in #12812, the runtime system fails to build when linked
with gold due to a missing dependency on libpthread.

Additionally, rts/package.conf.in uses the WORD_SIZE_IN_BITS macro
defined by MachDeps.h, which it does not #include. Fix this.

Test Plan: Validate with gold linker

Reviewers: hsyl20, austin, erikd, simonmar

Subscribers: thomie

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

GHC Trac Issues: #12816

(cherry picked from commit 2cfbee896be349d16238c044475c7c15cfb9b3f2)

2 years agoUpdate unix submodule to 2.7.2.1
Ben Gamari [Fri, 11 Nov 2016 23:20:31 +0000 (18:20 -0500)] 
Update unix submodule to 2.7.2.1

2 years agoBump Cabal submodule to 1.24.1.0
Ben Gamari [Fri, 11 Nov 2016 23:00:11 +0000 (18:00 -0500)] 
Bump Cabal submodule to 1.24.1.0

2 years agoBump hsc2hs submodule to v0.68.1
Ben Gamari [Fri, 11 Nov 2016 22:55:21 +0000 (17:55 -0500)] 
Bump hsc2hs submodule to v0.68.1

2 years agoghc-pkg: Munge dynamic library directories
Ben Gamari [Fri, 11 Nov 2016 20:53:36 +0000 (15:53 -0500)] 
ghc-pkg: Munge dynamic library directories

Otherwise we end up looking in the wrong place for dynamic libraries on
Windows. This addresses a regression introduced by D2611. See #12479.

Test Plan: validate across platforms

Reviewers: austin

Subscribers: thomie

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

GHC Trac Issues: #12479

(cherry picked from commit 75e69edb498511cf2b28dec4e14e6d11232f3e32)

2 years agoRead parentheses better
David Feuer [Fri, 11 Nov 2016 20:56:00 +0000 (15:56 -0500)] 
Read parentheses better

Instead of pulling a token and looking for `'('` or `')'`,
just look for the character itself. This prevents us from
lexing every single item twice, once to see if it's a
left parenthesis and once to actually parse it.

Partially fixes #12665

Test Plan: Validate

Reviewers: austin, bgamari, hvr

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #12665

2 years agotestsuite: Fix framework failure in T12771
Ben Gamari [Fri, 11 Nov 2016 19:33:30 +0000 (14:33 -0500)] 
testsuite: Fix framework failure in T12771

Extraneous extra_files

2 years agotestsuite: Accept T12227 allocations
Ben Gamari [Fri, 11 Nov 2016 19:31:52 +0000 (14:31 -0500)] 
testsuite: Accept T12227 allocations

Sadly I was not able to track down the source of this but there is
really no more time. Looks like we'll just need to accept it.

2 years agoPass -no-pie to GCC
Ben Gamari [Fri, 11 Nov 2016 18:20:03 +0000 (13:20 -0500)] 
Pass -no-pie to GCC

Certain distributions (e.g. Debian and Ubuntu) have enabled PIE be
default in their GCC packaging. This breaks our abuse of GCC as a linker
which requires that we pass -Wl,-r, which is incompatible with
PIE (since the former implies that we are generating a relocatable
object file and the latter an executable).

This is a second attempt at D2691. This attempt constrasts with D2691 in that
it preserves the "does gcc support -no-pie" flag in settings, allowing this to
be reconfigured by `configure` during installation of a binary distribution.
Thanks for @rwbarton for drawing attention to this issue.

Test Plan: Validate

Reviewers: austin, hvr, erikd

Reviewed By: erikd

Subscribers: thomie, rwbarton, erikd

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

GHC Trac Issues: #12759

2 years agoRevert "Pass --no-pie to GCC"
Ben Gamari [Fri, 11 Nov 2016 18:18:51 +0000 (13:18 -0500)] 
Revert "Pass --no-pie to GCC"

This reverts commit 60c299a2278c351abed1ea51a1c2ee5459033fa9. We really
want to be able to change this in the binary distribution `configure`
script. Trying again in D2693.

2 years agoPass --no-pie to GCC
Ben Gamari [Mon, 7 Nov 2016 22:54:39 +0000 (17:54 -0500)] 
Pass --no-pie to GCC

Certain distributions (e.g. Debian and Ubuntu) have enabled PIE be
default in their GCC packaging. This breaks our abuse of GCC as a linker
which requires that we pass -Wl,-r, which is incompatible with
PIE (since the former implies that we are generating a relocatable
object file and the latter an executable).

2 years agoAdd test for #12788
Ryan Scott [Thu, 3 Nov 2016 18:01:54 +0000 (14:01 -0400)] 
Add test for #12788

Commit bce99086e9f54909f51ff5a74cb8c666083bb021 (#12584) fixed #12788. Let's
add a test to make sure it stays fixed.

(cherry picked from commit ec22bacdd625b04d28228dd5522d59d0bc8b1152)

2 years agoconfigure: Pass HC_OPTS_STAGEx to build system
Ben Gamari [Fri, 4 Nov 2016 19:03:55 +0000 (15:03 -0400)] 
configure: Pass HC_OPTS_STAGEx to build system

Test Plan: Try `./configure HC_OPTS_STAGE0=-foobar` and watch it fail

Reviewers: austin, hvr

Subscribers: thomie, erikd

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

(cherry picked from commit c8e79c037097a4ccb40fa8241ca904d90ea84cce)

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: https://phabricator.haskell.org/D2673

(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: https://phabricator.haskell.org/D2672

(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

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

```
libfoo.a
libfoo.dll.a
```

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

```
libxxx.dll.a
xxx.dll.a
libxxx.a
cygxxx.dll (*)
libxxx.dll
xxx.dll
```

Test Plan: ./validate

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

Reviewed By: RyanGlScott

Subscribers: thomie, #ghc_windows_task_force

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

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,
   improveFromAnother
   improveFromInstEnv
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

Summary:
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: https://phabricator.haskell.org/D2682

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
fail.

Reviewers: austin, simonpj, bgamari

Reviewed By: simonpj, bgamari

Subscribers: simonpj, thomie

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

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: https://phabricator.haskell.org/D2639

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: https://phabricator.haskell.org/D2617

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
libraries.

Reviewers: carter, bgamari, hvr, austin, christiaanb

Subscribers: thomie, Phyx, ezyang

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

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
belongs.

(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

Summary:
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: https://phabricator.haskell.org/D2591

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
Cast.

(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: https://phabricator.haskell.org/D2563

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: https://phabricator.haskell.org/D2377

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:
https://travis-ci.org/snoyberg/ghc/builds/167368988.

Test Plan: Confirm tests now pass

Reviewers: austin, nomeata, bgamari

Reviewed By: nomeata, bgamari

Subscribers: thomie

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

(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

Summary:
ASSERT_THREADED_CAPABILITY_INVARIANTS was testing properties of the
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 ./setnumcapabilities001.run/setnumcapabilities001 4 9 2000 || break; done
```

Reviewers: niteria, bgamari, ezyang, austin, erikd

Subscribers: thomie

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

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: https://phabricator.haskell.org/D2553

(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.

Cure.

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: https://phabricator.haskell.org/D2539

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.

Summary:
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: https://phabricator.haskell.org/D2505

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: https://phabricator.haskell.org/D2551

(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: https://phabricator.haskell.org/D2576

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: https://phabricator.haskell.org/D2545

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
fine.

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: https://phabricator.haskell.org/D2583

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: https://phabricator.haskell.org/D2561

(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
https://github.com/fpco/replace-process/issues/2). 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: https://phabricator.haskell.org/D2538

(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: https://phabricator.haskell.org/D2552

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
       TcType.swapOverVars
       TcType.canSolveByUnification
   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: https://phabricator.haskell.org/D2557

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: https://phabricator.haskell.org/D2524

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
patterns.

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: https://phabricator.haskell.org/D2544

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: https://phabricator.haskell.org/D2549

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: https://phabricator.haskell.org/D2545

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: https://phabricator.haskell.org/D2547

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
ABI.

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

Reviewers: osa1, bgamari, austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

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 agoconfigure.ac: fix --host= handling
Sergei Trofimovich [Fri, 2 Sep 2016 07:35:25 +0000 (08:35 +0100)] 
configure.ac: fix --host= handling

The following command fails as:
    $ ./configure --prefix=/usr \
        --build=x86_64-pc-linux-gnu \
        --host=x86_64-pc-linux-gnu \
        --target=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 <siarheit@google.com>
Reviewers: rwbarton, erikd, austin, hvr, bgamari, Phyx

Reviewed By: Phyx

Subscribers: thomie

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

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.

Summary:
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: https://phabricator.haskell.org/D2452

GHC Trac Issues: #12487

(cherry picked from commit 18f06878ed5d8cb0cf366a876f2bfea29647e5f0)