ghc.git
2 years agoOption "-ddump-rn-ast" dumps imports and exports too
Alan Zimmerman [Wed, 13 Sep 2017 12:02:42 +0000 (14:02 +0200)] 
Option "-ddump-rn-ast" dumps imports and exports too

Summary:
Previously the renamed source decls only were dumped, now the imports, exports
and doc_hdr are too.

Test Plan: ./validate

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #14197

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

2 years agoAdd non-ASCII isLetter True example
Chris Martin [Thu, 7 Sep 2017 02:36:03 +0000 (22:36 -0400)] 
Add non-ASCII isLetter True example

2 years agoFix @since annotations in GHC.Stats
Dmitry Ivanov [Tue, 12 Sep 2017 07:18:16 +0000 (09:18 +0200)] 
Fix @since annotations in GHC.Stats

2 years agoMake IntPtr and WordPtr as instance of Data.Data typeclass, fix #13115
HE, Tao [Wed, 13 Sep 2017 12:26:32 +0000 (08:26 -0400)] 
Make IntPtr and WordPtr as instance of Data.Data typeclass, fix #13115

Test Plan: ./validate

Reviewers: austin, hvr, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, thomie

GHC Trac Issues: #13115

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

2 years ago[RTS] Harden against buffer overflow
Bartosz Nitka [Wed, 13 Sep 2017 12:28:00 +0000 (08:28 -0400)] 
[RTS] Harden against buffer overflow

This sprintf is safe thanks to the guarantees on the format strings that
we pass to it.  Well, almost. The GR_FILENAME_FMT_GUM format would not
have satisfied them if it was still used.

If someone makes a mistake that's a potential privilege escalation,
so I think it's reasonable to switch to snprintf to protect against
that remote possibility.

Test Plan: it builds, CI

Reviewers: simonmar, bgamari, austin, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie

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

2 years agoUse ar for -staticlib
Moritz Angermann [Wed, 13 Sep 2017 12:24:46 +0000 (08:24 -0400)] 
Use ar for -staticlib

Hopefully we can get rid of libtool, by using ar only

Depends on:  D3579

Test Plan: validate

Reviewers: austin, hvr, bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie, erikd

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

2 years agoClarify Data.Data documentation
David Feuer [Wed, 13 Sep 2017 12:22:42 +0000 (08:22 -0400)] 
Clarify Data.Data documentation

Explain much more clearly when `dataCast1` and `dataCast2` can
have non-trivial implementations. On a couple different occasions,
I have attempted to write better defaults for these, only to
discover that we can't really do that. The new documentation
implicitly explains why that is.

[skip ci]

Reviewers: austin, hvr, bgamari, angerman

Reviewed By: bgamari, angerman

Subscribers: angerman, rwbarton, thomie

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

2 years agoDriverMkDepend: Kill redundant import
Ben Gamari [Wed, 13 Sep 2017 12:22:20 +0000 (08:22 -0400)] 
DriverMkDepend: Kill redundant import

Reviewers: austin

Subscribers: rwbarton, thomie

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

2 years agorts: Print message before SIGUSR2 backtrace
Ben Gamari [Wed, 13 Sep 2017 12:21:20 +0000 (08:21 -0400)] 
rts: Print message before SIGUSR2 backtrace

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

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

2 years agoAdd regression test for #14209
Ryan Scott [Wed, 13 Sep 2017 13:37:24 +0000 (09:37 -0400)] 
Add regression test for #14209

Summary:
Commit 0257dacf228024d0cc6ba247c707130637a25580
(`Refactor bindHsQTyVars and friends`) ended up fixing #14209. Let's
add a regression test so that it stays fixed.

Test Plan: make test TEST=T14209

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #14209

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

2 years agoCheck if -XStaticPointers is enabled when renaming static expressions
Ryan Scott [Wed, 13 Sep 2017 13:37:13 +0000 (09:37 -0400)] 
Check if -XStaticPointers is enabled when renaming static expressions

Summary:
Trying to use `static` expressions without the `-XStaticPointers`
extension enabled can lead to runtime errors. Normally, such a situation isn't
possible, but Template Haskell provides a backdoor that allows it to happen,
as shown in #14204.

To prevent this, we ensure that `-XStaticPointers` is enabled when renaming
`static` expressions.

Test Plan: make test TEST=T14204

Reviewers: facundominguez, austin, bgamari, simonpj

Reviewed By: facundominguez, simonpj

Subscribers: simonpj, rwbarton, thomie

GHC Trac Issues: #14204

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

2 years agoAdd a test for #14140
David Feuer [Tue, 12 Sep 2017 21:21:46 +0000 (17:21 -0400)] 
Add a test for #14140

This issue seems to have been fixed by
193664d42dbceadaa1e4689dfa17ff1cf5a405a0 (Re-engineer caseRules
to add tagToEnum/dataToTag) but I don't think anyone realized
that.

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14140

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

2 years agoAllow CSE'ing of work-wrapped bindings (#14186)
Joachim Breitner [Sun, 10 Sep 2017 15:10:37 +0000 (16:10 +0100)] 
Allow CSE'ing of work-wrapped bindings (#14186)

the worker/wrapper creates an artificial INLINE pragma, which caused CSE
to not do its work. We now recognize such artificial pragmas by using
`NoUserInline` instead of `Inline` as the `InlineSpec`.

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

2 years agoAdd testcase for #14186
Joachim Breitner [Sun, 10 Sep 2017 14:49:43 +0000 (15:49 +0100)] 
Add testcase for #14186

and move the generally useful helpers check_errmsg and grep_errmsg to
testlib.py. Some documentation can be found on
https://ghc.haskell.org/trac/ghc/wiki/Building/RunningTests/Adding

2 years agoRetire cabal_macros_boot.h hack
Herbert Valerio Riedel [Sat, 9 Sep 2017 15:37:03 +0000 (17:37 +0200)] 
Retire cabal_macros_boot.h hack

I originally introduced this hack 3 years ago in
b0379819e46796047c1574a6abccf186afd27afa, and finally we can
retire it because starting with GHC 8.0 (which is the minimum
required version to bootstrap GHC 8.4) these macros are generated
natively by GHC.

2 years agoCanonicalise MonoidFail instances in GHC
Herbert Valerio Riedel [Sat, 9 Sep 2017 14:29:23 +0000 (16:29 +0200)] 
Canonicalise MonoidFail instances in GHC

IOW, code compiles -Wnoncanonical-monoidfail-instances clean now

This is easy now since we require GHC 8.0/base-4.9 or later
for bootstrapping.

Note that we can easily enable `MonadFail` via

  default-extensions: MonadFailDesugaring

in compiler/ghc.cabal.in

which currently would point out that NatM doesn't have
a proper `fail` method, even though failable patterns
are made use of:

  compiler/nativeGen/SPARC/CodeGen.hs:425:25: error:
    * No instance for (Control.Monad.Fail.MonadFail NatM)
        arising from a do statement
        with the failable pattern ‘(dyn_c, [dyn_r])’

2 years agoCanonicalise Monoid instances in GHC
Herbert Valerio Riedel [Sat, 9 Sep 2017 11:47:08 +0000 (13:47 +0200)] 
Canonicalise Monoid instances in GHC

IOW, code compiles -Wnoncanonical-monoid-instances clean now

2 years agoRemove makefile logic for legacy -this-package-key
Herbert Valerio Riedel [Sat, 9 Sep 2017 12:25:30 +0000 (14:25 +0200)] 
Remove makefile logic for legacy -this-package-key

This isn't needed anymore as we don't support GHC < 8 anymore.

This is a follow-up to 122f183

2 years agoRemove now redundant cabal conditionals in {ghc,template-haskell}.cabal
Herbert Valerio Riedel [Sat, 9 Sep 2017 10:15:00 +0000 (12:15 +0200)] 
Remove now redundant cabal conditionals in {ghc,template-haskell}.cabal

In the past we needed the construct below for wired-in packages,
but since GHC 8.0 (which we require at least for stage0 now) the CLI has
stabilised, so we can unconditionally use `-this-unit-id` since GHC 8.0.

    if impl( ghc >= 7.11 )
ghc-options:  -this-unit-id template-haskell
    else
if impl( ghc >= 7.9 )
    ghc-options:  -this-package-key template-haskell
else
    ghc-options:  -package-name template-haskell

2 years agoRemove now redundant CPP
Herbert Valerio Riedel [Sat, 9 Sep 2017 08:53:56 +0000 (10:53 +0200)] 
Remove now redundant CPP

Resulting from requiring to boot with GHC 8.0 or later

2 years agoBump T783 expected allocations
Ben Gamari [Sat, 9 Sep 2017 00:08:20 +0000 (20:08 -0400)] 
Bump T783 expected allocations

2 years agoDeal with unbreakable blocks in Applicative Do
David Feuer [Fri, 8 Sep 2017 03:56:35 +0000 (23:56 -0400)] 
Deal with unbreakable blocks in Applicative Do

The renamer wasn't able to deal with more than a couple strict
patterns in a row with `ApplicativeDo` when using the heuristic
splitter. Update it to work with them properly.

Reviewers: simonmar, austin, bgamari, hvr

Reviewed By: simonmar

Subscribers: RyanGlScott, lippling, rwbarton, thomie

GHC Trac Issues: #14163

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

2 years agoDrop special handling of iOS and Android
Moritz Angermann [Fri, 8 Sep 2017 02:52:27 +0000 (22:52 -0400)] 
Drop special handling of iOS and Android

As far as GHC is concerned, iOS **is** Darwin, and
Android **is** Linux.

Depends on D3352

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: Ericson2314, ryantrinkle, rwbarton, thomie, erikd

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

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