ghc.git
9 months agoRename literal constructors
Sylvain Henry [Thu, 22 Nov 2018 16:31:16 +0000 (11:31 -0500)] 
Rename literal constructors

In a previous patch we replaced some built-in literal constructors
(MachInt, MachWord, etc.) with a single LitNumber constructor.

In this patch we replace the `Mach` prefix of the remaining constructors
with `Lit` for consistency (e.g., LitChar, LitLabel, etc.).

Sadly the name `LitString` was already taken for a kind of FastString
and it would become misleading to have both `LitStr` (literal
constructor renamed after `MachStr`) and `LitString` (FastString
variant). Hence this patch renames the FastString variant `PtrString`
(which is more accurate) and the literal string constructor now uses the
least surprising `LitString` name.

Both `Literal` and `LitString/PtrString` have recently seen breaking
changes so doing this kind of renaming now shouldn't harm much.

Reviewers: hvr, goldfire, bgamari, simonmar, jrtc27, tdammers

Subscribers: tdammers, rwbarton, thomie, carter

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

9 months agousers guide: We no longer build libraries with -split-objs
Ben Gamari [Thu, 22 Nov 2018 00:17:41 +0000 (19:17 -0500)] 
users guide: We no longer build libraries with -split-objs

We now generally use split-sections instead.

9 months agoMinor performance optimisation
Gabor Greif [Wed, 21 Nov 2018 17:30:49 +0000 (18:30 +0100)] 
Minor performance optimisation

only concat once

9 months agoanother minor refactoring
Gabor Greif [Tue, 20 Nov 2018 15:35:08 +0000 (16:35 +0100)] 
another minor refactoring

9 months agoFix heap corruption during stable name allocation
Ömer Sinan Ağacan [Wed, 21 Nov 2018 17:03:38 +0000 (20:03 +0300)] 
Fix heap corruption during stable name allocation

See #15906 for the problem. To fix we simply call `allocate()` instead of
`ALLOC_PRIM()`. `allocate()` does not trigger GC when the nursery is full,
instead it extends it.

Test Plan:
This validates. memo001 now passes with `-debug` compile parameter. I'll add
another test that runs memo001 with `-debug` once I figure out how to use
stdout files for multiple tests.

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15906

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

9 months agoRemove redundant check in cgCase
Ömer Sinan Ağacan [Tue, 20 Nov 2018 13:30:15 +0000 (16:30 +0300)] 
Remove redundant check in cgCase

D5339 (part of D5324) removed the dead case binder analysis done during
CoreToStg so this condition always holds now.

Test Plan: Validated locally.

Reviewers: sgraf, bgamari, simonmar

Subscribers: rwbarton, carter

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

9 months agoDon't track free variables in STG syntax by default
Sebastian Graf [Mon, 19 Nov 2018 16:48:44 +0000 (17:48 +0100)] 
Don't track free variables in STG syntax by default

Summary:
Currently, `CoreToStg` annotates `StgRhsClosure`s with their set of non-global
free variables.  This free variable information is only needed in the final
code generation step (i.e. `StgCmm.codeGen`), which leads to transformations
such as `StgCse` and `StgUnarise` having to maintain this information.

This is tiresome and unnecessary, so this patch introduces a trees-to-grow-like
approach that only introduces the free variable set into the syntax tree in the
code gen pass, along with a free variable analysis on STG terms to generate
that information.

Fixes #15754.

Reviewers: simonpj, osa1, bgamari, simonmar

Reviewed By: osa1

Subscribers: rwbarton, carter

GHC Trac Issues: #15754

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

9 months agohadrian: make it possible to run the testsuite with quickest and quick
Alp Mestanogullari [Mon, 19 Nov 2018 15:12:56 +0000 (16:12 +0100)] 
hadrian: make it possible to run the testsuite with quickest and quick

More generally, we so far assumed that the testsuite would be executed
with a flavour that's as comprehensive as perf in terms of available RTS
and library flavours (at least vanilla + dynamic + prof). This would
manifest itself concretely by needing 3 "ways" of the iserv program,
unconditionally.

We now only require the ways among vanilla, dynamic and prof that we
can find in our current Flavour's rtsWays.

Test Plan:
hadrian/build.sh --flavour={quick, quickest} test now goes through
(with a few failing tests, of course).

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: mpickering, RyanGlScott, rwbarton, carter

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

9 months agoeventlog: Log the current stack size when stack overflows
Matthew Pickering [Mon, 19 Nov 2018 11:34:13 +0000 (11:34 +0000)] 
eventlog: Log the current stack size when stack overflows

Reviewers: maoe, bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter, sjorn3

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

9 months agoTiny refactor in exitScheduler
Ömer Sinan Ağacan [Mon, 19 Nov 2018 07:28:57 +0000 (10:28 +0300)] 
Tiny refactor in exitScheduler

9 months agoFix typo in docs
Chris Done [Sun, 18 Nov 2018 11:44:53 +0000 (11:44 +0000)] 
Fix typo in docs

I've been reading this line of docs for years and it ruffles my feathers.

9 months agoIntroduce Int16# and Word16#
Abhiroop Sarkar [Mon, 5 Nov 2018 17:06:58 +0000 (12:06 -0500)] 
Introduce Int16# and Word16#

This builds off of D4475.

Bumps binary submodule.

Reviewers: carter, AndreasK, hvr, goldfire, bgamari, simonmar

Subscribers: rwbarton, thomie

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

9 months agoFix trac #15702, as a followon to fix for #13704.
Chris Smith [Sat, 17 Nov 2018 11:40:23 +0000 (12:40 +0100)] 
Fix trac #15702, as a followon to fix for #13704.

Summary:
The effect of this change is that -main-is changes the default
export list for the main module, but does not apply the same
change to non-main modules.  This fixes some cases where -main-is
was used to wrap a module that expected that default behavior
(exporting `main`, even when that wasn't the main entry point
name).

Reviewers: mpickering, monoidal, bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #13704, #15702

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

9 months agoMinor refactoring
Gabor Greif [Thu, 8 Feb 2018 14:54:20 +0000 (15:54 +0100)] 
Minor refactoring

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

9 months agoRemove -Wamp flag (#11477)
roland [Sat, 17 Nov 2018 11:33:00 +0000 (12:33 +0100)] 
Remove -Wamp flag (#11477)

Summary:
Add line
  "The deprecated ghc-flag -Wamp has been removed."
to the release notes for 8.8.1

Reviewers: bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

GHC Trac Issues: #11477

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

9 months agoMore compact Outputable instance for `Uniq(D)Set`
Sebastian Graf [Sat, 17 Nov 2018 11:31:29 +0000 (12:31 +0100)] 
More compact Outputable instance for `Uniq(D)Set`

Summary:
Until now, `UniqSet` and `UniqDSet` inherited their `Outputable`
instances from `UniqFM` and `UniqDFM`.

That made for verbose and redundant output. This patch rectifies
that by pretty-printing these sets in common math notation.
E.g., previously, we would render `UniqSet`s like this:

    [s2fE :-> x_s2fE, s2fF :-> y_s2fF, s2fG :-> z_s2fG, s2fH :-> g_s2fH]

Now, they're are printed like this:

    {x_s2fE, y_s2fF, z_s2fG, g_s2fH}

Reviewers: simonpj, bgamari, AndreasK, dfeuer, osa1

Reviewed By: osa1

Subscribers: osa1, rwbarton, carter

GHC Trac Issues: #15879

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

9 months agoSpeed up MonadUtils.mapMaybeM
Simon Jakobi [Sat, 17 Nov 2018 11:30:12 +0000 (12:30 +0100)] 
Speed up MonadUtils.mapMaybeM

Summary: This version is nearly 2x faster according to a few small benchmarks.

Reviewers: bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

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

9 months agoFix #12906: GHC fails to typecheck Main module without main
Roland Senn [Sat, 17 Nov 2018 11:24:27 +0000 (12:24 +0100)] 
Fix #12906: GHC fails to typecheck Main module without main

Summary: The function fail is no longer called immediately
after adding the no-main error message to the TcM monad.
The rest of the module will be typechecked.

Test Plan: make test TEST=T12906

Reviewers: dfeuer, RyanGlScott, ezyang, mpickering, bgamari

Reviewed By: RyanGlScott

Subscribers: rwbarton, carter

GHC Trac Issues: #12906

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

9 months agoFix #12525: Remove derived bindings from the TyThings from getBindings
Roland Senn [Sat, 17 Nov 2018 11:22:23 +0000 (12:22 +0100)] 
Fix #12525: Remove derived bindings from the TyThings from getBindings

Summary:
Remove derived OccNames from the list of TyThings returned by the function GHC.getBindings.
Therefore the output of the `:show bindings `command will not contain names generated by GHC.

Test Plan: make test TEST=T12525

Reviewers: austin, hvr, alanz, angerman, thomie, bgamari, osa1

Reviewed By: osa1

Subscribers: simonpj, osa1, rwbarton, carter

GHC Trac Issues: #12525

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

9 months agoBuilding GHC with hadrian on FreeBSD
Krzysztof Gogolewski [Sat, 17 Nov 2018 11:21:51 +0000 (12:21 +0100)] 
Building GHC with hadrian on FreeBSD

Summary: I'm currently trying to make `hadrian` work as a build system
on FreeBSD (https://ghc.haskell.org/trac/ghc/ticket/15860).
I'm still having some issues with `libgmp` but one can get a working
`ghc` using `--integer-simple` and this patch.

Reviewers: bgamari, erikd, alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, carter

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

9 months agofix T15898
Alp Mestanogullari [Sat, 17 Nov 2018 10:34:07 +0000 (11:34 +0100)] 
fix T15898

Summary:
validate is currently broken [1] on master, this patches addresses
the failure by removing an expected stdout file for T15898 since no output
is generated there.

[1]: https://circleci.com/gh/ghc/ghc/11416

Test Plan: TEST=T15898 ./validate

Reviewers: bgamari

Subscribers: rwbarton, carter

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

9 months agoNCG: New code layout algorithm.
Andreas Klebinger [Sat, 17 Nov 2018 10:20:36 +0000 (11:20 +0100)] 
NCG: New code layout algorithm.

Summary:
This patch implements a new code layout algorithm.
It has been tested for x86 and is disabled on other platforms.

Performance varies slightly be CPU/Machine but in general seems to be better
by around 2%.
Nofib shows only small differences of about +/- ~0.5% overall depending on
flags/machine performance in other benchmarks improved significantly.

Other benchmarks includes at least the benchmarks of: aeson, vector, megaparsec, attoparsec,
containers, text and xeno.

While the magnitude of gains differed three different CPUs where tested with
all getting faster although to differing degrees. I tested: Sandy Bridge(Xeon), Haswell,
Skylake

* Library benchmark results summarized:
  * containers: ~1.5% faster
  * aeson: ~2% faster
  * megaparsec: ~2-5% faster
  * xml library benchmarks: 0.2%-1.1% faster
  * vector-benchmarks: 1-4% faster
  * text: 5.5% faster

On average GHC compile times go down, as GHC compiled with the new layout
is faster than the overhead introduced by using the new layout algorithm,

Things this patch does:

* Move code responsilbe for block layout in it's own module.
* Move the NcgImpl Class into the NCGMonad module.
* Extract a control flow graph from the input cmm.
* Update this cfg to keep it in sync with changes during
  asm codegen. This has been tested on x64 but should work on x86.
  Other platforms still use the old codelayout.
* Assign weights to the edges in the CFG based on type and limited static
  analysis which are then used for block layout.
* Once we have the final code layout eliminate some redundant jumps.

  In particular turn a sequences of:
      jne .foo
      jmp .bar
    foo:
  into
      je bar
    foo:
      ..

Test Plan: ci

Reviewers: bgamari, jmct, jrtc27, simonmar, simonpj, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, trommler, jmct, carter, thomie, rwbarton

GHC Trac Issues: #15124

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

10 months agoFix a typo in the description of -fabstract-refinement-hole-fits
Dmitry Ivanov [Thu, 15 Nov 2018 09:36:09 +0000 (10:36 +0100)] 
Fix a typo in the description of -fabstract-refinement-hole-fits

10 months agouser's guide: typo in ViewPatterns example
Ben Price [Sun, 11 Nov 2018 17:19:57 +0000 (17:19 +0000)] 
user's guide: typo in ViewPatterns example

10 months agoSome assertions and comments in scheduler
Ömer Sinan Ağacan [Sat, 17 Nov 2018 04:59:15 +0000 (07:59 +0300)] 
Some assertions and comments in scheduler

Test Plan:
I can't validate this because of existing errors with the debug runtime. I'll
see if this introduces any new failures.

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

10 months agoAdd missing stderr file for Trac #15898
Simon Peyton Jones [Fri, 16 Nov 2018 11:39:09 +0000 (11:39 +0000)] 
Add missing stderr file for Trac #15898

10 months agoMore efficient, non-allocating unsafeLookupStaticPtr
Ömer Sinan Ağacan [Fri, 16 Nov 2018 10:52:11 +0000 (13:52 +0300)] 
More efficient, non-allocating unsafeLookupStaticPtr

We now allocate the key to spt on C stack rather than in Haskell heap,
avoiding allocating in `unsafeLookupStaticPtr`. This should be slightly
more efficient.

Test Plan: Validated locally

Reviewers: simonmar, hvr, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

10 months agobump haddock submodule
Alp Mestanogullari [Fri, 16 Nov 2018 08:50:27 +0000 (09:50 +0100)] 
bump haddock submodule

Summary:
ae2c9b40f5b6bf272251d1f4107c60003f541b62 introduced some changes that
broke haddock, [1] fixed them and this patch bumps the haddock submodule
to include the fixes.

[1]: https://github.com/haskell/haddock/pull/970

Test Plan: build haddock (make or hadrian)

Reviewers: bgamari, AndreasK

Reviewed By: AndreasK

Subscribers: osa1, AndreasK, rwbarton, carter

GHC Trac Issues: #15900

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

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
    HsType.lhsTypeHasLeadingPromotionQuote
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)

Summary:
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 "T15892.run" &&  "/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.run" && ./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:  http://www.haskell.org/ghc/reportabug
Aborted (core dumped)
*** unexpected failure for T15892(normal)
=====> T15892(g1) 1 of 1 [0, 1, 0]
cd "T15892.run" &&  "/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.run" && ./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:  http://www.haskell.org/ghc/reportabug
Aborted (core dumped)
```

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

```
=====> T15892(normal) 1 of 1 [0, 0, 0]
cd "T15892.run" &&  "/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
-dno-debug-output
cd "T15892.run" && ./T15892  +RTS -G1 -A32k -RTS
=====> T15892(g1) 1 of 1 [0, 0, 0]
cd "T15892.run" &&  "/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
-dno-debug-output
cd "T15892.run" && ./T15892 +RTS -G1 -RTS +RTS -G1 -A32k -RTS
```

Reviewers: bgamari, osa1, erikd

Reviewed By: osa1

Subscribers: rwbarton, carter

GHC Trac Issues: #15892

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

10 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: https://phabricator.haskell.org/D5327

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

Summary:
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: https://phabricator.haskell.org/D5313

10 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

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

10 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
https://github.com/snowleopard/hadrian/issues/702 for
a comprehensive report about the problem.

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

Test Plan: hadrian/build.sh --integer-simple

Reviewers: snowleopard, bgamari

Reviewed By: bgamari

Subscribers: snowleopard, rwbarton, carter

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

10 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: https://phabricator.haskell.org/D5232

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

Summary:
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
(https://github.com/haskell/cabal/issues/3633); 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 <ezyang@fb.com>
Test Plan: validate

Reviewers: alexbiehl, goldfire, bgamari

Subscribers: ppk, shlevy, rwbarton, carter

GHC Trac Issues: #15594

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

10 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

Summary:
The patch https://phabricator.haskell.org/D5284
didn't respect the local naming conventions in module
compiler/rename/RnUnbound.hs:

  - 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: https://phabricator.haskell.org/D5308

10 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: https://phabricator.haskell.org/D5320

10 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: https://phabricator.haskell.org/D5311

10 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: https://phabricator.haskell.org/D5162

10 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

10 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

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

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

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

10 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

10 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

10 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

10 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

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

10 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

10 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

10 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

10 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

10 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

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

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

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

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

10 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

10 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

10 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

10 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

10 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

10 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

10 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

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

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

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

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

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

10 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

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

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

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

10 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/

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

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

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

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

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

10 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

10 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

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

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

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

10 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

10 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

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

10 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

10 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

10 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

10 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

10 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

10 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

10 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

10 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