ghc.git
8 months ago[TTG: Handling Source Locations] Foundation and Pat (Part 2) wip/shnajd-TTG-SrcLocs
Shayan-Najd [Fri, 9 Nov 2018 19:29:49 +0000 (19:29 +0000)] 
[TTG: Handling Source Locations] Foundation and Pat (Part 2)
- Fixing a bug

8 months agoRebasing
Shayan-Najd [Thu, 8 Nov 2018 22:13:58 +0000 (22:13 +0000)] 
Rebasing

8 months agoMerge branch 'master' of git://github.com/ghc/ghc into wip/shnajd-TTG-SrcLocs
Shayan-Najd [Thu, 8 Nov 2018 22:12:48 +0000 (22:12 +0000)] 
Merge branch 'master' of git://github.com/ghc/ghc into wip/shnajd-TTG-SrcLocs

8 months ago[TTG: Handling Source Locations] Foundation and Pat
Shayan-Najd [Thu, 8 Nov 2018 22:09:13 +0000 (22:09 +0000)] 
[TTG: Handling Source Locations] Foundation and Pat
Trac Issue: #15495
This patch removes the ping-pong style from `HsPat` (only, for now), using the plan laid out at https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/HandlingSourceLocations (solution A).

- the class `HasSrcSpan`, and its functions (e.g., `cL` and `dL`), are introduced
- some instances of `HasSrcSpan` are introduced
- some constructors `L` are replaced with `cL`
- some patterns `L` are replaced with `dL` view pattern
- some type annotation are necessarily updated updated (e.g., `Pat p` --> `Pat (GhcPass p)`)

8 months agoFix #15845 by defining etaExpandFamInstLHS and using it
Ryan Scott [Thu, 8 Nov 2018 15:26:48 +0000 (10:26 -0500)] 
Fix #15845 by defining etaExpandFamInstLHS and using it

Summary:
Both #9692 and #14179 were caused by GHC being careless
about using eta-reduced data family instance axioms. Each of those
tickets were fixed by manually whipping up some code to eta-expand
the axioms. The same sort of issue has now caused #15845, so I
figured it was high time to factor out the code that each of these
fixes have in common.

This patch introduces the `etaExpandFamInstLHS` function, which takes
a family instance's type variables, LHS types, and RHS type, and
returns type variables and LHS types that have been eta-expanded if
necessary, in the case of a data family instance. (If it's a type
family instance, `etaExpandFamInstLHS` just returns the supplied type
variables and LHS types unchanged).

Along the way, I noticed that many references to
`Note [Eta reduction for data families]` (in `FamInstEnv`) had
slightly bitrotted (they either referred to a somewhat different
name, or claimed that the Note lived in a different module), so
I took the liberty of cleaning those up.

Test Plan: make test TEST="T9692 T15845"

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15845

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

8 months agotestsuite: Save performance metrics in git notes.
David Eichmann [Wed, 7 Nov 2018 17:02:47 +0000 (12:02 -0500)] 
testsuite: Save performance metrics in git notes.

This patch makes the following improvement:
  - Automatically records test metrics (per test environment) so that
    the programmer need not supply nor update expected values in *.T
    files.
    - On expected metric changes, the programmer need only indicate the
      direction of change in the git commit message.
  - Provides a simple python tool "perf_notes.py" to compare metrics
    over time.

Issues:
  - Using just the previous commit allows performance to drift with each
    commit.
    - Currently we allow drift as we have a preference for minimizing
      false positives.
    - Some possible alternatives include:
      - Use metrics from a fixed commit per test: the last commit that
        allowed a change in performance (else the oldest metric)
      - Or use some sort of aggregate since the last commit that allowed
        a change in performance (else all available metrics)
      - These alternatives may result in a performance issue (with the
        test driver) having to heavily search git commits/notes.
  - Run locally, performance tests will trivially pass unless the tests
    were run locally on the previous commit. This is often not the case
    e.g.  after pulling recent changes.

Previously, *.T files contain statements such as:
```
stats_num_field('peak_megabytes_allocated', (2, 1))
compiler_stats_num_field('bytes allocated',
                         [(wordsize(64), 165890392, 10)])
```
This required the programmer to give the expected values and a tolerance
deviation (percentage). With this patch, the above statements are
replaced with:
```
collect_stats('peak_megabytes_allocated', 5)
collect_compiler_stats('bytes allocated', 10)
```
So that programmer must only enter which metrics to test and a tolerance
deviation. No expected value is required. CircleCI will then run the
tests per test environment and record the metrics to a git note for that
commit and push them to the git.haskell.org ghc repo. Metrics will be
compared to the previous commit. If they are different by the tolerance
deviation from the *.T file, then the corresponding test will fail. By
adding to the git commit message e.g.
```
 # Metric (In|De)crease <metric(s)> <options>: <tests>
Metric Increase ['bytes allocated', 'peak_megabytes_allocated'] \
         (test_env='linux_x86', way='default'):
    Test012, Test345
Metric Decrease 'bytes allocated':
    Test678
Metric Increase:
    Test711
```
This will allow the noted changes (letting the test pass). Note that by
omitting metrics or options, the change will apply to all possible
metrics/options (i.e. in the above, an increase for all metrics in all
test environments is allowed for Test711)

phabricator will use the message in the description

Reviewers: bgamari, hvr

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #12758

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

8 months agoRevert "CircleCI: Build DWARF-enabled Linux bindists"
Ben Gamari [Wed, 7 Nov 2018 14:17:59 +0000 (09:17 -0500)] 
Revert "CircleCI: Build DWARF-enabled Linux bindists"

This reverts commit 406978c478e4b14e677f396499420d7b8e5d21fd.

8 months agoRevert "Multiple fixes / improvements for LLVM backend"
Ben Gamari [Wed, 7 Nov 2018 13:06:18 +0000 (08:06 -0500)] 
Revert "Multiple fixes / improvements for LLVM backend"

This reverts commit adcb5fb47c0942671d409b940d8884daa9359ca4.

8 months agoRevert "Fix for T14251 on ARM"
Ben Gamari [Wed, 7 Nov 2018 13:05:34 +0000 (08:05 -0500)] 
Revert "Fix for T14251 on ARM"

This reverts commit d8495549ba9d194815c2d0eaee6797fc7c00756a.

8 months ago[LlvmCodeGen] Fixes for Int8#/Word8#
Michal Terepeta [Wed, 7 Nov 2018 13:03:16 +0000 (08:03 -0500)] 
[LlvmCodeGen] Fixes for Int8#/Word8#

This fixes two isssues:

- Using bitcast for MO_XX_Conv
  Arguments to a bitcast must be of the same size. We should be using
  `trunc` and `zext` instead.

- Using unsupported MO_*_QuotRem for LLVM
  The two primops `MO_*_QuotRem` are not supported by the LLVM backend,
so
  we shouldn't use them for `Int8#`/`Word8#` (just as we do not use
them for
  `Int#`/`Word#`).

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
Test Plan: manually run tests with WAY=llvm

Reviewers: bgamari, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15864

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

8 months agoCircleCI: Build DWARF-enabled Linux bindists
Ben Gamari [Mon, 5 Nov 2018 18:45:59 +0000 (13:45 -0500)] 
CircleCI: Build DWARF-enabled Linux bindists

8 months agoBump directory submodule to 1.3.3.1
Ben Gamari [Mon, 5 Nov 2018 17:06:58 +0000 (12:06 -0500)] 
Bump directory submodule to 1.3.3.1

8 months agointeger-gmp: Fix TBA in changelog
Ben Gamari [Fri, 2 Nov 2018 15:48:05 +0000 (11:48 -0400)] 
integer-gmp: Fix TBA in changelog

8 months agoActually add test for #15859.
Richard Eisenberg [Tue, 6 Nov 2018 03:51:58 +0000 (22:51 -0500)] 
Actually add test for #15859.

Oops. Forgot to `git add`.

8 months agoFix #15859 by checking, not assuming, an ArgFlag
Richard Eisenberg [Mon, 5 Nov 2018 16:01:47 +0000 (11:01 -0500)] 
Fix #15859 by checking, not assuming, an ArgFlag

We thought that visible dependent quantification was impossible
in terms, but Iceland Jack discovered otherwise in #15859. This fixes an
ASSERT failure that arose.

test case: dependent/should_fail/T15859

8 months agoFix for Trac #15611: Scope errors lie about what modules are imported.
roland [Sun, 4 Nov 2018 15:45:29 +0000 (16:45 +0100)] 
Fix for Trac #15611: Scope errors lie about what modules are imported.

Summary:
For the error message:
    Not in scope X.Y
    Module X does not export Y
    No module named ‘X’ is imported:
there are 2 cases, where we don't show the last "no module named is imported" line:
1. If the module X has been imported.
2. If the module X is the current module. There are 2 subcases:

   2.1 If the unknown module name is in a input source file,
       then we can use the getModule function to get the current module name.

   2.2 If the unknown module name has been entered by the user in GHCi,
       then the getModule function returns something like "interactive:Ghci1",
       and we have to check the current module in the last added entry of
       the HomePackageTable.

Test Plan: make test TESTS="T15611a T15611b"

Reviewers: monoidal, hvr, thomie, dfeuer, bgamari, DavidEichmann

Reviewed By: monoidal, DavidEichmann

Subscribers: rwbarton, carter

GHC Trac Issues: #15611

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

8 months agoAdd Int8# and Word8#
Michal Terepeta [Fri, 2 Nov 2018 18:27:03 +0000 (14:27 -0400)] 
Add Int8# and Word8#

This is the first step of implementing:
https://github.com/ghc-proposals/ghc-proposals/pull/74

The main highlights/changes:

    primops.txt.pp gets two new sections for two new primitive types for
    signed and unsigned 8-bit integers (Int8# and Word8 respectively) along
    with basic arithmetic and comparison operations. PrimRep/RuntimeRep get
    two new constructors for them. All of the primops translate into the
    existing MachOPs.

    For CmmCalls the codegen will now zero-extend the values at call
    site (so that they can be moved to the right register) and then truncate
    them back their original width.

    x86 native codegen needed some updates, since it wasn't able to deal
    with the new widths, but all the changes are quite localized. LLVM
    backend seems to just work.

This is the second attempt at merging this, after the first attempt in
D4475 had to be backed out due to regressions on i386.

Bumps binary submodule.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
Test Plan: ./validate (on both x86-{32,64})

Reviewers: bgamari, hvr, goldfire, simonmar

Subscribers: rwbarton, carter

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

8 months agorts: Add FALLTHROUGH macro
Ben Gamari [Fri, 2 Nov 2018 18:25:27 +0000 (14:25 -0400)] 
rts: Add FALLTHROUGH macro

Instead of using the GCC `/* fallthrough */` syntax we now use the
`__attribute__((fallthrough))`, which Phyx says should be more portable
than the former.

Also adds a missing fallthrough annotation in the MachO linker,
fixing #14613.

Reviewers: erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #14613

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

8 months agorts: Allow output filename of eventlog to be given by command-line
Ben Gamari [Fri, 2 Nov 2018 18:24:12 +0000 (14:24 -0400)] 
rts: Allow output filename of eventlog to be given by command-line

This introduces the `+RTS -ol` flag, which allows user to specify the
destination file for eventlog output.

Test Plan: Validate with included test

Reviewers: simonmar, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

8 months agobase: Improve haddocks for Functor
Simon Jakobi [Wed, 24 Oct 2018 10:40:36 +0000 (12:40 +0200)] 
base: Improve haddocks for Functor

8 months agobase: Misc haddock fixes
Simon Jakobi [Tue, 23 Oct 2018 14:29:13 +0000 (16:29 +0200)] 
base: Misc haddock fixes

(cherry picked from commit ee545ff44e0ba9a165de40807548c75bf181dda3)

8 months agoBump time submodule
Ben Gamari [Mon, 29 Oct 2018 21:15:40 +0000 (17:15 -0400)] 
Bump time submodule

8 months agousers-guide: Update link to Safe Coercions paper
Ben Gamari [Fri, 2 Nov 2018 16:43:25 +0000 (12:43 -0400)] 
users-guide: Update link to Safe Coercions paper

Fixes #15841.

8 months agoMove eta-reduced coaxiom compatibility handling quirks into FamInstEnv.
mniip [Thu, 1 Nov 2018 22:33:10 +0000 (18:33 -0400)] 
Move eta-reduced coaxiom compatibility handling quirks into FamInstEnv.

The quirk caused an issue where GHC concluded that 'D' is possibly
unifiable with 'D a' (the two types could have the same kind if D is a
data family).

Test Plan:
Ensure T9371 stays fixed.
Introduce T15704

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #15704

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

8 months agoAdd built-in syntax suggestions, and refactor to allow library use
Matthías Páll Gissurarson [Thu, 1 Nov 2018 22:32:32 +0000 (18:32 -0400)] 
Add built-in syntax suggestions, and refactor to allow library use

Summary:
This change to the valid hole fits adds built-in syntax candidates (like (:) and []),
so that they are checked in addition to what is in scope.

The rest is merely a refactor and export of the functions used to find the valid
hole fits, since there was interest at ICFP to use the valid hole fit machinery for
additional uses. By exporting the `tcFilterHoleFits` function, this can now be done
without having to rely on parsing the actual error message.

Test Plan: Test for built-in syntax included

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, rwbarton, carter

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

8 months agohadrian: build ghc-iserv-prof in addition to ghc-iserv
Alp Mestanogullari [Thu, 1 Nov 2018 22:31:46 +0000 (18:31 -0400)] 
hadrian: build ghc-iserv-prof in addition to ghc-iserv

As it is required for 10+ tests.

Hadrian didn't give us a chance to build a given executable in vanilla
and profiling, simultaneously, under two different names. This patch
implements support for this in general and applies it to
ghc-iserv[-prof].

Test Plan: scc001 fails without this patch, passes with it.

Reviewers: snowleopard, bgamari

Reviewed By: bgamari

Subscribers: simonpj, ndmitchell, simonmar, rwbarton, carter

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

8 months agousers-guide: Fix formatting of eventlog format documentation
Ben Gamari [Thu, 1 Nov 2018 22:31:33 +0000 (18:31 -0400)] 
users-guide: Fix formatting of eventlog format documentation

Test Plan: Read it

Reviewers: mpickering

Reviewed By: mpickering

Subscribers: rwbarton, carter

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

8 months agoData.Maybe: add callstack for fromJust (Trac #15559)
Fangyi Zhou [Thu, 1 Nov 2018 22:21:23 +0000 (18:21 -0400)] 
Data.Maybe: add callstack for fromJust (Trac #15559)

Per feature request, add `HasCallStack` to `fromJust` in `Data.Maybe`
and use `error` instead of `errorWithoutStackTrace`. This allows
`fromJust` to print call stacks when throwing the error.

Also add a new test case for the behaviour, modify existing test cases
for new signature

Test Plan: New test cases

Reviewers: hvr, bgamari

Reviewed By: bgamari

Subscribers: ulysses4ever, rwbarton, carter

GHC Trac Issues: #15559

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

8 months agoLower precedence for {-# UNPACK #-}
Vladislav Zavialov [Thu, 1 Nov 2018 22:20:57 +0000 (18:20 -0400)] 
Lower precedence for {-# UNPACK #-}

Test Plan: Validate

Reviewers: goldfire, bgamari

Subscribers: osa1, mpickering, rwbarton, carter

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

8 months agoDon't lint erroneous programs.
Richard Eisenberg [Thu, 1 Nov 2018 22:03:21 +0000 (18:03 -0400)] 
Don't lint erroneous programs.

newFamInst lints its types. This is good. But it's not so good
when there have been errors and thus recovery tycons are about.
So we now don't.

Fixes #15796.

Test case: typecheck/should_fail/T15796

8 months agoActually fail in failIfEmitsConstraints
Richard Eisenberg [Thu, 1 Nov 2018 19:37:58 +0000 (15:37 -0400)] 
Actually fail in failIfEmitsConstraints

The function TcHsType.failIfEmitsConstraints says that it fails.
It even does so in its name. But it didn't! It *reported* constraints
but didn't fail. Now it does.

This is important in tcHsClsInstType; see the comments therein.

This was discovered while looking at #15797, but that ticket
requires visible kind application to exhibit the bug; the test
case will come with the patch for #12045.

8 months agoFix embarrassing, egregious bug in roles of (->)
Richard Eisenberg [Thu, 1 Nov 2018 19:07:36 +0000 (15:07 -0400)] 
Fix embarrassing, egregious bug in roles of (->)

Previously, I had inexplicably decided that (->)'s roles
were all Representational. But, of course, its first two
parameters are *dependent* RuntimeReps. All dependent parameters
have a Nominal role, because all roles in kinds are Nominal.

Fix is easy, but I have no idea how the world hasn't come
crashing down before now.

This was found while investigating #15801, which requires
visible type application in types to observe. Hence, the test
case will come with the main patch for #12045.

8 months agoRevert "Add a RTS option -xp to load PIC object anywhere in address space"
Ben Gamari [Wed, 31 Oct 2018 00:38:24 +0000 (20:38 -0400)] 
Revert "Add a RTS option -xp to load PIC object anywhere in address space"

This reverts commit 5403a8636fe82f971234873564f3a05393b89b7a.

8 months agoRevert "Allocate bss section within proper range of other sections"
Ben Gamari [Tue, 30 Oct 2018 18:47:53 +0000 (14:47 -0400)] 
Revert "Allocate bss section within proper range of other sections"

This reverts commit e019ec94f12268dd92ea5d5204e9e57e7ebf10ca.

This sadly breaks the external interpreter on i386.

For instance, see https://circleci.com/gh/ghc/ghc/10925.

8 months agoFix docs typo in Bitraversable composition law
Mark Seemann [Tue, 30 Oct 2018 09:02:42 +0000 (10:02 +0100)] 
Fix docs typo in Bitraversable composition law

(cherry picked from commit 7c2bcc00e22ca8cebd9ffb2ee1741a86a5c4ebb9)

8 months agocircleci: Store test results of slow validation builds
Ben Gamari [Tue, 30 Oct 2018 17:47:53 +0000 (13:47 -0400)] 
circleci: Store test results of slow validation builds

8 months agoAdd second test case for #15592
Ryan Scott [Tue, 30 Oct 2018 14:49:59 +0000 (10:49 -0400)] 
Add second test case for #15592

This adds a program from
https://ghc.haskell.org/trac/ghc/ticket/15592#comment:9 (which
briefly refused to typecheck on GHC HEAD) as a test case.

8 months agoRevert "Bump time submodule"
Ben Gamari [Tue, 30 Oct 2018 14:03:49 +0000 (10:03 -0400)] 
Revert "Bump time submodule"

This reverts commit 0bdbbd4a637b169aa7043e0d9898ad1ecd5d14ef.

8 months agoBump time submodule
Ben Gamari [Mon, 29 Oct 2018 21:15:40 +0000 (17:15 -0400)] 
Bump time submodule

8 months agoCorrectly detect GIT in a subtree
Sylvain Henry [Mon, 29 Oct 2018 18:02:45 +0000 (19:02 +0100)] 
Correctly detect GIT in a subtree

When we use a git subtree, .git is a file, not a directory.
The script was already fixed for the commit ID but not for its date.

PR: https://github.com/ghc/ghc/pull/212/

8 months agocircleci: Build with in-tree GMP on Darwin
Ben Gamari [Wed, 17 Oct 2018 19:31:36 +0000 (15:31 -0400)] 
circleci: Build with in-tree GMP on Darwin

Fixes #15404.

(cherry picked from commit 578012be13eb1548050d51c0a23bd1a98423f03e)

8 months agoImprove documentation for warning options
Nathan Collins [Fri, 19 Oct 2018 21:44:19 +0000 (14:44 -0700)] 
Improve documentation for warning options

My main goal was to make it easy to discover how to reverse `-Werror`,
since `Wno-error` doesn't work, and the fact that `-Wwarn` negates
`-Werror` was only mentioned in the `-Wwarn` docs before.

Other changes:
- explain at the outset that some options control individual warnings
  while others control warning families.
- explain at the outset that `-Wno-<wflag>` can be used to reverse
  `-W<wflag>`. This is no mentioned in two places, but I don't think
  that's a bad thing.

8 months agoDocs: clarify the interaction between throwSTM and catchSTM.
Ian Denhardt [Fri, 26 Oct 2018 22:05:05 +0000 (18:05 -0400)] 
Docs: clarify the interaction between throwSTM and catchSTM.

The previous doc comments were not terribly clear on what was or wasn't
rolled back when an exception was caught in STM. This misunderstanding
was the source of a bug in another project of mine, and folks on
`#haskell` found it confusing as well.

8 months agoFix sample code of -fprint-explicit-kinds, plus sample when disabling PolyKinds
Yuji Yamamoto [Thu, 25 Oct 2018 01:59:29 +0000 (10:59 +0900)] 
Fix sample code of -fprint-explicit-kinds, plus sample when disabling PolyKinds

- Although the sample is for `-fprint-explicit-kinds`, the sample code
  uses `-fprint-explicit-foralls` (but perhaps the output used to be
  correct one of `-fprint-explicit-kinds`).
- Update the output with the recent version of GHC (ver. 8.4.3. I guess
  it doesn't change in GHC 8.6...)
- Add more samples to clarify the difference of kinds, which tells
  effect of `-fprint-explicit-kinds` more clearly.

8 months agousers guide: Introduce :pragma: directive
Ben Gamari [Tue, 17 Jan 2017 19:43:52 +0000 (14:43 -0500)] 
users guide: Introduce :pragma: directive

8 months agousers guide: Mention :since: in editing-guide
Ben Gamari [Tue, 17 Jan 2017 18:51:56 +0000 (13:51 -0500)] 
users guide: Mention :since: in editing-guide

8 months agoFix #15815 by parenthesizing the arguments to infix ~
Ryan Scott [Sun, 28 Oct 2018 20:08:11 +0000 (16:08 -0400)] 
Fix #15815 by parenthesizing the arguments to infix ~

An unfortunate consequence of commit
b9483981d128f55d8dae3f434f49fa6b5b30c779 (`Remove HsEqTy and XEqTy`)
is infix uses of `~` in TH quotes now desugar differently than
before. In particular, we have that:

```haskell
a ~ (Int -> Int)
```

Now desugars to:

```haskell
HsOpTy a (~) (HsOpTy Int (->) Int)
```

Which GHC interprets as being:

```haskell
a ~ Int -> Int
```

Or, equivalently:

```haskell
(a ~ Int) -> Int
```

Which is different than what was intended! This is the cause
of #15815.

All of this has revealed that we likely need to renovate the way we
desugar infix type operators to be more consistent with the treatment
for infix expressions (see
https://ghc.haskell.org/trac/ghc/ticket/15815#comment:5 for more on
this.) Doing so would constitute a breaking change, however, so we
will likely want to wait until another major GHC release to do this.

In the meantime, this patch offers a non-invasive change to the way
that infix uses of `~` are desugared. This makes the program
in #15815 compile again by inserting extra `HsParTy`s around the
arguments to `~` if they are lacking them.

Test Plan: make test TEST=T15815

Reviewers: int-index, goldfire, bgamari

Reviewed By: int-index

Subscribers: int-e, rwbarton, carter

GHC Trac Issues: #15815

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

8 months agoAdd a test case for #15829
Ryan Scott [Mon, 29 Oct 2018 16:59:46 +0000 (12:59 -0400)] 
Add a test case for #15829

This happened to get fixed as a consequence of commit
5e45ad10ffca1ad175b10f6ef3327e1ed8ba25f3. This adds a test case
to ensure that it stays fixed.

8 months agoRevert "Remove kind generalisation from tcRnType"
Richard Eisenberg [Mon, 29 Oct 2018 16:15:58 +0000 (12:15 -0400)] 
Revert "Remove kind generalisation from tcRnType"

This reverts commit 3a51abd04432ea3d13e4ea3c5a592f038bd57432.

I had hit the wrong button when trying to validate the original
commit... and ended up committing it prematurely instead.
This reversion commit
also updates the comments to explain why we kind-generalise.

8 months agoTest #15076 in dependent/should_compile/T15076*
Richard Eisenberg [Mon, 29 Oct 2018 14:01:15 +0000 (10:01 -0400)] 
Test #15076 in dependent/should_compile/T15076*

8 months agoTest #15825 in dependent/should_fail/T15825
Richard Eisenberg [Mon, 29 Oct 2018 13:59:07 +0000 (09:59 -0400)] 
Test #15825 in dependent/should_fail/T15825

8 months agoTest T15711 in indexed-types/should_compile/T15711
Richard Eisenberg [Mon, 29 Oct 2018 13:51:52 +0000 (09:51 -0400)] 
Test T15711 in indexed-types/should_compile/T15711

8 months agoRemove kind generalisation from tcRnType
Richard Eisenberg [Mon, 29 Oct 2018 03:05:36 +0000 (23:05 -0400)] 
Remove kind generalisation from tcRnType

There is no need to kind-generalise in tcRnType. Types are not
instantiated eagerly, so there's never anything to generalise.

8 months agoFix #15787 by squashing a coercion hole.
Richard Eisenberg [Sun, 28 Oct 2018 20:06:17 +0000 (16:06 -0400)] 
Fix #15787 by squashing a coercion hole.

In type-incorrect code, we can sometimes let a coercion
hole make it through the zonker. If this coercion hole then
ends up in the environment (e.g., in the type of a data
constructor), then it causes trouble later.

This patch avoids trouble by substituting the coercion hole
for its representative CoVar. Really, any coercion would do,
but the CoVar was very handy.

test case: polykinds/T15787

8 months agoFinish fix for #14880.
Tobias Dammers [Thu, 13 Sep 2018 07:56:02 +0000 (09:56 +0200)] 
Finish fix for #14880.

The real change that fixes the ticket is described in
Note [Naughty quantification candidates] in TcMType.

Fixing this required reworking candidateQTyVarsOfType, the function
that extracts free variables as candidates for quantification.
One consequence is that we now must be more careful when quantifying:
any skolems around must be quantified manually, and quantifyTyVars
will now only quantify over metavariables. This makes good sense,
as skolems are generally user-written and are listed in the AST.

As a bonus, we now have more control over the ordering of such
skolems.

Along the way, this commit fixes #15711 and refines the fix
to #14552 (by accepted a program that was previously rejected,
as we can now accept that program by zapping variables to Any).

This commit also does a fair amount of rejiggering kind inference
of datatypes. Notably, we now can skip the generalization step
in kcTyClGroup for types with CUSKs, because we get the
kind right the first time. This commit also thus fixes #15743 and
 #15592, which both concern datatype kind generalisation.
(#15591 is also very relevant.) For this aspect of the commit, see
Note [Required, Specified, and Inferred in types] in TcTyClsDecls.

Test cases: dependent/should_fail/T14880{,-2},
            dependent/should_fail/T15743[cd]
            dependent/should_compile/T15743{,e}
            ghci/scripts/T15743b
            polykinds/T15592
            dependent/should_fail/T15591[bc]
            ghci/scripts/T15591

8 months agoBump template-haskell version to 2.15.0.0
Ryan Scott [Mon, 29 Oct 2018 02:25:05 +0000 (22:25 -0400)] 
Bump template-haskell version to 2.15.0.0

Summary:
Commit 512eeb9bb9a81e915bfab25ca16bc87c62252064
(`More explicit foralls (GHC Proposal 0007)`) introduced breaking
changes to the Template Haskell AST. As a consequence of this, there
are libraries in the wild that now fail to build on GHC HEAD (for
instance, `th-abstraction`).

This properly bumps the `template-haskell` library's version number
to `2.15.0.0` so that these libraries can guard against these changes
using `MIN_VERSION_template_haskell`.

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15818

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

8 months agoRewrite FastString table in concurrent hashtable
Zejun Wu [Sun, 28 Oct 2018 16:39:58 +0000 (12:39 -0400)] 
Rewrite FastString table in concurrent hashtable

Summary:
Reimplement global FastString table using a concurrent hashatable with
fixed size segments and dynamically growing buckets instead of fixed size
buckets.

This addresses the problem that `mkFastString` was not linear when the
total number of entries was large.

Test Plan:
./validate

```
inplace/bin/ghc-stage2 --interactive -dfaststring-stats < /dev/null
GHCi, version 8.7.20181005: http://www.haskell.org/ghc/  :? for help
Prelude> Leaving GHCi.
FastString stats:
    segments:          256
    buckets:           16384
    entries:           7117
    largest segment:   64
    smallest segment:  64
    longest bucket:    5
    has z-encoding:    0%
```

Also comapre the two implementation using

{P187}

The new implementation is on a par with the old version with different
conbination of parameters and perform better when the number of
FastString's are large.

{P188}

Reviewers: simonmar, bgamari, niteria

Reviewed By: simonmar, bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #14854

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

8 months agoImprove diagnostic when using `make fast` in top directory
Victor Nawothnig [Sun, 28 Oct 2018 16:39:05 +0000 (12:39 -0400)] 
Improve diagnostic when using `make fast` in top directory

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

8 months agoFix ghc-pkg when only prof way is enabled
Zejun Wu [Sun, 28 Oct 2018 16:38:07 +0000 (12:38 -0400)] 
Fix ghc-pkg when only prof way is enabled

Summary:
We saw following errors:

```
$ cabal install --disable-library-vanilla --disable-shared --enable-library-profiling
hashable-1.2.7.0: cannot find any of
["libHShashable-1.2.7.0-Q2TKVDwk4GBEHmizb4teZ.a",
 "libHShashable-1.2.7.0-Q2TKVDwk4GBEHmizb4teZ.p_a",
 "libHShashable-1.2.7.0-Q2TKVDwk4GBEHmizb4teZ-ghc8.4.3.so",
 "libHShashable-1.2.7.0-Q2TKVDwk4GBEHmizb4teZ-ghc8.4.3.dylib",
 "HShashable-1.2.7.0-Q2TKVDwk4GBEHmizb4teZ-ghc8.4.3.dll"]
```

This is because ghc-pkg is looking for
`libHShashable-1.2.7.0-Q2TKVDwk4GBEHmizb4teZ.p_a` instead of
`libHShashable-1.2.7.0-Q2TKVDwk4GBEHmizb4teZ_p.a`.

Test Plan: ./validate

Reviewers: simonmar, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

8 months agoPlugins: Add documentation and missing exports
Ben Gamari [Sun, 28 Oct 2018 16:36:15 +0000 (12:36 -0400)] 
Plugins: Add documentation and missing exports

Summary:
Previously the TcPlugin and CorePlugin type synonyms were not exporting,
resulting in much confusion.

Reviewers: mpickering

Reviewed By: mpickering

Subscribers: rwbarton, carter

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

8 months agotestsuite: EtaExpandLevPoly now passes in profiled ways
Ben Gamari [Sun, 28 Oct 2018 16:32:40 +0000 (12:32 -0400)] 
testsuite: EtaExpandLevPoly now passes in profiled ways

Summary:
This failure was originally tracked in #15066 but it seems the problem
has somehow resolved itself.

Reviewers: alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, carter

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

8 months agoplugins: search for .a files if necessary
sheaf [Sun, 28 Oct 2018 16:30:13 +0000 (12:30 -0400)] 
plugins: search for .a files if necessary

Summary:
on windows, plugins are loaded via .a files,
but those paths were not being searched when loading plugins

Test Plan: ./validate

Reviewers: Phyx, bgamari

Reviewed By: Phyx

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #15700

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

8 months agoFix TcType.anyRewritableTyVar
Ningning Xie [Sun, 28 Oct 2018 16:29:55 +0000 (12:29 -0400)] 
Fix TcType.anyRewritableTyVar

Summary:
This patch fixes #15805, where we found that
`TcType.anyRewritableTyVar` has one wrong case.

Besides the fix, it also:
- removed some unnecessary `ASSERT2(tcIsTcTyVar...)` in `TcType`, as now we have
     `tcIsTcTyVar = isTyVar`.
- fixed some comments

Test Plan: ./validate

Reviewers: goldfire, simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15805

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

8 months agoComment out CONSTANT_FOLDED in GHC.Natural
Christiaan Baaij [Sun, 28 Oct 2018 16:29:23 +0000 (12:29 -0400)] 
Comment out CONSTANT_FOLDED in GHC.Natural

Summary:
Although these functions were marked as CONSTANT_FOLDED, they did
not have a corresponding builtinRule in PrelRules. The idea was
probably to add them eventually, but this hasn't manifested so
far.

The plan is to eventually add builtin rules for these functions
over Natural, so as a reminder we simply comment out the
CONSTANT_FOLDED  annotation instead of removing it completely.

Reviewers: hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

8 months agoFix integer overflow when encoding doubles (Trac #15271)
Fangyi Zhou [Sun, 28 Oct 2018 16:28:53 +0000 (12:28 -0400)] 
Fix integer overflow when encoding doubles (Trac #15271)

Summary:
Ticket #15271 reports a case where 1e1000000000 is incorrectly
converted to 0.0. After some investigation, I discovered the number is
converted to rational correctly, but converting the ratio into a double
introduced an error.

Tracking down to how the conversion is done, I found the rts float
implementation uses `ldexp`, whose signature is
`double ldexp (double x, int exp);`
The callsite passes an `I_` to the second argument, which is
platform-dependent. On machines where `I_` is 64 bits and `int` is 32 bits, we
observe integer overflow behaviour.

Here is a mapping from rational to exponent with observations
1e646457008  -> 2147483645 (result = infinity, positive in int32)
1e646457009  -> 2147483648 (result = 0.0, overflow to negative in int32)
1e1000000000 -> 3321928042 (result = infinity, overflow to positive in int32)
1e1555550000 -> 5167425196 (result = 0.0, overflow to negative in int32)

We fix this issue by comparing STG_INT_MIN/MAX and INT_MIN/MAX and bound the
value appropriately.

Test Plan: New test cases

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15271

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

8 months agoFix `:k` command: add validity checking
Ningning Xie [Sun, 28 Oct 2018 16:26:12 +0000 (12:26 -0400)] 
Fix `:k` command: add validity checking

Summary:
This patch fixes #15806, where we found that the `:k` command in GHCi
misses a validity checking for the type.

Missing validity checking causes `:k` to accept types that are not validated.
For example, `:k (Maybe (forall a. a -> a))` (incorrectly) returns `*`, while
impredictivity of type instantiation shouldn't be allowed.

Test Plan: ./validate

Reviewers: simonpj, goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15806

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

8 months agoincludes: Allow headers to be built with C++11 compilers
Ben Gamari [Sun, 28 Oct 2018 16:24:06 +0000 (12:24 -0400)] 
includes: Allow headers to be built with C++11 compilers

Summary:
Fixes #14784. Note that C++11 is quite conservative; we could likely accept
C++03 as well.

Test Plan:
```
$ cat >hi.c <<EOF
#include <Rts.h>
EOF
$ g++ -std=c++11 hi.c
```

Reviewers: simonmar, hvr

Subscribers: rwbarton, carter

GHC Trac Issues: #14784

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

8 months agoFix rare undefined asm temp end label error in x86
Zejun Wu [Sun, 28 Oct 2018 16:22:25 +0000 (12:22 -0400)] 
Fix rare undefined asm temp end label error in x86

Summary:
Encountered assembly error due to undefined label `.LcaDcU_info_end` for
following code generated by `pprFrameProc`:

```
.Lsat_sa8fp{v}_info_fde_end:
  .long .Lblock{v caDcU}_info_fde_end-.Lblock{v caDcU}_info_fde
.Lblock{v caDcU}_info_fde:
  .long _nbHlD-.Lsection_frame
  .quad block{v caDcU}_info-1
  .quad .Lblock{v caDcU}_info_end-block{v caDcU}_info+1
  .byte 1
```

This diff fixed the error.

Test Plan:
  ./validate

Also the case where we used to have assembly error is now fixed.
Unfortunately, I have limited insight here and cannot get a small enough repro
or test case for this.

Ben says:

> I think I see: Previously we only produced end symbols for the info
> tables of top-level procedures. However, blocks within a procedure may
> also have info tables, we will dutifully generate debug information for
> and consequently we get undefined symbols.

Reviewers: simonmar, scpmw, last_g, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

8 months agoFix for T14251 on ARM
Kavon Farvardin [Sun, 28 Oct 2018 16:11:49 +0000 (12:11 -0400)] 
Fix for T14251 on ARM

We now calculate the SSE register padding needed to fix the calling
convention in LLVM in a robust way: grouping them by whether
registers in that class overlap (with the same class overlapping
itself).

My prior patch assumed that no matter the platform, physical
register Fx aliases with Dx, etc, for our calling convention.

This is unfortunately not the case for any platform except x86-64.

Test Plan:
Only know how to test on x86-64, but it should be tested on ARM with:

`make test WAYS=llvm && make test WAYS=optllvm`

Reviewers: bgamari, angerman

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15780, #14251, #15747

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

8 months agoMore explicit foralls (GHC Proposal 0007)
Matthew Yacavone [Sat, 27 Oct 2018 18:01:42 +0000 (14:01 -0400)] 
More explicit foralls (GHC Proposal 0007)

Allow the user to explicitly bind type/kind variables in type and data
family instances (including associated instances), closed type family
equations, and RULES pragmas. Follows the specification of GHC
Proposal 0007, also fixes #2600. Advised by Richard Eisenberg.

This modifies the Template Haskell AST -- old code may break!

Other Changes:
- convert HsRule to a record
- make rnHsSigWcType more general
- add repMaybe to DsMeta

Includes submodule update for Haddock.

Test Plan: validate

Reviewers: goldfire, bgamari, alanz

Subscribers: simonpj, RyanGlScott, goldfire, rwbarton,
             thomie, mpickering, carter

GHC Trac Issues: #2600, #14268

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

8 months agoRemove redundant SOURCE import
Simon Jakobi [Tue, 23 Oct 2018 08:53:22 +0000 (10:53 +0200)] 
Remove redundant SOURCE import

8 months agoFix nasty bug in the type free-var finder, at last
Simon Peyton Jones [Fri, 26 Oct 2018 10:54:20 +0000 (11:54 +0100)] 
Fix nasty bug in the type free-var finder, at last

Consider the type
  forall k. b -> k
where
  b :: k -> Type

Here the 'k' in b's kind must be a different 'k' to the forall k,
because 'b' is free in the expression.  So we must return 'k'
among the free vars returned from tyCoVarsOfType applied that
type.  But we weren't.

This is an outright bug, although we don't have a program that
fails because of it.

It's easy to fix, too: see TyCoRep
  Note [Closing over free variable kinds]

This fix has been in the pipeline for ages because it fell into
the Trac #14880 swamp.  But this patch nails it.

8 months agoFix generalisation for type constructors
Simon Peyton Jones [Thu, 25 Oct 2018 14:16:19 +0000 (15:16 +0100)] 
Fix generalisation for type constructors

Fixing the way that we close-over-kinds when taking the
free vars of a type revealed that the way we generalise
type constructors was a bit wrong.

This fixes it.  See TcTyClDecls
Note [Generalisation for type constructors]

8 months agoDe-monadise the 'extract' functions in RnTypes
Simon Peyton Jones [Thu, 25 Oct 2018 16:33:12 +0000 (17:33 +0100)] 
De-monadise the 'extract' functions in RnTypes

As Trac #15765 says, Once upon a time, the extract functions
at the bottom of RnTypes were pure. Then, along came -XTypeInType,
which needed to do a check in these functions for users mixing
type variables with kind variables.

Now, however, with -XTypeInType gone again, we no longer
do this check. Thus, there is no reason to keep these
functions monadic.

8 months agoA little more wibbling to -ddump-types
Simon Peyton Jones [Thu, 25 Oct 2018 15:33:47 +0000 (16:33 +0100)] 
A little more wibbling to -ddump-types

8 months agoUpdate core-spec for Coercion Quantification
Ningning Xie [Thu, 25 Oct 2018 14:01:21 +0000 (22:01 +0800)] 
Update core-spec for Coercion Quantification

Summary:
Update details for `ForAllTy` and `ForAllCo` in core-spec, as they
can now quantify over coercion variables.

Test Plan: Please read core-spec.pdf

Reviewers: goldfire, simonpj, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15497, #15589

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

8 months agoFix comment in TcType
Simon Peyton Jones [Thu, 25 Oct 2018 13:30:40 +0000 (14:30 +0100)] 
Fix comment in TcType

8 months agoImprove comments, triggered by Trac #15135
Simon Peyton Jones [Thu, 25 Oct 2018 11:47:48 +0000 (12:47 +0100)] 
Improve comments, triggered by Trac #15135

8 months agoImprove documentation about overlapping instances
Simon Peyton Jones [Thu, 25 Oct 2018 08:47:32 +0000 (09:47 +0100)] 
Improve documentation about overlapping instances

An attempt to help with Trac #15800

8 months agoRemove a zonkTcTyVarToTyVar
Simon Peyton Jones [Thu, 25 Oct 2018 07:50:59 +0000 (08:50 +0100)] 
Remove a zonkTcTyVarToTyVar

This patch fixes Trac #15778 by removing a zonkTcTyVarToTyVar
from tcHsSigType.

Nww that a pattern-bound type variable can refer to a type, it's
obvoiusly wrong to expect it to be a TyVar!  Moreover, that zonk
is entirely unnecessary.

I added a new Note [Type variables in the type environment]
in TcRnTypes

8 months agoAdd comments for StgCse and Unarise
Simon Peyton Jones [Wed, 24 Oct 2018 16:15:15 +0000 (17:15 +0100)] 
Add comments for StgCse and Unarise

This just improves docmentation for the fix to Trac #15300

8 months agoTest Trac #15648
Simon Peyton Jones [Wed, 24 Oct 2018 15:51:32 +0000 (16:51 +0100)] 
Test Trac #15648

8 months agoFix some broken links (#15733)
Fangyi Zhou [Thu, 25 Oct 2018 07:16:48 +0000 (10:16 +0300)] 
Fix some broken links (#15733)

Change some URLs from hackage.haskell.org/trac to ghc.haskell.org/trac

Test Plan: manually verify links work

Reviewers: bgamari, simonmar, mpickering

Reviewed By: bgamari, mpickering

Subscribers: mpickering, rwbarton, carter

GHC Trac Issues: #15733

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

8 months agoRemove unnecessary free-var-set deletion
Simon Peyton Jones [Tue, 23 Oct 2018 08:10:50 +0000 (09:10 +0100)] 
Remove unnecessary free-var-set deletion

In TcSimplify.neededEvVars, in add_implic_seeds we were
deleting the 'givens'; but they are already deleted, so
this is a no-op.  This patch just remove the redundant
delete.

8 months agoWibble report a wanted
Simon Peyton Jones [Tue, 23 Oct 2018 08:10:21 +0000 (09:10 +0100)] 
Wibble report a wanted

8 months agoAdd HasDebugCallStack to ctEvCoecion
Simon Peyton Jones [Thu, 18 Oct 2018 14:49:56 +0000 (15:49 +0100)] 
Add HasDebugCallStack to ctEvCoecion

This is a debug-only change

8 months agoReport a Wanted error even if there are Given ones
Simon Peyton Jones [Thu, 18 Oct 2018 14:41:44 +0000 (15:41 +0100)] 
Report a Wanted error even if there are Given ones

We suppress some Given errors; see Note [Given errors]
in TcErrors.  But we must be careful not to suppress
Wanted errors because of the presence of these Given
errors -- else we might allow compilation to bogusly
proceed

The rubber hits the road in TcRnTypes.insolubleCt,
where we don't want to treat Givens as insoluble,
nor (and this is the new bit) Deriveds that arise
from Givens.  See Note [Given insolubles] in TcRnTypes.

This fixes #15767.

8 months agoDon't print out undefined coercions
Simon Peyton Jones [Thu, 18 Oct 2018 14:36:37 +0000 (15:36 +0100)] 
Don't print out undefined coercions

A debug-print was trying to print the coercion returned
by the flattener.  But that coercion can be undefined
in the case of Derived constraints.  Because we might
rewrite it with [D] a ~ ty, and there is no evidence
for that.

Solution: don't attempt to print the coercion.

8 months agoSolve equalities in a pattern signature
Simon Peyton Jones [Tue, 16 Oct 2018 13:47:12 +0000 (14:47 +0100)] 
Solve equalities in a pattern signature

Trac #15694 showed that we were forgetting to solve
the equalities of a pattern signature until too late.

Result: WARNINGs and a panic:
  "Type-correct unfilled coercion hole"

8 months agoRefactor the treatment of predicate types
Simon Peyton Jones [Tue, 16 Oct 2018 11:38:16 +0000 (12:38 +0100)] 
Refactor the treatment of predicate types

Trac #15648 showed that GHC was a bit confused about the
difference between the types for

* Predicates
* Coercions
* Evidence (in the typechecker constraint solver)

This patch cleans it up. See especially Type.hs
Note [Types for coercions, predicates, and evidence]

Particular changes

* Coercion types (a ~# b) and (a ~#R b) are not predicate types
  (so isPredTy reports False for them) and are not implicitly
  instantiated by the type checker.  This is a real change, but
  it consistently reflects that fact that (~#) and (~R#) really
  are different from predicates.

* isCoercionType is renamed to isCoVarType

* During type inference, simplifyInfer, we do /not/ want to infer
  a constraint (a ~# b), because that is no longer a predicate type.
  So we 'lift' it to (a ~ b). See TcType
  Note [Lift equality constaints when quantifying]

* During type inference for pattern synonyms, we need to 'lift'
  provided constraints of type (a ~# b) to (a ~ b).  See
  Note [Equality evidence in pattern synonyms] in PatSyn

* But what about (forall a. Eq a => a ~# b)? Is that a
  predicate type?  No -- it does not have kind Constraint.
  Is it an evidence type?  Perhaps, but awkwardly so.

  In the end I decided NOT to make it an evidence type,
  and to ensure the the type inference engine never
  meets it.  This made me /simplify/ the code in
  TcCanonical.makeSuperClasses; see TcCanonical
  Note [Equality superclasses in quantified constraints]

  Instead I moved the special treatment for primitive
  equality to TcInteract.doTopReactOther.  See TcInteract
  Note [Looking up primitive equalities in quantified constraints]

  Also see Note [Evidence for quantified constraints] in Type.

  All this means I can have
     isEvVarType ty = isCoVarType ty || isPredTy ty
  which is nice.

All in all, rather a lot of work for a small refactoring,
but I think it's a real improvement.

8 months agoImprove output from -ddump-types
Simon Peyton Jones [Tue, 16 Oct 2018 11:03:56 +0000 (12:03 +0100)] 
Improve output from -ddump-types

This patch makes a number of improvements to the output
generated by -ddump-types

* Prints data constructor separately
* Omits empty chunks of output

I was driven initially by the unhelpful existing output for
data constructors, but ended up doing some refactoring.

Lots of error message wibbles, but nothing significant.
Certainly no change in user behaviour.

(NB: It is just possible that I have failed to cleanly
     separate this patch from the next one, about
     isPredTy and friends.)

8 months agoComments and white space
Simon Peyton Jones [Tue, 16 Oct 2018 11:00:32 +0000 (12:00 +0100)] 
Comments and white space

8 months agoFix #15792 by not reifying invisible arguments in AppTys
Ryan Scott [Wed, 24 Oct 2018 11:03:40 +0000 (07:03 -0400)] 
Fix #15792 by not reifying invisible arguments in AppTys

Summary:
The `reifyType` function in `TcSplice` is carefully designed
to avoid reifying visible arguments to `TyConApp`s. However, the same
care was not given towards the `AppTy` case, which lead to #15792.

This patch changes to the `AppTy` case of `reifyType` so that it
consults the kind of the function type to determine which of the
argument types are invisible (and therefore should be dropped) during
reification. This required crafting a variant of `tyConArgFlags`,
which I dubbed `appTyArgFlags`, that accept an arbitrary function
`Type` instead of a `TyCon`.

Test Plan: make test TEST=T15792

Reviewers: goldfire, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #15792

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

8 months agoKeep top-level names in typed TH quotes alive
Ryan Scott [Wed, 24 Oct 2018 11:02:59 +0000 (07:02 -0400)] 
Keep top-level names in typed TH quotes alive

Summary:
When renaming untyped TH quotes, some care is taken to
ensure that uses of top-level names in quotes do not have their
bindings discarded during desugaring. The same care was not applied
to typed TH quotes, so this patch brings the two into sync.

Test Plan: make test TEST=T15783

Reviewers: bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, rwbarton, carter

GHC Trac Issues: #15783

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

8 months agoFix #15781 by using ktypedocs on type synonym RHSes
Ryan Scott [Wed, 24 Oct 2018 11:02:30 +0000 (07:02 -0400)] 
Fix #15781 by using ktypedocs on type synonym RHSes

Summary:
This is a follow-up to D5173, which permitted
unparenthesized kind signatures in certain places. One place that
appeared to be overlooked was the right-hand sides of type synonyms,
which this patch addresses by introducing a `ktypedoc` parser
production (which is to `ctypdoc` as `ktype` is to `ctype`) and
using it in the right place.

Test Plan: make test TEST="KindSigs T15781"

Reviewers: harpocrates, bgamari

Reviewed By: harpocrates

Subscribers: rwbarton, mpickering, carter

GHC Trac Issues: #15781

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

8 months agoTrigger multiline mode in GHCi on '\case' (#13087)
Alec Theriault [Wed, 24 Oct 2018 11:02:08 +0000 (07:02 -0400)] 
Trigger multiline mode in GHCi on '\case' (#13087)

Summary:
In ALR, 'ITlcase' should expect an opening curly. This is probably a forgotten
edge case in ALR, since `maybe_layout` (which handles the non-ALR layout)
already deals with the 'ITlcase' token properly.

Test Plan: make TEST=T10453 && make TEST=T13087

Reviewers: bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #10453, #13087

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

8 months agoBump hsc2hs submodule
Ben Gamari [Tue, 23 Oct 2018 19:20:37 +0000 (15:20 -0400)] 
Bump hsc2hs submodule

8 months agoAdd 'hadrian/' from commit '45f3bff7016a2a0cd9a5455a882ced984655e90b'
Ben Gamari [Tue, 23 Oct 2018 18:20:13 +0000 (14:20 -0400)] 
Add 'hadrian/' from commit '45f3bff7016a2a0cd9a5455a882ced984655e90b'

git-subtree-dir: hadrian
git-subtree-mainline: 575b35f4cdc18045bccd42d341d6f25d95c0696c
git-subtree-split: 45f3bff7016a2a0cd9a5455a882ced984655e90b

8 months agoRemove Hadrian submodule
Ben Gamari [Tue, 23 Oct 2018 18:20:07 +0000 (14:20 -0400)] 
Remove Hadrian submodule

8 months agotestsuite: Mark T15349 as broken in the ghci way
Ben Gamari [Fri, 19 Oct 2018 00:48:06 +0000 (20:48 -0400)] 
testsuite: Mark T15349 as broken in the ghci way

See #15349.