ghc.git
22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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...

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

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

22 months 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

22 months 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

22 months 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.

22 months 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

22 months 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.

22 months 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...

22 months 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

22 months 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

22 months 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.

22 months 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

22 months 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.

22 months 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.

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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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.

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

22 months 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

22 months 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.

22 months 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.

22 months 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.

22 months 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

22 months 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

22 months 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

22 months 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

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

22 months 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)

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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)

22 months 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

22 months 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

22 months 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.

22 months 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])

22 months 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

22 months 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

22 months 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

22 months 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

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

and update to the 'nofib' submodule

22 months 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

22 months 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

22 months 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

22 months 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 (`->`).

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

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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

22 months 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

23 months 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

23 months agoRevert "Add strict variant of iterate"
Ben Gamari [Sat, 19 Aug 2017 11:44:13 +0000 (07:44 -0400)] 
Revert "Add strict variant of iterate"

This was not ready to commit.
This reverts commit 8e5b6ec6566da57d15b0810a07902d9eac85cb79.

23 months agoCorrect incorrect free in PE linker
Tamar Christina [Sat, 19 Aug 2017 07:31:34 +0000 (08:31 +0100)] 
Correct incorrect free in PE linker

Summary:
The big-obj support (D3523) had introduced an early free on
the info structure. Because the pointer is not NULL'd
and the default of all the utility functions was to the
standard object format, it all kept working.

The one big-obj test that exists was subjected to a timing issue.
usually the test ran quickly enough that the allocator hasn't
had time to reclaim the memory yet, so it still passed.

This corrects it. Also as it so happens, static LLVM libraries
from mingw-w64 are compiled using big-obj.

Test Plan: ./validate

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #13815, #13093

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

23 months agoAdd strict variant of iterate
Ben Gamari [Fri, 18 Aug 2017 14:24:58 +0000 (10:24 -0400)] 
Add strict variant of iterate

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

23 months agousers_guide: Convert mkUserGuidePart generation to a Sphinx extension
Patrick Dougherty [Fri, 18 Aug 2017 13:20:07 +0000 (09:20 -0400)] 
users_guide: Convert mkUserGuidePart generation to a Sphinx extension

This removes all dependencies the users guide had on `mkUserGuidePart`.
The generation of the flag reference table and the various pieces of the
man page is now entirely contained within the Spinx extension
`flags.py`. You can see the man page generation on the orphan page
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghc.html

The extension works by collecting all of the meta-data attached to the
`ghc-flag` directives and then formatting and displaying it at
`flag-print` directives. There is a single printing directive that can
be customized with two options, what format to display (table, list, or
block of flags) and an optional category to limit the output to
(verbosity, warnings, codegen, etc.).

New display formats can be added by creating a function
`generate_flag_xxx` (where `xxx` is a description of the format) which
takes a list of flags and a category and returns a new `xxx`. Then just
add a reference in the dispatch table `handlers`. That display can now
be run by passing `:type: xxx` to the `flag-print` directive.

`flags.py` contains two maps of settings that can be adjusted. The first
is a canonical list of flag categories, and the second sets default
categories for files.

The only functionality that Sphinx could not replace was the
`what_glasgow_exts_does.gen.rst` file. `mkUserGuidePart` actually just
reads the list of flags from `compiler/main/DynFlags.hs` which Sphinx
cannot do. As the flag is deprecated, I added the list as a static file
which can be updated manually.

Additionally, this patch updates every single documented flag with the
data from `mkUserGuidePart` to generate the reference table.

Fixes #11654 and, incidentally, #12155.

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #11654, #12155

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

23 months agoEnable -Wcpp-undef for GHC and runtime system
Ben Gamari [Fri, 18 Aug 2017 12:37:14 +0000 (08:37 -0400)] 
Enable -Wcpp-undef for GHC and runtime system

This gets us much of the benefit of enabling it globally, which avoiding
(at least for now) the pain of making the core libraries build as well.
See #13636.

Test Plan: Validate

Reviewers: erikd, austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #13636

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

23 months agoDoctests for Data.Tuple
David Luposchainsky [Fri, 11 Aug 2017 08:37:55 +0000 (10:37 +0200)] 
Doctests for Data.Tuple

23 months agoTest Trac #14110
Simon Peyton Jones [Fri, 18 Aug 2017 13:50:57 +0000 (14:50 +0100)] 
Test Trac #14110

23 months agoComments only
Simon Peyton Jones [Fri, 18 Aug 2017 08:02:13 +0000 (09:02 +0100)] 
Comments only

23 months agoTracing in OccAnal (commented out)
Simon Peyton Jones [Wed, 2 Aug 2017 14:56:32 +0000 (15:56 +0100)] 
Tracing in OccAnal (commented out)

23 months agoRestrict Lint's complaints about recursive INLINEs somewhat
Simon Peyton Jones [Wed, 2 Aug 2017 08:48:58 +0000 (09:48 +0100)] 
Restrict Lint's complaints about recursive INLINEs somewhat

This patch makes the Lint warning about recursive functions with an
INLINE only apply if there is a stable unfolding.  If not (e.g. some
other pass took it out) we don't need to worry.  Not a big deal.

23 months agoComments about GlobalRdrEnv shadowing
Simon Peyton Jones [Tue, 1 Aug 2017 11:07:34 +0000 (12:07 +0100)] 
Comments about GlobalRdrEnv shadowing

Provoked by Trac #14052

23 months agoCSE.cseOneExpr: Set InScopeSet correctly
Joachim Breitner [Fri, 18 Aug 2017 12:14:19 +0000 (14:14 +0200)] 
CSE.cseOneExpr: Set InScopeSet correctly

because this is a convenience function for API users, calculate the
in-scope set from `exprFreeVars`.

23 months agotestsuite: Add test for #13916
Ben Gamari [Thu, 17 Aug 2017 14:32:58 +0000 (10:32 -0400)] 
testsuite: Add test for #13916

Reviewers: austin

Subscribers: rwbarton, thomie

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

23 months agoMake function intToSBigNat# preserve sign (fixes #14085)
Olivier Chéron [Thu, 17 Aug 2017 14:32:28 +0000 (10:32 -0400)] 
Make function intToSBigNat# preserve sign (fixes #14085)

Impacts only functions gcdExtInteger, powModInteger and
recipModInteger which gave invalid results on negative S# inputs.

Also fixes gcdExtInteger assertion when first argument is negative.

Test Plan: Updated test case integerGmpInternals

Reviewers: austin, hvr, goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #14085

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

23 months agoRemove unneeded reqlibs for mtl and parsec in the GHC testsuite
Ryan Scott [Thu, 17 Aug 2017 14:31:26 +0000 (10:31 -0400)] 
Remove unneeded reqlibs for mtl and parsec in the GHC testsuite

Now that `mtl` and `parsec` are boot libraries, there's no need to
qualify various tests in the testsuite with `reqlib('mtl')` or
`reqlib('parsec')`.

Test Plan: make test TEST="T4809 tcfail126 T4355 tc232 tc223 tc220
tc217 tc183 T5303 DoParamM qq005 qq006 galois_raytrace T1074 mod133
T3787 T4316 prog011 drvfail006 drvfail008"

Reviewers: bgamari, austin

Subscribers: rwbarton, thomie

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