10 months agoSmarter HsType pretty-print for promoted datacons
Simon Peyton Jones [Thu, 15 Nov 2018 09:02:11 +0000 (09:02 +0000)] 
Smarter HsType pretty-print for promoted datacons

Fix Trac #15898, by being smarter about when to print
a space before a promoted data constructor, in a HsType.
I had to implement a mildly tiresome function
It has multiple cases, of course, but it's very simple.

The patch improves the error-message output in a bunch of
cases, and (to my surprise) actually fixes a bug in the
output of T14343 (Trac #14343), thus

  -  In the expression: _ :: Proxy '('( 'True,  'False),  'False)
  +  In the expression: _ :: Proxy '( '( 'True, 'False), 'False)

I discovered that there were two copies of the PromotionFlag
type (a boolean, with helpfully named data cons), one in
IfaceType and one in HsType.  So I combined into one,
PromotionFlag, and moved it to BasicTypes.  That's why
quite a few files are touched, but it's all routine.

10 months agoComments adding to the fix for Trac #15859
Simon Peyton Jones [Tue, 6 Nov 2018 09:10:30 +0000 (09:10 +0000)] 
Comments adding to the fix for Trac #15859

10 months agoComments only, about polykinded TyConApps
Simon Peyton Jones [Mon, 5 Nov 2018 13:48:27 +0000 (13:48 +0000)] 
Comments only, about polykinded TyConApps

See Trac #15704 comment:8ff

10 months agoFix a bug in SRT generation (#15892)
Simon Marlow [Thu, 15 Nov 2018 03:31:35 +0000 (06:31 +0300)] 
Fix a bug in SRT generation (#15892)

The logic in `Note [recursive SRTs]` was correct. However, my
implementation of it wasn't: I got the associativity of
`Set.difference` wrong, which led to an extremely subtle and difficult
to find bug.

Fortunately now we have a test case. I was able to cut down the code
to something manageable, and I've added it to the test suite.

Test Plan:
Before (using my stage 1 compiler without the fix):

====> T15892(normal) 1 of 1 [0, 0, 0]
cd "" &&  "/home/smarlow/ghc/inplace/bin/ghc-stage1" -o T15892
T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
-dno-debug-output  -O
cd "" && ./T15892  +RTS -G1 -A32k -RTS
Wrong exit code for T15892(normal)(expected 0 , actual 134 )
Stderr ( T15892 ):
T15892: internal error: evacuate: strange closure type 0
    (GHC version 8.7.20181113 for x86_64_unknown_linux)
    Please report this as a GHC bug:
Aborted (core dumped)
*** unexpected failure for T15892(normal)
=====> T15892(g1) 1 of 1 [0, 1, 0]
cd "" &&  "/home/smarlow/ghc/inplace/bin/ghc-stage1" -o T15892
T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
-dno-debug-output  -O
cd "" && ./T15892 +RTS -G1 -RTS +RTS -G1 -A32k -RTS
Wrong exit code for T15892(g1)(expected 0 , actual 134 )
Stderr ( T15892 ):
T15892: internal error: evacuate: strange closure type 0
    (GHC version 8.7.20181113 for x86_64_unknown_linux)
    Please report this as a GHC bug:
Aborted (core dumped)

After (using my stage 2 compiler with the fix):

=====> T15892(normal) 1 of 1 [0, 0, 0]
cd "" &&  "/home/smarlow/ghc/inplace/test   spaces/ghc-stage2"
-o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
cd "" && ./T15892  +RTS -G1 -A32k -RTS
=====> T15892(g1) 1 of 1 [0, 0, 0]
cd "" &&  "/home/smarlow/ghc/inplace/test   spaces/ghc-stage2"
-o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
cd "" && ./T15892 +RTS -G1 -RTS +RTS -G1 -A32k -RTS

Reviewers: bgamari, osa1, erikd

Reviewed By: osa1

Subscribers: rwbarton, carter

GHC Trac Issues: #15892

Differential Revision:

11 months agohadrian: build ghc-iserv-dyn
David Eichmann [Wed, 14 Nov 2018 14:43:57 +0000 (15:43 +0100)] 
hadrian: build ghc-iserv-dyn

... in addition to ghc-iserv and ghc-iserv-prof, as it is required
to get 10+ tests to pass

Reviewers: bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: alpmestan, rwbarton, carter

Differential Revision:

11 months agoMake `UniqDSet` a newtype
Sebastian Graf [Tue, 13 Nov 2018 13:54:54 +0000 (14:54 +0100)] 
Make `UniqDSet` a newtype

This brings the situation of `UniqDSet` in line with `UniqSet`.

@dfeuer said in D3146#92820 that he would do this, but probably
never got around to it.

Validated locally.

Reviewers: AndreasK, mpickering, bgamari, dfeuer, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter, dfeuer

GHC Trac Issues: #15879, #13114

Differential Revision:

11 months agocircleci: Disable pushing of test metrics if not validating upstream
Ben Gamari [Mon, 12 Nov 2018 19:11:05 +0000 (14:11 -0500)] 
circleci: Disable pushing of test metrics if not validating upstream

11 months agoCorrect link to GHC API in docs index.
Shao Cheng [Mon, 12 Nov 2018 10:45:06 +0000 (18:45 +0800)] 
Correct link to GHC API in docs index.

11 months agocompareByPreference: handle the integer-gmp vs -simple case
Alp Mestanogullari [Mon, 12 Nov 2018 14:38:46 +0000 (15:38 +0100)] 
compareByPreference: handle the integer-gmp vs -simple case

Currently, it assumes the package names are identical and this
breaks in the case where integer-gmp is in one package db and
integer-simple in another. This became a problem with
the commit: fc2ff6dd7496a33bf68165b28f37f40b7d647418.

Instead of following the precedence information, leading to
the right choice, the current code would compare the
integer-gmp and integer-simple versions and pick integer-gmp
because it happened to have a greater version, despite having
a lower precedence. See for
a comprehensive report about the problem.

This effectively un-breaks integer-simple builds with hadrian.

Test Plan: hadrian/ --integer-simple

Reviewers: snowleopard, bgamari

Reviewed By: bgamari

Subscribers: snowleopard, rwbarton, carter

Differential Revision:

11 months agoRemove StgBinderInfo and related computation in CoreToStg
Ömer Sinan Ağacan [Mon, 12 Nov 2018 03:50:54 +0000 (06:50 +0300)] 
Remove StgBinderInfo and related computation in CoreToStg

- The StgBinderInfo type was never used in the code gen, so the type, related
  computation in CoreToStg, and some comments about it are removed. See #15770
  for more details.

- Simplified CoreToStg after removing the StgBinderInfo computation: removed
  StgBinderInfo arguments and mfix stuff.

The StgBinderInfo values were not used in the code gen, but I still run nofib
just to make sure: 0.0% change in allocations and binary sizes.

Test Plan: Validated locally

Reviewers: simonpj, simonmar, bgamari, sgraf

Reviewed By: sgraf

Subscribers: AndreasK, sgraf, rwbarton, carter

Differential Revision:

11 months agoFix #15594 (--abi-hash with Backpack sometimes fails)
Edward Z. Yang [Mon, 12 Nov 2018 03:39:29 +0000 (22:39 -0500)] 
Fix #15594 (--abi-hash with Backpack sometimes fails)

For holes, its necessary to "see through" the instantiation
of the hole to get accurate family instance dependencies.
For example, if B imports <A>, and <A> is instantiated with
F, we must grab and include all of the dep_finsts from
F to have an accurate transitive dep_finsts list.

However, we MUST NOT do this for regular modules.
First, for efficiency reasons, doing this
bloats the the dep_finsts list, because we *already* had
those modules in the list (it wasn't a hole module, after
all). But there's a second, more important correctness
consideration: we perform module renaming when running
--abi-hash.  In this case, GHC's contract to the user is that
it will NOT go and read out interfaces of any dependencies
(; the point of
--abi-hash is just to get a hash of the on-disk interfaces
for this *specific* package.  If we go off and tug on the
interface for /everything/ in dep_finsts, we're gonna have a
bad time.  (It's safe to do do this for hole modules, though,
because the hmap for --abi-hash is always trivial, so the
interface we request is local.  Though, maybe we ought
not to do it in this case either...)

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: alexbiehl, goldfire, bgamari

Subscribers: ppk, shlevy, rwbarton, carter

GHC Trac Issues: #15594

Differential Revision:

11 months agoRespect naming conventions in module RnUnbound.hs in fix for #15611
Roland Senn [Sun, 11 Nov 2018 10:21:26 +0000 (11:21 +0100)] 
Respect naming conventions in module RnUnbound.hs in fix for #15611

The patch
didn't respect the local naming conventions in module

  - Top level functions names are written in camelCase.
  -  Local function names in where clauses are written as names_with_underscores.

This patch restores these conventions.

Test Plan: make test TESTS="T15611a T15611b"

Reviewers: DavidEichmann, monoidal, hvr, mpickering, bgamari

Reviewed By: mpickering

Subscribers: rwbarton, carter

GHC Trac Issues: #15611

Differential Revision:

11 months agoIgnore .gdb_history files
Ben Gamari [Sun, 11 Nov 2018 10:20:57 +0000 (11:20 +0100)] 
Ignore .gdb_history files

Summary: I tend to accumulate these and they are often quite useful to keep around.

Reviewers: monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

Differential Revision:

11 months agoiserv: Fix typo in cabal file
Matthew Pickering [Sun, 11 Nov 2018 10:20:19 +0000 (11:20 +0100)] 
iserv: Fix typo in cabal file

Reviewers: bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, carter

Differential Revision:

11 months agoGHCi does not need a main function
roland [Sun, 11 Nov 2018 10:19:30 +0000 (11:19 +0100)] 
GHCi does not need a main function

Summary: In GHCi we don't check anymore, whether a main function is exported.

Test Plan: make test TEST=T11647

Reviewers: hvr, osa1, monoidal, mpickering, bgamari

Reviewed By: osa1, mpickering

Subscribers: rwbarton, carter

GHC Trac Issues: #11647

Differential Revision:

11 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

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:

11 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
    - On expected metric changes, the programmer need only indicate the
      direction of change in the git commit message.
  - Provides a simple python tool "" to compare metrics
    over time.

  - Using just the previous commit allows performance to drift with each
    - 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 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':
Metric Increase:
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:

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

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

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

11 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,
  we shouldn't use them for `Int8#`/`Word8#` (just as we do not use
them for

Signed-off-by: Michal Terepeta <>
Test Plan: manually run tests with WAY=llvm

Reviewers: bgamari, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15864

Differential Revision:

11 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

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

11 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

11 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`.

11 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

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

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:

11 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:

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 <>
Test Plan: ./validate (on both x86-{32,64})

Reviewers: bgamari, hvr, goldfire, simonmar

Subscribers: rwbarton, carter

Differential Revision:

11 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:

11 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:

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

11 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)

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

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

11 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:

11 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

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:

11 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

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

Reviewers: snowleopard, bgamari

Reviewed By: bgamari

Subscribers: simonpj, ndmitchell, simonmar, rwbarton, carter

Differential Revision:

11 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:

11 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:

11 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:

11 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

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

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

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

11 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

11 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)

11 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

11 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 (which
briefly refused to typecheck on GHC HEAD) as a test case.

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

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

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


11 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)

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

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

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

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

11 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

11 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:

a ~ (Int -> Int)

Now desugars to:

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

Which GHC interprets as being:

a ~ Int -> Int

Or, equivalently:

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

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

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

11 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*

11 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

11 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

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

11 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

11 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

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},

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

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 `` 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:

11 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

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

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

Test Plan:

inplace/bin/ghc-stage2 --interactive -dfaststring-stats < /dev/null
GHCi, version 8.7.20181005:  :? 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


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.


Reviewers: simonmar, bgamari, niteria

Reviewed By: simonmar, bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #14854

Differential Revision:

11 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:

11 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

We saw following errors:

$ cabal install --disable-library-vanilla --disable-shared --enable-library-profiling
hashable- cannot find any of

This is because ghc-pkg is looking for
`libHShashable-` instead of

Test Plan: ./validate

Reviewers: simonmar, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

Differential Revision:

11 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

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

Reviewers: mpickering

Reviewed By: mpickering

Subscribers: rwbarton, carter

Differential Revision:

11 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

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:

11 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

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:

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

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:

11 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

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

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:

11 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)

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:

11 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

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:

11 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

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>
$ g++ -std=c++11 hi.c

Reviewers: simonmar, hvr

Subscribers: rwbarton, carter

GHC Trac Issues: #14784

Differential Revision:

11 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

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

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

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:

11 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

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:

11 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:

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

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

11 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]

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

11 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

11 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

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:

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

11 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

11 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

11 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

11 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

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

11 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 to

Test Plan: manually verify links work

Reviewers: bgamari, simonmar, mpickering

Reviewed By: bgamari, mpickering

Subscribers: mpickering, rwbarton, carter

GHC Trac Issues: #15733

Differential Revision:

11 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

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

11 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

11 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

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.

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

11 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"