ghc.git
2 years agoincludes/rts: Drop trailing comma
Ben Gamari [Fri, 8 Sep 2017 02:49:22 +0000 (22:49 -0400)] 
includes/rts: Drop trailing comma

This trailing comma snuck in in a recent patch. There is nothing wrong with the
comma; it's perfectly valid C99, yet nevertheless Mac OS X's dtrace utility
chokes on it with,

    dtrace: failed to compile script rts/RtsProbes.d:
            "includes/rts/EventLogFormat.h", line 245: syntax error near "}"
    make[1]: *** [rts/dist/build/RtsProbes.h] Error 1

2 years agoMake Semigroup a superclass of Monoid (re #14191)
Herbert Valerio Riedel [Tue, 5 Sep 2017 05:29:36 +0000 (07:29 +0200)] 
Make Semigroup a superclass of Monoid (re #14191)

Unfortunately, this requires introducing a couple of .hs-boot files to
break up import cycles (mostly to provide class & typenames in order to
be able to write type signatures).

This does not yet re-export `(<>)` from Prelude (while the class-name
`Semigroup` is reexported); that will happen in a future commit.

Test Plan: local ./validate passed

Reviewers: ekmett, austin, bgamari, erikd, RyanGlScott

Reviewed By: ekmett, RyanGlScott

GHC Trac Issues: #14191

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

2 years agoTravis: Boot with ghc-8.2.1, and disable test suite
Joachim Breitner [Sat, 19 Aug 2017 13:33:52 +0000 (15:33 +0200)] 
Travis: Boot with ghc-8.2.1, and disable test suite

by only building, we can hopefully be in the build time limit, while
still providing a bit of useful service, e.g. indicating early when
GitHub pull requests (with seemingly innocent results) fail to build.

2 years agoFix typos in diagnostics, testsuite and comments
Gabor Greif [Wed, 6 Sep 2017 12:42:02 +0000 (14:42 +0200)] 
Fix typos in diagnostics, testsuite and comments

2 years agoHandle W80 in floatFormat
Gabor Greif [Wed, 6 Sep 2017 10:39:58 +0000 (12:39 +0200)] 
Handle W80 in floatFormat

2 years agoUpdate xhtml submodule
Herbert Valerio Riedel [Wed, 6 Sep 2017 22:59:28 +0000 (00:59 +0200)] 
Update xhtml submodule

This fixes a minor thinko about future module exports
related to Semigroup/Monoid

2 years agoCleanups, remove commented-out code
Gabor Greif [Wed, 6 Sep 2017 22:47:43 +0000 (00:47 +0200)] 
Cleanups, remove commented-out code

and join type signatures

2 years agoClean up opt and llc
Moritz Angermann [Wed, 6 Sep 2017 15:31:01 +0000 (11:31 -0400)] 
Clean up opt and llc

The LLVM backend shells out to LLVMs `opt` and `llc` tools. This clean
up introduces a shared data structure to carry the arguments we pass to
each tool so that corresponding flags are next to each other. It drops
the hard coded data layouts in favor of using `-mtriple` and have LLVM
infer them. Furthermore we add `clang` as a proper tool, so we don't
rely on assuming that `clang` is called `clang` on the `PATH` when using
`clang` as the assembler.  Finally this diff also changes the type of
`optLevel` from `Int` to `Word`, as we do not have negative optimization
levels.

Reviewers: erikd, hvr, austin, rwbarton, bgamari, kavon

Reviewed By: kavon

Subscribers: michalt, Ericson2314, ryantrinkle, dfeuer, carter, simonpj,
kavon, simonmar, thomie, erikd, snowleopard

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

2 years agorts: Fix use of #if
Ben Gamari [Wed, 6 Sep 2017 13:48:58 +0000 (09:48 -0400)] 
rts: Fix use of #if

2 years agoImplicitly bind kind variables in type family instance RHSes when it's sensible
Ryan Scott [Tue, 5 Sep 2017 15:00:56 +0000 (11:00 -0400)] 
Implicitly bind kind variables in type family instance RHSes when it's sensible

Summary:
Before, there was a discrepancy in how GHC renamed type synonyms as
opposed to type family instances. That is, GHC would accept definitions like
this one:

```lang=haskell
type T = (Nothing :: Maybe a)
```

However, it would not accept a very similar type family instance:

```lang=haskell
type family   T :: Maybe a
type instance T = (Nothing :: Maybe a)
```

The primary goal of this patch is to bring the renaming of type family
instances up to par with that of type synonyms, causing the latter definition
to be accepted, and fixing #14131.

In particular, we now allow kind variables on the right-hand sides of type
(and data) family instances to be //implicitly// bound by LHS type (or kind)
patterns (as opposed to type variables, which must always be explicitly
bound by LHS type patterns only). As a consequence, this allows programs
reported in #7938 and #9574 to typecheck, whereas before they would
have been rejected.

Implementation-wise, there isn't much trickery involved in making this happen.
We simply need to bind additional kind variables from the RHS of a type family
in the right place (in particular, see `RnSource.rnFamInstEqn`, which has
undergone a minor facelift).

While doing this has the upside of fixing #14131, it also made it easier to
trigger #13985, so I decided to fix that while I was in town. This was
accomplished by a careful blast of `reportFloatingKvs` in `tcFamTyPats`.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #13985, #14131

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

2 years agorts: Add heap breakdown type for -hT
Ben Gamari [Mon, 4 Sep 2017 12:15:08 +0000 (08:15 -0400)] 
rts: Add heap breakdown type for -hT

Test Plan: Build, program with `-eventlog`, try running with `+RTS -h`

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

GHC Trac Issues: #14096

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

2 years agoeventlog: Clean up profiling heap breakdown type
Ben Gamari [Mon, 4 Sep 2017 12:14:38 +0000 (08:14 -0400)] 
eventlog: Clean up profiling heap breakdown type

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

GHC Trac Issues: #14096

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

2 years agoStgLint: Show constructor arity in mismatch message
Ben Gamari [Mon, 4 Sep 2017 12:14:11 +0000 (08:14 -0400)] 
StgLint: Show constructor arity in mismatch message

Reviewers: austin

Subscribers: rwbarton, thomie

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

2 years agobase: Update acosh to handle -1::Complex
Alex Bradley [Mon, 4 Sep 2017 12:08:46 +0000 (08:08 -0400)] 
base: Update acosh to handle -1::Complex

Summary: Fixes #8532

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #8532

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

2 years agoSetLevels: Substitute in ticks in lvlMFE
Ben Gamari [Mon, 4 Sep 2017 12:05:33 +0000 (08:05 -0400)] 
SetLevels: Substitute in ticks in lvlMFE

Previously SetLevels.lvlMFE would fail to substitute in ticks, unlike
lvlExpr.  This lead to #13481. Fix this.

Test Plan: `make test TEST=T12622 WAY=ghci`

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie

GHC Trac Issues: #13481

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

2 years agoReplace hashing function for string keys implementation with xxhash
Tamar Christina [Mon, 4 Sep 2017 12:02:15 +0000 (08:02 -0400)] 
Replace hashing function for string keys implementation with xxhash

When doing profiling on startup time of ghci on Windows, both cold and
startup loading static LLVM libs, the profiler is showing a glaring red
spot on the division operation of the the hashStr function.

In fact profiling shows 14% of the time is spent hashing the keys.

So I am replacing the hash function with xxHash which is a very fast
non-crypto hash. It's faster than MurMurHash which node etc use.

It also passes SMHasher. I can provide if required the collected raw
data.  But from analysis done on the keys, xxHash does not introduce
more collisions than before, the amount splits seem about the same and
the distributions among the buckets are slightly more uniform than
before.

However the runtime dropped enough to remove the function completely
from the profiler's report.

There's also a noticeable improvement in responsiveness.

xxHash is BSD licensed and can be found
https://github.com/Cyan4973/xxHash

Test Plan: ./validate

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #13165

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

2 years agoget-win32-tarballs: Use correct `find`
Ben Gamari [Mon, 4 Sep 2017 12:01:04 +0000 (08:01 -0400)] 
get-win32-tarballs: Use correct `find`

This fixes #12502 by using the `find` utility found by FP_PROG_FIND
instead of the first one in PATH.

Test Plan: Validate on Windows

Reviewers: Phyx, austin, hvr

Reviewed By: Phyx

Subscribers: rwbarton, thomie, erikd

GHC Trac Issues: #12502

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

2 years agoget-win32-tarballs: Use bash, not sh
Ben Gamari [Mon, 4 Sep 2017 12:00:48 +0000 (08:00 -0400)] 
get-win32-tarballs: Use bash, not sh

The script appears to use the local keyword, which I'm fairly certain is
a feature of bash and not sh.

Reviewers: Phyx, austin

Reviewed By: Phyx

Subscribers: rwbarton, thomie

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

2 years agoFix egregious duplication of vars in RnTypes
Ryan Scott [Mon, 4 Sep 2017 12:00:29 +0000 (08:00 -0400)] 
Fix egregious duplication of vars in RnTypes

`RnTypes` contains a fairly intricate algorithm to extract
the kind and type variables of an HsType. This algorithm carefully
maintains the separation between type variables and kind variables
so that the difference between `-XPolyKinds` and `-XTypeInType` can
be respected.

But after doing all this, `rmDupsInRdrTyVars` stupidly just
concatenated the lists of type and kind variables at the end. If a
variable were used as both a type and a kind, the algorithm would
produce *both*! This led to all kinds of problems, including #13988.

This is mostly Richard Eisenberg's patch. The only original
contribution I made was adapting call sites of `rnImplicitBndrs` to
work with the new definition of `rmDupsInRdrTyVars`. That is,
`rnImplicitBndrs` checks for variables that are illegally used in
both type and kind positions without using `-XTypeInType`, but in
order to check this, one cannot have filtered duplicate variables out
before passing them to `rnImplicitBndrs`. To accommodate for this, I
needed to concoct variations on the existing `extract-` functions in
`RnTypes` which do not remove duplicates, and use those near
`rnImplicitBndrs` call sites.

test case: ghci/scripts/T13988

Test Plan: make test TEST=T13988

Reviewers: goldfire, simonpj, austin, bgamari

Reviewed By: goldfire, simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #13988

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

2 years agoRemember the AvailInfo for each IE
alexbiehl [Mon, 4 Sep 2017 11:59:48 +0000 (07:59 -0400)] 
Remember the AvailInfo for each IE

This is another take on https://phabricator.haskell.org/D3844.

This patch removes then need for haddock to reimplement the calculation
of exported names from modules. Instead when renaming export lists ghc
annotates each IE with its exported names.

Haddocks current  export logic has caused lots of trouble in the past
(on the Github issue tracker):
  - https://github.com/haskell/haddock/issues/121
  - https://github.com/haskell/haddock/issues/174
  - https://github.com/haskell/haddock/issues/225
  - https://github.com/haskell/haddock/issues/344
  - https://github.com/haskell/haddock/issues/584
  - https://github.com/haskell/haddock/issues/591
  - https://github.com/haskell/haddock/issues/597

Updates haddock submodule.

Reviewers: austin, bgamari, ezyang

Reviewed By: bgamari, ezyang

Subscribers: rwbarton, thomie

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

2 years agotestsuite: Add test for #14129
Ben Gamari [Mon, 4 Sep 2017 11:59:07 +0000 (07:59 -0400)] 
testsuite: Add test for #14129

It's not impossible that this will also get caught by another test given
a suitably configured compiler, but this is minimal enough that it seems
worth including.

Test Plan: Validate with `DYNAMIC_GHC_PROGRAMS=NO`

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14129

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

2 years agotestsuite: Fix validation of ways
Ben Gamari [Mon, 4 Sep 2017 11:58:48 +0000 (07:58 -0400)] 
testsuite: Fix validation of ways

Test Plan: Run `make test WAY=prof`

Reviewers: angerman, austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14181

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

2 years agoMove NonEmpty definition into GHC.Base
Herbert Valerio Riedel [Sat, 2 Sep 2017 19:52:21 +0000 (21:52 +0200)] 
Move NonEmpty definition into GHC.Base

This is a preparatory refactoring for Semigroup=>Monoid
as it prevents a messy .hs-boot file which would interact
inconveniently with the buildsystem...

2 years agoDocument the Generic(1) laws
Ryan Scott [Sat, 2 Sep 2017 19:33:34 +0000 (15:33 -0400)] 
Document the Generic(1) laws

Summary:
Some code that @dfeuer was writing implicitly depended on these laws,
but they didn't appear to be enshrined in the Haddocks. Let's do so.

Test Plan: Read it

Reviewers: austin, hvr, bgamari, dfeuer

Reviewed By: dfeuer

Subscribers: rwbarton, thomie, dfeuer

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

2 years agoFix #14167 by using isGadtSyntaxTyCon in more places
Ryan Scott [Sat, 2 Sep 2017 19:33:25 +0000 (15:33 -0400)] 
Fix #14167 by using isGadtSyntaxTyCon in more places

Summary:
Two places in GHC effectively attempt to //guess// whether a data type
was declared using GADT syntax:

1. When reifying a data type in Template Haskell
2. When pretty-printing a data type (e.g., via `:info` in GHCi)

But there's no need for heuristics here, since we have a 100% accurate way to
determine whether a data type was declared using GADT syntax: the
`isGadtSyntaxTyCon` function! By simply using that as the metric, we obtain
far more accurate TH reification and pretty-printing results.

This is technically a breaking change, since Template Haskell reification will
now reify some data type constructors as `(Rec)GadtC` that it didn't before,
and some data type constructors that were previously reified as `(Rec)GadtC`
will no longer be reified as such. But it's a very understandable breaking
change, since the previous behavior was simply incorrect.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14167

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

2 years agoDisallow bang/lazy patterns in the RHSes of implicitly bidirectional patsyns
Ryan Scott [Sat, 2 Sep 2017 19:33:11 +0000 (15:33 -0400)] 
Disallow bang/lazy patterns in the RHSes of implicitly bidirectional patsyns

Summary:
GHC was allowing implicitly bidirectional pattern synonyms with bang
patterns and irrefutable patterns in the RHS, like so:

```lang=haskell
pattern StrictJust a = Just !a
```

This has multiple problems:

1. `Just !a` isn't a valid expression, so it feels strange to allow it in an
   implicitly bidirectional pattern synonym.
2. `StrictJust` doesn't provide the strictness properties one would expect
   from a strict constructor. (One could imagine a design where the
   `StrictJust` builder infers a bang pattern for its pattern variable, but
   accomplishing this inference in a way that accounts for all possible
   patterns on the RHS, including other pattern synonyms, is somewhat
   awkward, so we do not pursue this design.)

We nip these issues in the bud by simply disallowing bang/irrefutable patterns
on the RHS.

Test Plan: make test TEST="T14112 unidir"

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14112

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

2 years agoDocument the intricacies of ForallC variable quantification better
Ryan Scott [Sat, 2 Sep 2017 19:32:56 +0000 (15:32 -0400)] 
Document the intricacies of ForallC variable quantification better

Summary:
I recently (re-)discovered that `ForallC` quantifies different type variables
depending on whether `GadtC` is present or not. This is an important
enough gotcha where I feel like this fact should also be advertised in the
`template-haskell` documentation itself, so this patch does just that.

Test Plan: Read it

Reviewers: goldfire, austin, bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #13885

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

2 years agoUpdate transformers submodule
Herbert Valerio Riedel [Sat, 2 Sep 2017 08:24:39 +0000 (10:24 +0200)] 
Update transformers submodule

This updates `transformers` from the v0.5.2 release to the
v0.5.4 release + unreleased changes

This is a pre-requisite for the Semigroup=>Monoid implementation

2 years agoRemove broken citeseer citation links
Chris Martin [Tue, 29 Aug 2017 21:32:17 +0000 (17:32 -0400)] 
Remove broken citeseer citation links

2 years agoAdd testcase for #14178
Ben Gamari [Fri, 1 Sep 2017 14:52:47 +0000 (10:52 -0400)] 
Add testcase for #14178

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14178

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

2 years agoFix order of PrelRule
Ben Gamari [Fri, 1 Sep 2017 14:52:34 +0000 (10:52 -0400)] 
Fix order of PrelRule

Test Plan: Added testcase in D3905.

Reviewers: austin

Subscribers: angerman, rwbarton, thomie

GHC Trac Issues: #14178

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

2 years agoImprove stm haddocks
Ben Gamari [Thu, 31 Aug 2017 20:40:28 +0000 (16:40 -0400)] 
Improve stm haddocks

While looking at #14171 I noticed these readability issues. Fix them.

2 years agoAdd missing Semigroup instances in utils/{hpc,runghc}
Herbert Valerio Riedel [Thu, 31 Aug 2017 07:49:20 +0000 (09:49 +0200)] 
Add missing Semigroup instances in utils/{hpc,runghc}

This is a follow-up to c0feee90118333dac817cfad6f2dedc0a886d1bd

2 years agoAdd missing Semigroup instances to compiler
Herbert Valerio Riedel [Tue, 29 Aug 2017 23:29:55 +0000 (01:29 +0200)] 
Add missing Semigroup instances to compiler

This is a pre-requisite for implementing the Semigroup/Monoid proposal.
The instances have been introduced in a way to minimise warnings.

2 years agoReally fix Trac #14158
Simon Peyton Jones [Wed, 30 Aug 2017 15:19:37 +0000 (16:19 +0100)] 
Really fix Trac #14158

I dug more into how #14158 started working. I temporarily reverted the
patch that "fixed" it, namely

    commit a6c448b403dbe8720178ca82100f34baedb1f47e
    Author: Simon Peyton Jones <simonpj@microsoft.com>
    Date:   Mon Aug 28 17:33:59 2017 +0100

    Small refactor of getRuntimeRep

Sure enough, there was a real bug, described in the new
TcExpr Note [Visible type application zonk]

In general, syntactic substituion should be kind-preserving!
Maybe we should check that invariant...

2 years agoSmall changes to ddump-tc tracing
Simon Peyton Jones [Wed, 30 Aug 2017 15:16:36 +0000 (16:16 +0100)] 
Small changes to ddump-tc tracing

2 years agoAdd debugPprType
Simon Peyton Jones [Wed, 30 Aug 2017 07:57:40 +0000 (08:57 +0100)] 
Add debugPprType

We pretty-print a type by converting it to an IfaceType and
pretty-printing that.  But
 (a) that's a bit indirect, and
 (b) delibrately loses information about (e.g.) the kind
      on the /occurrences/ of a type variable

So this patch implements debugPprType, which pretty prints
the type directly, with no fancy formatting.  It's just used
for debugging.

I took the opportunity to refactor the debug-pretty-printing
machinery a little.  In particular, define these functions
and use them:

  ifPprDeubug :: SDoc -> SDOc -> SDoc
    -- Says what to do with and without -dppr-debug
  whenPprDebug :: SDoc -> SDoc
    -- Says what to do with  -dppr-debug; without is empty
  getPprDebug :: (Bool -> SDoc) -> SDoc

getPprDebug used to be called sdocPprDebugWith
whenPprDebug used to be called ifPprDebug

So a lot of files get touched in a very mechanical way

2 years agoDefine and use HsArg
Simon Peyton Jones [Wed, 30 Aug 2017 08:25:45 +0000 (09:25 +0100)] 
Define and use HsArg

All this Left/Right business was making my head spin, so I defined

data HsArg tm ty
  = HsValArg tm   -- Argument is an ordinary expression     (f arg)
  | HsTypeArg  ty -- Argument is a visible type application (f @ty)

and used it.  This is just simple refactor; no change in behaviour.

2 years agoAdd comments to RnTypes
Simon Peyton Jones [Wed, 30 Aug 2017 08:21:40 +0000 (09:21 +0100)] 
Add comments to RnTypes

These comments clarify the details of:

  commit 0257dacf228024d0cc6ba247c707130637a25580
  Author: Simon Peyton Jones <simonpj@microsoft.com>
  Date:   Mon Aug 28 14:20:02 2017 +0100

      Refactor bindHsQTyVars and friends

2 years agoAdd some traceRn and (Outputable StmtTree)
Simon Peyton Jones [Tue, 29 Aug 2017 10:22:30 +0000 (11:22 +0100)] 
Add some traceRn and (Outputable StmtTree)

I added these when investigating Trac #14163, but they'll be
useful anyway.

2 years agoAdd a Note describing #14128
Ben Gamari [Tue, 29 Aug 2017 23:14:22 +0000 (19:14 -0400)] 
Add a Note describing #14128

I prematurely committed the D3892 before adding a Note. Fix this.

2 years agoHsExpr: Fix typo
James Michael DuPont [Tue, 29 Aug 2017 11:00:29 +0000 (07:00 -0400)] 
HsExpr: Fix typo

2 years agoStgLint: Give up on trying to compare types
Ben Gamari [Tue, 29 Aug 2017 18:53:35 +0000 (14:53 -0400)] 
StgLint: Give up on trying to compare types

We used to try a crude comparison of the type themselves, but this is
essentially impossible in STG as we have discarded. both casts and type
applications, so types might look different but be the same.  Now we
simply compare their runtime representations.

See #14120.

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14120

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

2 years agoStgLint: Enforce MultiValAlt liveness invariant only after unariser
Ben Gamari [Tue, 29 Aug 2017 18:53:12 +0000 (14:53 -0400)] 
StgLint: Enforce MultiValAlt liveness invariant only after unariser

The unariser ensures that we never use case binders that are void,
unboxed sums, or unboxed tuples. However, previously StgLint was
enforcing this invariant even before the unariser was running, giving
rise to spurious lint failures.  Fix this. Following CoreLint, we
introduce a LintFlags environment to the linter monad, allowing for
additional flags to be easily accomodated in the future.

See #14118.

Test Plan: Build GHC with -dstg-lint

Reviewers: simonpj, austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14118

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

2 years agoStgLint: Show type of out-of-scope binders
Ben Gamari [Tue, 29 Aug 2017 18:38:24 +0000 (14:38 -0400)] 
StgLint: Show type of out-of-scope binders

Reviewers: austin

Subscribers: rwbarton, thomie

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

2 years agonativeGen: Don't index into linked lists
Ben Gamari [Tue, 29 Aug 2017 18:51:52 +0000 (14:51 -0400)] 
nativeGen: Don't index into linked lists

There were a couple places where we indexed into linked lists of
register names.  Replace these with arrays.

Reviewers: austin

Subscribers: rwbarton, thomie

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

2 years agoPackageDb: Explicitly unlock package database before closing
Ben Gamari [Tue, 29 Aug 2017 18:45:28 +0000 (14:45 -0400)] 
PackageDb: Explicitly unlock package database before closing

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #13945

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

2 years agobase: Add support for file unlocking
Ben Gamari [Tue, 29 Aug 2017 18:45:08 +0000 (14:45 -0400)] 
base: Add support for file unlocking

Reviewers: austin, hvr

Subscribers: rwbarton, thomie

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

2 years agoghc-pkg: Try opening lockfiles in read-write mode first
Ben Gamari [Tue, 29 Aug 2017 18:26:55 +0000 (14:26 -0400)] 
ghc-pkg: Try opening lockfiles in read-write mode first

As pointed out in #13945, some filesystems only allow allow exclusive
locks if the fd being locked was opened for write access. This causes
ghc-pkg to fail as it first attempts to open and exclusively lock its
lockfile in read-only mode to accomodate package databases for which we
lack write permissions (e.g.  global package databases).

Instead, we now try read-write mode first, falling back to read-only
mode if this fails.

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #13945

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

2 years agoAdd gen-dll as replacement for dll-split
Tamar Christina [Tue, 29 Aug 2017 22:09:09 +0000 (23:09 +0100)] 
Add gen-dll as replacement for dll-split

Summary:
This tool can be used to generate dll's for any list of object files
given to it. It will then repartition them automatically to fit within
a dll and generates as many dll's as needed to do this. Cyclic dependencies
between these generated dlls are handle automatically so there is no need
to tell it how to partition.

It is also a lot more general than `dll-split` as it is able to split any
package not just `libGHC`. It also uses a trick using GNU style import libraries
to hide the splitting from the rest of the pipeline. Which means come linking time
you don't need to know which dll contains what symbol or how many split dlls were
created.

The import libraries are by default created with libtool. However since libtool is BFD
based it is very slow. So if present and detected by configure the `genlib` tool
from the msys2 project is used. This makes a difference of about ~45 minutes when compiling.

To install `genlib` run `pacman -Sy mingw-w64-$(uname -m)-tools-git`.

More detailed explaination of the process can be found here
https://ghc.haskell.org/trac/ghc/wiki/WindowsDynamicLinking

Test Plan: ./validate

Reviewers: austin, hvr, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: snowleopard, rwbarton, thomie, erikd, #ghc_windows_task_force

GHC Trac Issues: #5987

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

2 years agoFix decomposition error on Windows
Tamar Christina [Tue, 29 Aug 2017 21:59:38 +0000 (22:59 +0100)] 
Fix decomposition error on Windows

Summary:
Fix the path decomposition error that occurs when the Symlink resolver
fails. `Win32.try` throws an exception, so catch it and assume the path
isn't a symlink to use the old behavior.

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #14159

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

2 years agoRefactor type family instance abstract syntax declarations
Ryan Scott [Tue, 29 Aug 2017 16:38:54 +0000 (12:38 -0400)] 
Refactor type family instance abstract syntax declarations

This implements @simonpj's suggested refactoring of the abstract syntax
for type/data family instances (from
https://ghc.haskell.org/trac/ghc/ticket/14131#comment:9). This combines
the previously separate `TyFamEqn` and `DataFamInstDecl` types into a
single `FamEqn` datatype. This also factors the `HsImplicitBndrs` out of
`HsTyPats` in favor of putting them just outside of `FamEqn` (as opposed
to before, where all of the implicit binders were embedded inside of
`TyFamEqn`/`DataFamInstDecl`). Finally, along the way I noticed that
`dfid_fvs` and `tfid_fvs` were completely unused, so I removed them.

Aside from some changes in parser test output, there is no change in
behavior.

Requires a Haddock submodule commit from my fork (at
https://github.com/RyanGlScott/haddock/commit/815d2deb9c0222c916becccf84
64b740c26255fd)

Test Plan: ./validate

Reviewers: simonpj, austin, goldfire, bgamari, alanz

Reviewed By: bgamari

Subscribers: mpickering, goldfire, rwbarton, thomie, simonpj

GHC Trac Issues: #14131

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

2 years agoRemove dll-split.
Tamar Christina [Mon, 28 Aug 2017 16:29:48 +0000 (12:29 -0400)] 
Remove dll-split.

This patch removes dll-split from the code base, the reason is dll-split
no longer makes any sense. It was designed to split a dll in two, but we
now already have many more symbols than would fit inside two dlls. So we
need a third one. This means there's no point in having to maintain this
list as it'll never work anyway and the solution isn't scalable.

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, #ghc_windows_task_force

GHC Trac Issues: #5987

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

2 years agodesugar: Ensure that a module's dep_orphs doesn't contain itself
Ben Gamari [Sat, 26 Aug 2017 20:17:18 +0000 (16:17 -0400)] 
desugar: Ensure that a module's dep_orphs doesn't contain itself

Consider that we have two modules, A and B, both with hs-boot files,

  * A.hs contains a SOURCE import of B
  * B.hs-boot contains a SOURCE import of A
  * A.hs-boot declares an orphan instance
  * A.hs defines the orphan instance

In this case, B's dep_orphs will contain A due to its SOURCE import of
A.  Consequently, A will contain itself in its imp_orphs due to its
import of B.  This fact would end up being recorded in A's interface
file. This would then break the invariant asserted by calculateAvails
that a module does not itself in its dep_orphs. This was the cause
of #14128.

The solution is to remove self-references from imp_orphs when
constructing dep_orphs; we already did a similar thing for dep_mods. I
believe we should do the same for dep_finsts, although I'm treating this
as a separate bug.

Reviewers: austin

Subscribers: rwbarton, thomie

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

2 years agotestsuite: Add test for #14128
Ben Gamari [Sat, 26 Aug 2017 20:16:47 +0000 (16:16 -0400)] 
testsuite: Add test for #14128

Reviewers: austin, goldfire

Subscribers: rwbarton, thomie

GHC Trac Issues: #14128

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

2 years agoAdd HasDebugStack for typeKind
Simon Peyton Jones [Mon, 28 Aug 2017 16:35:33 +0000 (17:35 +0100)] 
Add HasDebugStack for typeKind

typeKind can fail, and it's called all over the place, so
it's helpful to know where

2 years agoSmall refactor of getRuntimeRep
Simon Peyton Jones [Mon, 28 Aug 2017 16:33:59 +0000 (17:33 +0100)] 
Small refactor of getRuntimeRep

Instead of using a string argument, use HasDebugCallStack.
(Oddly, some functions were using both!)

Plus, use getRuntimeRep rather than getRuntimeRep_maybe when
if the caller panics on Nothing. Less code, and a better debug
stack.

2 years agoImprove kind-application-error message
Simon Peyton Jones [Mon, 28 Aug 2017 16:23:35 +0000 (17:23 +0100)] 
Improve kind-application-error message

2 years agoUse a well-kinded substitution to instantiate
Simon Peyton Jones [Mon, 28 Aug 2017 16:21:14 +0000 (17:21 +0100)] 
Use a well-kinded substitution to instantiate

In tcDataConPat we were creating an ill-kinded substitution
-- or at least one that is well kinded only after you have solved
other equalities.  THat led to a crash, because the instantiated
data con type was ill-kinded.

This patch guarantees that the instantiating substitution is
well-kinded.

Fixed Trac #14154

2 years agoSmall refactoring of meta-tyvar cloning
Simon Peyton Jones [Mon, 28 Aug 2017 16:18:26 +0000 (17:18 +0100)] 
Small refactoring of meta-tyvar cloning

No change in behaviour.

2 years agoRefactor bindHsQTyVars and friends
Simon Peyton Jones [Mon, 28 Aug 2017 13:20:02 +0000 (14:20 +0100)] 
Refactor bindHsQTyVars and friends

This work was triggered by Trac #13738, which revealed to me that
the code RnTypes.bindHsQTyVars and bindLHsTyVarBndrs was a huge
tangled mess -- and outright wrong on occasion as the ticket showed.

The big problem was that bindLHsTyVarBndrs (which is invoked at every
HsForAll, including nested higher rank ones) was attempting to bind
implicit kind variables, which it has absolutely no busineess doing.
Imlicit kind quantification is done at the outside only, in fact
precisely where we have HsImplicitBndrs or LHsQTyVars (which also
has implicit binders).

Achieving this move was surprisingly hard, because more and more
barnacles had accreted aroud the original mistake.  It's much
much better now.

Summary of changes.  Almost all the action is in RnTypes.

* Implicit kind variables are bound only by
  - By bindHsQTyVars, which deals with LHsQTyVars
  - By rnImplicitBndrs, which deals with HsImplicitBndrs

* bindLHsTyVarBndrs, and bindLHsTyVarBndr are radically simplified.
  They simply does far less, and have lots their forest of
  incomprehensible accumulating parameters.  (To be fair, some of
  the code in bindLHsTyVarBndrs just moved to bindHsQTyVars, but
  in much more perspicuous form.)

* The code that checks if a variable appears in both a kind and
  a type (triggering RnTypes.mixedVarsErr) was bizarre.  E.g.
  we had this in RnTypes.extract_hs_tv_bndrs
       ; check_for_mixed_vars bndr_kvs acc_tvs
       ; check_for_mixed_vars bndr_kvs body_tvs
       ; check_for_mixed_vars body_tvs acc_kvs
       ; check_for_mixed_vars body_kvs acc_tvs
       ; check_for_mixed_vars locals body_kvs
  I cleaned all this up; now we check for mixed use at binding
  sites only.

* Checks for "Variable used as a kind before being bound", like
     data T (a :: k) k = rhs
  now just show up straightforwardly as "k is not in scope".
  See Note [Kind variable ordering]

* There are some knock-on simplifications in RnSource.

2 years agoAdd TcRnMonad.unlessXOptM
Simon Peyton Jones [Mon, 28 Aug 2017 12:37:56 +0000 (13:37 +0100)] 
Add TcRnMonad.unlessXOptM

This usefully joins whenXOptM; there are probably lots of places
we should use it!

This patch does not use new new function at all; but it's preparing
for an upcoming patch when I do use it.

2 years agoA bit more -ddump-tc tracing
Simon Peyton Jones [Mon, 28 Aug 2017 12:37:30 +0000 (13:37 +0100)] 
A bit more -ddump-tc tracing

2 years agoBetter debug-printing for Outputable TyConBinder
Simon Peyton Jones [Mon, 28 Aug 2017 12:27:14 +0000 (13:27 +0100)] 
Better debug-printing for Outputable TyConBinder

Anon and Required were printed the same :-(.  This is only for
debug printing, so I switched to a slightly more verbose and
explicit format

2 years agoComments only
Simon Peyton Jones [Mon, 28 Aug 2017 12:26:07 +0000 (13:26 +0100)] 
Comments only

Better comment on con_qvars in ConDecl

2 years agoMake parsed AST dump output lazily
David Feuer [Tue, 29 Aug 2017 03:28:08 +0000 (23:28 -0400)] 
Make parsed AST dump output lazily

Previously, `showAstData` produced a `String`. That `String` would
then be converted to a `Doc` using `text` to implement
`-ddump-parsed-ast`. But rendering `text` calculates the length
of the `String` before doing anything else. Since the AST can be
very large, this was bad: the whole dump string (potentially hundreds
of millions of `Char`s) was accumulated in memory.

Now, `showAstData` produces a `Doc` directly, which seems to work
a lot better. As an extra bonus, the code is simpler and cleaner.
The formatting has changed a bit, as the previous ad hoc approach
didn't really match the pretty printer too well. If someone cares
enough to request adjustments, we can surely make them.

Reviewers: austin, bgamari, mpickering, alanz

Reviewed By: bgamari

Subscribers: mpickering, rwbarton, thomie

GHC Trac Issues: #14161

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

2 years agoActually bump T12150
David Feuer [Mon, 28 Aug 2017 19:33:53 +0000 (15:33 -0400)] 
Actually bump T12150

2 years agoAdjust test suite stats
David Feuer [Mon, 28 Aug 2017 18:35:19 +0000 (14:35 -0400)] 
Adjust test suite stats

T1969 and T12150 were failing (stat too high)

2 years agoFix two typos in the ImpredicativeTypes user guide
Benjamin Hodgson [Fri, 25 Aug 2017 15:22:09 +0000 (16:22 +0100)] 
Fix two typos in the ImpredicativeTypes user guide

2 years agoRip out mkUserGuidePart
Ben Gamari [Thu, 24 Aug 2017 16:49:06 +0000 (12:49 -0400)] 
Rip out mkUserGuidePart

Reviewers: austin, hvr

Subscribers: rwbarton, thomie, erikd

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

2 years agorts: Fix ASSERTs with space before opening paren
Ben Gamari [Thu, 24 Aug 2017 16:48:54 +0000 (12:48 -0400)] 
rts: Fix ASSERTs with space before opening paren

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

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

2 years agorts: Fix references to Note [BFD import library]
Ben Gamari [Thu, 24 Aug 2017 16:48:31 +0000 (12:48 -0400)] 
rts: Fix references to Note [BFD import library]

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

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

2 years agorts: Fix warnings on aarch64 and clean up style
Ben Gamari [Thu, 24 Aug 2017 16:48:19 +0000 (12:48 -0400)] 
rts: Fix warnings on aarch64 and clean up style

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

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

2 years agoAdd strict variant of iterate
Ben Gamari [Thu, 24 Aug 2017 15:47:40 +0000 (11:47 -0400)] 
Add strict variant of iterate

Summary: This closes the nearly-eight-year-old #3474.

Test Plan: Validate

Reviewers: RyanGlScott, austin, hvr

Subscribers: rwbarton, thomie

GHC Trac Issues: #3474

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

2 years agoComments, plus adjust debug print of TcTyThing(ATyVar)
Simon Peyton Jones [Wed, 2 Aug 2017 14:52:49 +0000 (15:52 +0100)] 
Comments, plus adjust debug print of TcTyThing(ATyVar)

2 years agoDon't do the RhsCtxt thing for join points
Simon Peyton Jones [Fri, 25 Aug 2017 11:52:14 +0000 (12:52 +0100)] 
Don't do the RhsCtxt thing for join points

This minor change fixes Trac #14137.

It is described in Note [Join point RHSs] in OccurAnal

2 years agoRefactor the Mighty Simplifier
Simon Peyton Jones [Fri, 25 Aug 2017 08:22:03 +0000 (09:22 +0100)] 
Refactor the Mighty Simplifier

Triggered by #12150, and the knock-on effects of join points, I did a
major refactoring of the Simplifier.  This is a big patch that change
a lot of Simplify.hs: I did a lot of other re-organisation.

The main event
~~~~~~~~~~~~~~
Since the dawn of time we have had
  simplExpr :: SimplEnv -> InExpr -> SimplCont
            -> SimplM (SimplEnv, OutExpr)

What's that SimplEnv in the result?  When simplifying an expression the
simplifier add floated let-bindings to the SimplEnv, extending the
in-scope set appropriately, and hence needs to resturn the SimplEnv at
the end.  The mode, flags, substitution in the returned SimplEnv were
all irrelevant: it was just the floating bindings.

It's strange to accumulate part of the /result/ in the /environment/
argument!  And indeed its leads to all manner of mysterious calls to
zapFloats and transferring of floats from one SimplEnv to another.
It got worse with join points, so I finally bit the bullet and refactored.
Now we have
  simplExpr :: SimplEnv -> InExpr -> SimplCont
            -> SimplM (SimplFloats, OutExpr)
  -- See Note [The big picture]
and the SimplEnv no longer has floats in it.  The code is no shorter,
but it /is/ easier to understand.

Main changes

* Remove seLetFloats field from SimplEnv

* Define new data type SimplFloats, and functions over it

* Change the types of simplExpr, simplBind, and their many variants,
  to follow the above plan

Bottoming bindings
~~~~~~~~~~~~~~~~~~
I made one other significant change in SimplUtils (not just refactoring),
related to Trac #12150 comment:16.  Given
  x = <rhs>
where <rhs> turns out to be a bottoming expression, propagate that
information to x's IdInfo immediately.  That's always good, because
it makes x be inlined less (we don't inline bottoming things), and
it allows (case x of ...) to drop the dead alterantives immediately.
Moreover, we are doing the analysis anyway, in tryEtaExpandRhs, which
calls CoreArity.findRhsArity, which already does simple bottom analysis.
So we are generating the information; all we need do is to atach the
bottoming info to the IdInfo.

See Note [Bottoming bindings]

Smaller refactoring
~~~~~~~~~~~~~~~~~~~
* Rename SimplifierMode to SimplMode
* Put DynFlags as a new field in SimplMode, to make fewer
  monadic calls to getDynFlags.
* Move the code in addPolyBind into abstractFloats
* Move the "don't eta-expand join points" into tryEtaExpandRhs

2 years agoBottoming expressions should not be expandable
Simon Peyton Jones [Fri, 25 Aug 2017 08:00:31 +0000 (09:00 +0100)] 
Bottoming expressions should not be expandable

This patch changes isExpandableApp and isWorkFreeApp to respond
False to bottoming applications.  I found that if we had

  x = undefined <dict-expr>

then prepareRhs was ANF'ing it to

  d = <dict-expr>
  x = undefined d

which is stupid (no gain); and worse it made the simplifier iterate
indefinitely.  It showed up when I started marking 'x' as a bottoming
Id more aggresssively than before; but it's been a lurking bug for
ages.

It was convenient to make isWorkFreeApp also return False for
bottoming applications, and I see no reason not to do so.

That leaves isCheapApp.  It currently replies True to bottoming
applications, but I don't see why that's good..  Something to try
later.

2 years agoRestrict exprOkForSpeculation/case to unlifted types
Simon Peyton Jones [Tue, 22 Aug 2017 12:34:31 +0000 (13:34 +0100)] 
Restrict exprOkForSpeculation/case to unlifted types

Consider
  case x of y
    DEFAULT -> let v::Int# = case y of
                               True  -> e1
                               False -> e2
                in ...

Previously this would have been ok-for-speculation because
y is evaluated.  But the binder-swap done
by SetLevels would transform the inner alternative to
     DEFAULT -> let v::Int# = case x of { ... }
                in ...)
which does /not/ satisfy the let/app invariant, because x is
not evaluated.

I don't know why this has never bitten us before, but it began
to bite when I did upcoming refactoring of the Simplifier.

So this patch narrows exprOkForSpeculation to only work for
/unlifted/ cases.

To make this work I had to make exprOkForSpeculation non-polymorphic
in the binder type, which has a little knock-on for is use in
SetLevels.

(It's annoying that we need to handle cases at all, but see
 Note [exprOkForSpeculation: case expressions])

2 years agoCNF: Implement compaction for small pointer arrays
Ben Gamari [Fri, 25 Aug 2017 01:55:27 +0000 (21:55 -0400)] 
CNF: Implement compaction for small pointer arrays

Test Plan: Validate

Reviewers: austin, erikd, simonmar, dfeuer

Reviewed By: dfeuer

Subscribers: rwbarton, andrewthad, thomie, dfeuer

GHC Trac Issues: #13860, #13857

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

2 years agoRemove typeKind from Type.hs-boot
Simon Peyton Jones [Wed, 23 Aug 2017 12:58:51 +0000 (13:58 +0100)] 
Remove typeKind from Type.hs-boot

Simple refactoring, reducing unncessary module loops

2 years agoFix defer-out-of-scope-variables
Simon Peyton Jones [Wed, 23 Aug 2017 12:55:33 +0000 (13:55 +0100)] 
Fix defer-out-of-scope-variables

In the hacky code in TcUnify.buildImplication we'd failed to account
for -fdefer-out-of-scope-variables.  See the new function
TcUnify.implicationNeeded.

Fixes Trac #14149

2 years agoBetter pretty-printing for CHoleCan
Simon Peyton Jones [Wed, 23 Aug 2017 12:48:07 +0000 (13:48 +0100)] 
Better pretty-printing for CHoleCan

Debug-only; no change in mainstream behaviour

2 years agoTypo fixed
Gabor Greif [Thu, 24 Aug 2017 10:07:36 +0000 (12:07 +0200)] 
Typo fixed

and update to the 'nofib' submodule

2 years agousers-guide: Better error messages on incomplete ghc-flag directives
Ben Gamari [Tue, 22 Aug 2017 15:51:54 +0000 (11:51 -0400)] 
users-guide: Better error messages on incomplete ghc-flag directives

2 years agoAdd support for producing position-independent executables
Ben Gamari [Tue, 22 Aug 2017 15:41:47 +0000 (11:41 -0400)] 
Add support for producing position-independent executables

Previously due to #12759 we disabled PIE support entirely. However, this
breaks the user's ability to produce PIEs. Add an explicit flag, -fPIE,
allowing the user to build PIEs.

Test Plan: Validate

Reviewers: rwbarton, austin, simonmar

Subscribers: trommler, simonmar, trofi, jrtc27, thomie

GHC Trac Issues: #12759, #13702

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

2 years agoDynFlags: Add inverse of -dno-debug-output
Ben Gamari [Tue, 22 Aug 2017 15:40:51 +0000 (11:40 -0400)] 
DynFlags: Add inverse of -dno-debug-output

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14142

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

2 years agoFixed a typo in template-haskell documentation
Benjamin Hodgson [Tue, 22 Aug 2017 12:11:43 +0000 (13:11 +0100)] 
Fixed a typo in template-haskell documentation

The documentation for `Type`'s `ForallT` constructor had a typo (pun not
intended). `ctxt` is separated from `type` in the surface syntax by a fat
arrow (`=>`), not a thin arrow (`->`).

2 years agofix typo (expreesions -> expressions)
Chris Martin [Sat, 19 Aug 2017 22:33:11 +0000 (18:33 -0400)] 
fix typo (expreesions -> expressions)

2 years agoBump haddock submodule
Ben Gamari [Tue, 22 Aug 2017 12:47:33 +0000 (08:47 -0400)] 
Bump haddock submodule

2 years agoMake law for Foldable.length explicit
Alain O'Dea [Tue, 22 Aug 2017 12:47:07 +0000 (08:47 -0400)] 
Make law for Foldable.length explicit

Test Plan: Documentation only. Not necessary.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

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

2 years agoStgLint: Allow join point bindings of unlifted type
Ben Gamari [Tue, 22 Aug 2017 12:44:47 +0000 (08:44 -0400)] 
StgLint: Allow join point bindings of unlifted type

As described in `Note [CoreSyn let/app invariant]` this is allowed.

Fixes #14117.

Test Plan: Build GHC with BuildFlavour=devel2 with -dstg-lint

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14117

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

2 years agoFix incorrect retypecheck loop in -j (#14075)
Edward Z. Yang [Tue, 22 Aug 2017 12:44:25 +0000 (08:44 -0400)] 
Fix incorrect retypecheck loop in -j (#14075)

The parallel codepath was incorrectly retypechecking the
hs-boot ModIface prior to typechecking the hs file,
which was inconsistent with the non-parallel case.  The
non-parallel case gets it right: you don't want to retypecheck
the hs-boot file itself (forwarding its declarations to hs)
because you need it to be consistently knot-tied with itself
when you compare the interfaces.

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

Reviewers: bgamari, simonpj, austin

Reviewed By: bgamari

Subscribers: duog, rwbarton, thomie

GHC Trac Issues: #14075

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

2 years agoMove validate cleaning from distclean to clean
Douglas Wilson [Tue, 22 Aug 2017 12:44:00 +0000 (08:44 -0400)] 
Move validate cleaning from distclean to clean

This bit me today: I was in validate mode without realising it and "make
clean" didn't help. I don't see a reason for this to be in distclean, as
it isn't generated by ./configure, which is the rule described in
https://ghc.haskell.org/trac/ghc/wiki/Building/Using

Test Plan: Is there a reason for this to be in distclean?

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

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

2 years agoMake the Read instance for Proxy (and friends) ignore precedence
Ryan Scott [Tue, 22 Aug 2017 13:29:07 +0000 (09:29 -0400)] 
Make the Read instance for Proxy (and friends) ignore precedence

Summary:
The `Read` instance for `Proxy`, as well as a handful of other data
types in `base` which only have a single constructor, are doing something
skeevy: they're requiring that they be surrounded by parentheses if the parsing
precedence is sufficiently high. This means that `"Thing (Proxy)"` would parse,
but not `"Thing Proxy"`. But the latter really ought to parse, since there's no
need to surround a single constructor with parentheses. Indeed, that's the
output of `show (Thing Proxy)`, so the current `Read` instance for `Proxy`
violates `read . show = id`.

The simple solution is to change `readParen (d > 10)` to `readParen False` in
the `Read` instance for `Proxy`. But given that a derived `Read` instance would
essentially accomplish the same thing, but with even fewer characters, I've
opted to just replace the hand-rolled `Read` instance with a derived one.

Test Plan: make test TEST=T12874

Reviewers: ekmett, austin, hvr, goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #12874

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

2 years agoRevise function arity mismatch errors involving TypeApplications
Ryan Scott [Tue, 22 Aug 2017 13:29:01 +0000 (09:29 -0400)] 
Revise function arity mismatch errors involving TypeApplications

Summary:
Currently, whenever you apply a function to too many arguments and
some of those arguments happen to be visible type applications, the error
message that GHC gives is rather confusing. Consider the message you receive
when typechecking `id @Int 1 2`:

```
The function `id` is applied to three arguments,
but its type `Int -> Int` has only one
```

This is baffling, since the two lines treat the visible type argument `@Int`
differently. The top line ("applied to three arguments") includes `@Int`,
whereas the bottom line ("has only one") excludes `@Int` from consideration.

There are multiple ways one could fix this, which I explain in an addendum to
`Note [Herald for matchExpectedFunTys]`. The approach adopted here is to change
the herald of this error message to include visible type arguments, and to
avoid counting them in the "applied to n arguments" part of the error. The end
result is that the new error message for `id @Int 1 2` is now:

```
The expression `id @Int` is applied to two arguments,
but its type `Int -> Int` has only one
```

Test Plan: make test TEST=T13902

Reviewers: goldfire, austin, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie

GHC Trac Issues: #13902

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

2 years agoFix #13885 by freshening reified GADT constructors' universal tyvars
Ryan Scott [Tue, 22 Aug 2017 13:28:56 +0000 (09:28 -0400)] 
Fix #13885 by freshening reified GADT constructors' universal tyvars

Summary:
When reifying GADTs with Template Haskell, the universally quantified
type variables were being reused across both the data type head and the
constructors' type signatures. This had the annoying effect of causing sets
of differently scoped variables to have the same uniques. To avoid this, we
now freshen the universal tyvars before reifying the constructors so as to
ensure they have distinct uniques.

Test Plan: make test TEST=T13885

Reviewers: goldfire, austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #13885

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

2 years agoFix #14114 by checking for duplicate vars on pattern synonym RHSes
Ryan Scott [Tue, 22 Aug 2017 13:28:49 +0000 (09:28 -0400)] 
Fix #14114 by checking for duplicate vars on pattern synonym RHSes

Summary:
Because we weren't checking for duplicate variables on the right-hand
sides of pattern synonyms, bogus definitions like this one passed the renamer:

```lang=haskell
pattern Foo a <- (a,a)
```

Luckily, the fix is simple.

Test Plan: make test TEST=T14114

Reviewers: mpickering, austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie

GHC Trac Issues: #14114

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

2 years agoFix #14125 by normalizing data family instances more aggressively
Ryan Scott [Tue, 22 Aug 2017 13:28:43 +0000 (09:28 -0400)] 
Fix #14125 by normalizing data family instances more aggressively

Summary:
Commit 3540d1e1a23926ce0a8a6ae83a36f5f6b2497ccf inadvertently broke
the ability for newtype instances to be used as marshallable types in FFI
declarations. The reason is a bit silly: an extra check was added for type
synonyms with no type families on the RHS in `normalise_tc_app`, but this check
would only skip over type families, not //data// families, since the predicate
being used was `not . isTypeFamilyCon`.

The fix is simple: just use `not . isFamilyCon` instead so that data families
are also skipped by this check.

Test Plan: make test TEST=T14125

Reviewers: goldfire, simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14125

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

2 years agoFix loading of dlls on 32bit windows
Sergey Vinokurov [Sun, 20 Aug 2017 21:40:08 +0000 (00:40 +0300)] 
Fix loading of dlls on 32bit windows

The point of fix is to handle case when loaded dll loads no
other dlls, i.e. it's import table is empty.

GHC Trac Issues: #14081