ghc.git
16 months agoDisable T10962 on llvm for now
Krzysztof Gogolewski [Sun, 22 Jul 2018 20:34:52 +0000 (22:34 +0200)] 
Disable T10962 on llvm for now

This breaks Harbormaster builds.

16 months agoFix pretty-printing of data declarations in splices
Krzysztof Gogolewski [Sun, 22 Jul 2018 16:58:33 +0000 (18:58 +0200)] 
Fix pretty-printing of data declarations in splices

Test Plan: validate

Reviewers: RyanGlScott, bgamari

Reviewed By: RyanGlScott

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15365

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

16 months agoFix a major copy'n'paste error in LLVM CodeGen
Krzysztof Gogolewski [Sun, 22 Jul 2018 15:33:32 +0000 (17:33 +0200)] 
Fix a major copy'n'paste error in LLVM CodeGen

Summary:
In D4592, `AddWordC` is lowered as an unsigned subtraction instead
of an unsigned addition when compiling with LLVM.

This patch rectifies that.

Reviewers: angerman, bgamari, monoidal

Reviewed By: angerman, bgamari, monoidal

Subscribers: osa1, rwbarton, thomie, carter

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

16 months agoFix the GHCi debugger with ApplicativeDo
Simon Marlow [Sun, 22 Jul 2018 15:03:33 +0000 (17:03 +0200)] 
Fix the GHCi debugger with ApplicativeDo

Summary:
`collectLStmtsBinders` was returning nothing for `ApplicativeStmts`, which
caused the debugger to not track free variables in many cases when using
`ApplicativeDo`.

Test Plan:
* new test case
* validate

Reviewers: bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15422

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

16 months agoHarden fixST
David Feuer [Sat, 21 Jul 2018 19:45:35 +0000 (15:45 -0400)] 
Harden fixST

Trac #15349 reveals that lazy blackholing can cause trouble for
`fixST` much like it can for `fixIO`. Make `fixST` work just
like `fixIO`.

Reviewers: simonmar, hvr, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15349

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

16 months agoFix the TcLevel not being set correctly when finding valid hole fits
Matthías Páll Gissurarson [Sat, 21 Jul 2018 13:48:53 +0000 (15:48 +0200)] 
Fix the TcLevel not being set correctly when finding valid hole fits

Summary:
This fixes the problem revealed by a new assert as it relates to valid
hole fits. However, tests `T10384`, `T14040a` and `TcStaticPointersFail02`
still fail the assert, but they are unrelated to valid hole fits.

Reviewers: bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie, carter

GHC Trac Issues: #15384

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

16 months agoAvoid redundant invocation of 'findTopDir'
Michael Sloan [Fri, 20 Jul 2018 14:53:41 +0000 (16:53 +0200)] 
Avoid redundant invocation of 'findTopDir'

Summary:
While working on [D904](https://phabricator.haskell.org/D4904), I noticed that
'findTopDir' was being invoked three times.  This isn't a big problem, because
it is usually very cheap.  On windows, it does require some involved logic,
though, so to me it would make sense to only run it once.

Reviewers: bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, thomie, carter

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

16 months agoFix #15423 by using pprAStmtContext
Ryan Scott [Fri, 20 Jul 2018 10:50:50 +0000 (12:50 +0200)] 
Fix #15423 by using pprAStmtContext

Summary:
Previously, we were using `pprStmtContext` instead, which
led to error messages missing indefinite articles where they were
required.

Test Plan: make test TEST="T13242a T7786 Typeable1"

Reviewers: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15423

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

16 months agoSmall spelling fixes for Unify.hs
Sasa Bogicevic [Thu, 19 Jul 2018 10:23:20 +0000 (13:23 +0300)] 
Small spelling fixes for Unify.hs

Reviewers: bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

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

16 months agofix osReserveHeapMemory block alignment
Sergei Trofimovich [Wed, 18 Jul 2018 22:36:58 +0000 (23:36 +0100)] 
fix osReserveHeapMemory block alignment

Before the change osReserveHeapMemory() attempted
to allocate chunks of memory via osTryReserveHeapMemory()
not multiple of MBLOCK_SIZE in the following fallback code:

```
    if (at == NULL) {
        *len -= *len / 8;
```

and caused assertion failure:

```
$ make fulltest TEST=T11607 WAY=threaded1
T11607: internal error: ASSERTION FAILED: file rts/posix/OSMem.c, line 457
    (GHC version 8.7.20180716 for riscv64_unknown_linux)

```

The change applies alignment mask before each MBLOCK allocation attempt
and fixes WAY=threaded1 test failures on qemu-riscv64.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: run 'make fulltest WAY=threaded1'

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

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

16 months agostack: fix stack allocations on Windows
Tamar Christina [Wed, 18 Jul 2018 20:03:58 +0000 (21:03 +0100)] 
stack: fix stack allocations on Windows

Summary:
On Windows one is not allowed to drop the stack by more than a page size.
The reason for this is that the OS only allocates enough stack till what
the TEB specifies. After that a guard page is placed and the rest of the
virtual address space is unmapped.

The intention is that doing stack allocations will cause you to hit the
guard which will then map the next page in and move the guard.  This is
done to prevent what in the Linux world is known as stack clash
vulnerabilities https://access.redhat.com/security/cve/cve-2017-1000364.

There are modules in GHC for which the liveliness analysis thinks the
reserved 8KB of spill slots isn't enough.  One being DynFlags and the
other being Cabal.

Though I think the Cabal one is likely a bug:

```
  4d6544:       81 ec 00 46 00 00       sub    $0x4600,%esp
  4d654a:       8d 85 94 fe ff ff       lea    -0x16c(%ebp),%eax
  4d6550:       3b 83 1c 03 00 00       cmp    0x31c(%ebx),%eax
  4d6556:       0f 82 de 8d 02 00       jb     4ff33a <_cLpg_info+0x7a>
  4d655c:       c7 45 fc 14 3d 50 00    movl   $0x503d14,-0x4(%ebp)
  4d6563:       8b 75 0c                mov    0xc(%ebp),%esi
  4d6566:       83 c5 fc                add    $0xfffffffc,%ebp
  4d6569:       66 f7 c6 03 00          test   $0x3,%si
  4d656e:       0f 85 a6 d7 02 00       jne    503d1a <_cLpb_info+0x6>
  4d6574:       81 c4 00 46 00 00       add    $0x4600,%esp
```

It allocates nearly 18KB of spill slots for a simple 4 line function
and doesn't even use it.  Note that this doesn't happen on x64 or
when making a validate build.  Only when making a build without a
validate and build.mk.

This and the allocation in DynFlags means the stack allocation will jump
over the guard page into unmapped memory areas and GHC or an end program
segfaults.

The pagesize on x86 Windows is 4KB which means we hit it very easily for
these two modules, which explains the total DOA of GHC 32bit for the past
3 releases and the "random" segfaults on Windows.

```
0:000> bp 00503d29
0:000> gn
Breakpoint 0 hit
WARNING: Stack overflow detected. The unwound frames are extracted from outside
         normal stack bounds.
eax=03b6b9c9 ebx=00dc90f0 ecx=03cac48c edx=03cac43d esi=03b6b9c9 edi=03abef40
eip=00503d29 esp=013e96fc ebp=03cf8f70 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
setup+0x103d29:
00503d29 89442440        mov     dword ptr [esp+40h],eax ss:002b:013e973c=????????
WARNING: Stack overflow detected. The unwound frames are extracted from outside
         normal stack bounds.
WARNING: Stack overflow detected. The unwound frames are extracted from outside
         normal stack bounds.
0:000> !teb
TEB at 00384000
    ExceptionList:        013effcc
    StackBase:            013f0000
    StackLimit:           013eb000
```

This doesn't fix the liveliness analysis but does fix the allocations, by
emitting a function call to `__chkstk_ms` when doing allocations of larger
than a page, this will make sure the stack is probed every page so the kernel
maps in the next page.

`__chkstk_ms` is provided by `libGCC`, which is under the
`GNU runtime exclusion license`, so it's safe to link against it, even for
proprietary code. (Technically we already do since we link compiled C code in.)

For allocations smaller than a page we drop the stack and probe the new address.
This avoids the function call and still makes sure we hit the guard if needed.

PS: In case anyone is Wondering why we didn't notice this before, it's because we
only test x86_64 and on Windows 10.  On x86_64 the page size is 8KB and also the
kernel is a bit more lenient on Windows 10 in that it seems to catch the segfault
and resize the stack if it was unmapped:

```
0:000> t
eax=03b6b9c9 ebx=00dc90f0 ecx=03cac48c edx=03cac43d esi=03b6b9c9 edi=03abef40
eip=00503d2d esp=013e96fc ebp=03cf8f70 iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000202
setup+0x103d2d:
00503d2d 8b461b          mov     eax,dword ptr [esi+1Bh] ds:002b:03b6b9e4=03cac431
0:000> !teb
TEB at 00384000
    ExceptionList:        013effcc
    StackBase:            013f0000
    StackLimit:           013e9000
```

Likely Windows 10 has a guard page larger than previous versions.

This fixes the stack allocations, and as soon as I get the time I will look at
the liveliness analysis. I find it highly unlikely that simple Cabal function
requires ~2200 spill slots.

Test Plan: ./validate

Reviewers: simonmar, bgamari

Reviewed By: bgamari

Subscribers: AndreasK, rwbarton, thomie, carter

GHC Trac Issues: #15154

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

16 months agotestsuite: force plugin tests sequentially on Windows.
Tamar Christina [Wed, 18 Jul 2018 20:05:41 +0000 (21:05 +0100)] 
testsuite: force plugin tests sequentially on Windows.

Summary:
Package registration does not seem to be thread-safe on
Windows.  Placing the system under heavily load seems to
trigger registration failures even though they are all
different package-dbs.   This makes the plugin tests
a bit flaky.

I think this is because on Windows we use pessimistic locks
while on Linux we use atomic file replacement.

On Windows ReplaceFile is atomic, just the metadata write
may not be.  Since the metadata is not of importance
we should either switch over to ReplaceFile or
fix the locking code to not error out but wait.

For now however I have to force these 25 tests to run
serially in order to guarantee their correctness.

Test Plan: ./validate

Reviewers: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15313, #13194

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

16 months agoFix some typos in docs
Sasa Bogicevic [Tue, 17 Jul 2018 19:34:23 +0000 (21:34 +0200)] 
Fix some typos in docs

Reviewers: bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15410

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

16 months agoCorrect spelling errors
Sasa Bogicevic [Tue, 17 Jul 2018 19:34:04 +0000 (21:34 +0200)] 
Correct spelling errors

Reviewers: bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15408

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

16 months agoFix spelling errors
Sasa Bogicevic [Tue, 17 Jul 2018 19:33:47 +0000 (21:33 +0200)] 
Fix spelling errors

Reviewers: goldfire, bgamari, osa1

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15407

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

16 months agoFix a typo
Sasa Bogicevic [Tue, 17 Jul 2018 19:33:25 +0000 (21:33 +0200)] 
Fix a typo

Reviewers: goldfire, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15406

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

16 months agoaclocal.m4: narrow down 'riscv*' to 'riscv-*' and 'riscv32*'
Sergei Trofimovich [Tue, 17 Jul 2018 19:01:44 +0000 (20:01 +0100)] 
aclocal.m4: narrow down 'riscv*' to 'riscv-*' and 'riscv32*'

Two minor changes:
- 32-bit CPU macro is called riscv32_HOST_ARCH (was riscv_HOST_ARCH)
- shrink understood tuples from riscv* to riscv-* and riscv32*-* as
  a tiny safeguard against riscv128*- in future.

Suggested-by: James Clarke <jrtc27@jrtc27.com>
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
16 months agoFix a typo in related trac ticket number
Sasa Bogicevic [Tue, 17 Jul 2018 09:07:53 +0000 (11:07 +0200)] 
Fix a typo in related trac ticket number

Reviewers: goldfire, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, goldfire, rwbarton, thomie, carter

GHC Trac Issues: #15405

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

16 months agosplit-obj: disable split-objects on Windows.
Tamar Christina [Tue, 17 Jul 2018 00:04:04 +0000 (20:04 -0400)] 
split-obj: disable split-objects on Windows.

A change has caused GHC to generate excessive specializations.
This is making GHC generate 1800 splits for a simple GHC.Prim module,
which means 1800 fork/exec calls.

Due to this compilation times on Windows with split-objs on take over
24 hours to complete depending on your disk speed.  Also the end
compiler
compiling medium to large project is also much slower.

So I think we need to just disable split-objects. As there's nothing
that
can be done about this.

Test Plan: ./validate

Reviewers: bgamari

Subscribers: tdammers, rwbarton, thomie, erikd, carter

GHC Trac Issues: #15051

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

16 months agoSupport the GHCi debugger with -fexternal-interpreter
Simon Marlow [Mon, 16 Jul 2018 23:58:31 +0000 (19:58 -0400)] 
Support the GHCi debugger with -fexternal-interpreter

* All the tests in tests/ghci.debugger now pass with
  -fexternal-interpreter. These tests are now run with the ghci-ext way
  in addition to the normal way so we won't break it in the future.

* I removed all the unsafeCoerce# calls from RtClosureInspect. Yay!

The main changes are:

* New messages: GetClosure and Seq.  GetClosure is a remote interface to
  GHC.Exts.Heap.getClosureData, which required Binary instances for
  various datatypes. Fortunately this wasn't too painful thanks to
  DeriveGeneric.

* No cheating by unsafeCoercing values when printing them. Now we have
  to turn the Closure representation back into the native representation
  when printing Int, Float, Double, Integer and Char. Of these, Integer
  was the most painful - we now have a dependency on integer-gmp due to
  needing access to the representation.

* Fixed a bug in rts/Heap.c - it was bogusly returning stack content as
  pointers for an AP_STACK closure.

Test Plan:
* `cd testsuite/tests/ghci.debugger && make`
* validate

Reviewers: bgamari, patrickdoc, nomeata, angerman, hvr, erikd, goldfire

Subscribers: alpmestan, snowleopard, rwbarton, thomie, carter

GHC Trac Issues: #13184

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

16 months agoFixed "Memory Model" example.
Francesco Ariis [Mon, 16 Jul 2018 23:56:03 +0000 (19:56 -0400)] 
Fixed "Memory Model" example.

removed whitespace and added relevant imports to the
"Memory Model" example (haddock documentation).

Reviewers: hvr, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, rwbarton, thomie, carter

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

16 months agoFix hash in haddock of ghc-prim.
Masahiro Sakai [Sat, 14 Jul 2018 14:52:51 +0000 (23:52 +0900)] 
Fix hash in haddock of ghc-prim.

Some hash signs in documents in primops.txt.pp were not escaped
properly. Those raw hash signs were kept in haddock and texts
between those hash signs were interpreted as anchors by haddock.

16 months agoFix example in `asum` docs
Simon Jakobi [Mon, 2 Jul 2018 12:52:47 +0000 (14:52 +0200)] 
Fix example in `asum` docs

16 months agoDo not imply NoStarIsType by TypeOperators/TypeInType
Vladislav Zavialov [Mon, 16 Jul 2018 22:46:52 +0000 (18:46 -0400)] 
Do not imply NoStarIsType by TypeOperators/TypeInType

Implementation of the "Embrace TypeInType" proposal was done according
to the spec, which specified that TypeOperators must imply NoStarIsType.
This implication was meant to prevent breakage and to be removed in 2
releases.  However, compiling head.hackage has shown that this
implication only magnified the breakage, so there is no reason to have
it in the first place.

To remain in compliance with the three-release policy, we add a
workaround to define the (*) type operator even when -XStarIsType is on.

Test Plan: ./validate

Reviewers: bgamari, RyanGlScott, goldfire, phadej, hvr

Reviewed By: bgamari, RyanGlScott

Subscribers: harpocrates, rwbarton, thomie, carter

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

16 months agoModernize S_TPush in the core spec
Ryan Scott [Mon, 16 Jul 2018 22:10:01 +0000 (18:10 -0400)] 
Modernize S_TPush in the core spec

Summary:
The specification for the `S_TPush` rule in the core spec's
operational semantics is woefully out-of-date. Let's bring it in line
with the presentation in //System FC with Explicit Kind Equality//.

Test Plan: Read it

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

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

16 months agoaclocal.m4: allow riscv and riscv64 CPU
Sergei Trofimovich [Mon, 16 Jul 2018 21:28:21 +0000 (22:28 +0100)] 
aclocal.m4: allow riscv and riscv64 CPU

Tested on riscv64-unknown-linux-gnu tuple.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
16 months agodriver: skip -Bsymbolic on unregisterised targets (Trac #15338)
Sergei Trofimovich [Mon, 16 Jul 2018 20:38:30 +0000 (21:38 +0100)] 
driver: skip -Bsymbolic on unregisterised targets (Trac #15338)

Trac #15338 is yet another example where -Bsymbolic breaks
semantics of a C program: global variable duplication happens
and unsafePerformIO creates two stdout copies.

When -Bsymbolic is not used both C compiler and linker agree
on how global variables are handled. In case of sh4 it consists
on a few assertions:

1. global variable is exported from shared library
2. code is referred to this variable via GOT-like mechanism to allow
   interposition
3. global variable is present .bss section on an executable
   (as an R_*_COPY relocation: symbol contents is copied at executable
   startup time)
4. and symbol in executable interposes symbol in shared library.

This way both code in shared library and code in executable refer
to a copy of global variable in .bss section of an executable.

Unfortunately -Bsymbolic option breaks assumption [2.] and generates
direct references to the symbol. This causes mismatch between
values seen from executable and values seen from shared library code.

This change disables '-Bsymbolic' for unregisterised targets.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: test 'ghc-pkg --version | cat' to emit data

Reviewers: simonmar, bgamari, jrtc27

Reviewed By: jrtc27

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15338

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

16 months ago#15387 Fix setting testsuite verbose to zero
Antti Siponen [Sun, 15 Jul 2018 19:47:42 +0000 (21:47 +0200)] 
#15387 Fix setting testsuite verbose to zero

16 months agoFix space leaks
Simon Marlow [Mon, 18 Jun 2018 16:18:10 +0000 (17:18 +0100)] 
Fix space leaks

Summary:
All these were detected by -fghci-leak-check when GHC was
compiled *without* optimisation (e.g. using the "quick" build flavour).

Unfortunately I don't know of a good way to keep this working.  I'd like
to just disable the -fghci-leak-check flag when the compiler is built
without optimisation, but it doesn't look like we have an easy way to do
that. And even if we could, it would be fragile anyway,

Test Plan: `cd testsuite/tests/ghci; make`

Reviewers: bgamari, hvr, erikd, tdammers

Subscribers: tdammers, rwbarton, thomie, carter

GHC Trac Issues: #15246

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

16 months agoFix parse errors in core-spec.pdf
Ryan Scott [Mon, 16 Jul 2018 13:51:18 +0000 (09:51 -0400)] 
Fix parse errors in core-spec.pdf

Summary:
`core-spec.pdf` was emitting parse errors due to not specifying
role arguments in some uses of `nth`. This patch adds those
role arguments. (Credit goes to Richard Eisenberg for actually
figuring out what said arguments should be.)

Test Plan: Read it

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15373

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

16 months agoTTG typo: XFieldOcc should be XCFieldOcc
Alan Zimmerman [Sun, 15 Jul 2018 17:35:51 +0000 (19:35 +0200)] 
TTG typo: XFieldOcc should be XCFieldOcc

In the following

  data FieldOcc pass = FieldOcc { extFieldOcc     :: XFieldOcc pass
                                , rdrNameFieldOcc :: Located RdrName
                                   -- ^ See Note [Located RdrNames] in HsExpr
                                }

    | XFieldOcc
        (XXFieldOcc pass)

we are using XFieldOcc for both the extFieldOcc type and the extra constructor.

The first one should be XCFieldOcc

Updates haddock submodule
closes #15386

16 months agoReplace atomicModifyMutVar#
David Feuer [Sun, 15 Jul 2018 14:15:15 +0000 (10:15 -0400)] 
Replace atomicModifyMutVar#

Reviewers: simonmar, hvr, bgamari, erikd, fryguybob, rrnewton

Reviewed By: simonmar

Subscribers: fryguybob, rwbarton, thomie, carter

GHC Trac Issues: #15364

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

17 months agoReclassify some performance tests
Richard Eisenberg [Sat, 14 Jul 2018 19:43:01 +0000 (15:43 -0400)] 
Reclassify some performance tests

There were some performance tests not classified by
compiler_num_stats_field, causing erroneous failures when
testing a DEBUG compiler. This fixes that oversight,
addressing #15374.

17 months agoDisable -fghci-leak-check in DEBUG mode
Richard Eisenberg [Sat, 14 Jul 2018 19:27:48 +0000 (15:27 -0400)] 
Disable -fghci-leak-check in DEBUG mode

The DEBUG compiler's GHCi still leaks. This commit suppresses
testsuite failures due to this leak. See #15372.

17 months agoDon't mkNakedCastTy on something unsaturated
Richard Eisenberg [Thu, 12 Jul 2018 22:45:09 +0000 (18:45 -0400)] 
Don't mkNakedCastTy on something unsaturated

A recent commit added extra calls to mkNakedCastTy to satisfy
Note [The tcType invariant]. However, some of these casts were
being applied to unsaturated type family applications, which
caused ASSERTion failures in TcFlatten later on. This patch
is more judicious in using mkNakedCastTy to avoid this problem.

17 months agoMove check for dcUserTyVarBinders invariant
Richard Eisenberg [Thu, 12 Jul 2018 21:48:39 +0000 (17:48 -0400)] 
Move check for dcUserTyVarBinders invariant

Previously, this check was done in mkDataCon. But this
sometimes caused assertion failures if an invalid data
con was made. I've moved the check to checkValidDataCon,
where we can be sure the datacon is otherwise valid first.

17 months agoMake some tests robust against DEBUG compiler
Richard Eisenberg [Thu, 12 Jul 2018 20:21:54 +0000 (16:21 -0400)] 
Make some tests robust against DEBUG compiler

Several tests were failing in DEBUG mode, but fixing this
was easy: just pass $(TEST_HC_OPTS) in the relevant
Makefiles.

17 months agoRemove ASSERTion about increasing TcLevels
Richard Eisenberg [Thu, 12 Jul 2018 20:10:34 +0000 (16:10 -0400)] 
Remove ASSERTion about increasing TcLevels

This removes an ASSERTion that TcLevels should increase by
exactly one in every implication. While this is a sensible
goal, it's not true today, and we should not be crippling
DEBUG for everyone while debugging this.

The ASSERT was added in 261dd83cacec71edd551e9c581d05285c9ea3226

17 months agoOptimise wakeups for STM
Simon Marlow [Sun, 15 Jul 2018 00:02:03 +0000 (20:02 -0400)] 
Optimise wakeups for STM

Avoids repeated wakeup messages being sent when a TVar is written to
multiple times. See comments for details.

Test Plan:
* Test from #15136 (will be added to stm shortly)
* existing stm tests

Reviewers: bgamari, osa1, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15136

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

17 months agoRemove random submodule
Ben Gamari [Sat, 14 Jul 2018 15:47:37 +0000 (11:47 -0400)] 
Remove random submodule

I believe this was originally introduced to help test DPH, which is now
gone.

17 months agoBump unix submodule
Ben Gamari [Sat, 14 Jul 2018 15:43:31 +0000 (11:43 -0400)] 
Bump unix submodule

17 months agoBump directory submodule to v1.3.3.0
Ben Gamari [Sat, 14 Jul 2018 15:36:00 +0000 (11:36 -0400)] 
Bump directory submodule to v1.3.3.0

17 months agoBump mtl submodule to v2.2.2
Ben Gamari [Sat, 14 Jul 2018 15:33:13 +0000 (11:33 -0400)] 
Bump mtl submodule to v2.2.2

17 months agoBump haskeline submodule to 0.7.4.3
Ben Gamari [Sat, 14 Jul 2018 15:29:55 +0000 (11:29 -0400)] 
Bump haskeline submodule to 0.7.4.3

17 months agoComments only
Simon Peyton Jones [Fri, 13 Jul 2018 22:49:41 +0000 (23:49 +0100)] 
Comments only

17 months agosubmodule update
Simon Marlow [Fri, 13 Jul 2018 16:34:17 +0000 (17:34 +0100)] 
submodule update

17 months agoImprove comments about CUSKs
Simon Peyton Jones [Fri, 13 Jul 2018 09:25:38 +0000 (10:25 +0100)] 
Improve comments about CUSKs

17 months agoRefactor floatEqualities slightly
Simon Peyton Jones [Fri, 13 Jul 2018 08:15:22 +0000 (09:15 +0100)] 
Refactor floatEqualities slightly

A conversation with Richard made me look at floatEqualities again, and
I did not find it easy to read.  This patch refactors it sligtly, with
better variable naming and more comments.

I also fixed one latent bug, I think.  In the old code, I think that an
inhomogeneous or insoluble equality (co :: t1~t2), which doesn't float,
and ended up in the badly-named 'non_eqs', would not end up in
extended_skols.  Hence it would not capture an equality that mentioned
'co' in a cast.

It's still pretty horrible (as Richard and I have been discussing),
but better.

No change in behaviour; I don't know a program that would trigger
the latent bug, even if my reasoning is right.

17 months agoFix processHeapClosureForDead CONSTR_NOCAF case
Ömer Sinan Ağacan [Fri, 13 Jul 2018 12:12:19 +0000 (15:12 +0300)] 
Fix processHeapClosureForDead CONSTR_NOCAF case

CONSTR_NOCAF was introduced with 55d535da10d as a replacement for
CONSTR_STATIC and CONSTR_NOCAF_STATIC, however, as explained in Note
[static constructors], we copy CONSTR_NOCAFs (which can also be seen in
evacuate) during GC, and they can become dead, like other CONSTR_X_Ys.
processHeapClosureForDead is updated to reflect this.

Test Plan: Validates on x86_64. Existing failures on i386.

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar, bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #7836, #15063, #15087, #15165

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

17 months agoUpdate submodule
Simon Marlow [Fri, 13 Jul 2018 09:29:02 +0000 (10:29 +0100)] 
Update submodule

17 months agoFix deadlock between STM and throwTo
Simon Marlow [Thu, 12 Jul 2018 14:13:47 +0000 (10:13 -0400)] 
Fix deadlock between STM and throwTo

There was a lock-order reversal between lockTSO() and the TVar lock,
see #15136 for the details.

It turns out we can fix this pretty easily by just deleting all the
locking code(!).  The principle for unblocking a `BlockedOnSTM` thread
then becomes the same as for other kinds of blocking: if the TSO
belongs to this capability then we do it directly, otherwise we send a
message to the capability that owns the TSO. That is, a thread blocked
on STM is owned by its capability, as it should be.

The possible downside of this is that we might send multiple messages
to wake up a thread when the thread is on another capability. This is
safe, it's just not very efficient.  I'll try to do some experiments
to see if this is a problem.

Test Plan: Test case from #15136 doesn't deadlock any more.

Reviewers: bgamari, osa1, erikd

Reviewed By: osa1

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15136

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

17 months agoRun the renamed source plugin after each HsGroup
Matthew Pickering [Thu, 12 Jul 2018 14:12:23 +0000 (10:12 -0400)] 
Run the renamed source plugin after each HsGroup

This allows modification of each `HsGroup` after it has been renamed.

The old behaviour of keeping the renamed source until later can be
recovered if desired by using the `keepRenamedSource` plugin but it
shouldn't really be necessary as it can be inspected in the `TcGblEnv`.

Reviewers: nboldi, bgamari, alpmestan

Reviewed By: nboldi, alpmestan

Subscribers: alpmestan, rwbarton, thomie, carter

GHC Trac Issues: #15315

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

17 months agoRelease notes about source plugins
Matthew Pickering [Thu, 12 Jul 2018 14:10:00 +0000 (10:10 -0400)] 
Release notes about source plugins

17 months agodocs: remove leftovers of static flags
Krzysztof Gogolewski [Thu, 12 Jul 2018 14:08:14 +0000 (10:08 -0400)] 
docs: remove leftovers of static flags

Remove "dynamic + :set" category from documentation,
because all dynamic flags support ":set"; this is a
leftover of "static + :set".

Test Plan: make html

Reviewers: bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, osa1, rwbarton, thomie, carter

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

17 months agoExport findImportUsage and ImportDeclUsage
Matthew Pickering [Thu, 12 Jul 2018 14:08:01 +0000 (10:08 -0400)] 
Export findImportUsage and ImportDeclUsage

Reviewers: bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: alpmestan, rwbarton, thomie, carter

GHC Trac Issues: #15335

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

17 months agoFix handling of unbound constructor names in TH #14627
Michael Sloan [Thu, 12 Jul 2018 14:07:28 +0000 (10:07 -0400)] 
Fix handling of unbound constructor names in TH #14627

Also adds a comment to UnboundVarE clarifying that it also is used for
unbound constructor identifiers, since that isn't very clear from the
name.

Test Plan: testsuite/tests/th/T14627.hs

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

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

17 months agoFix handling of ApplicativeDo in TH AST quotes
Michael Sloan [Thu, 12 Jul 2018 14:05:41 +0000 (10:05 -0400)] 
Fix handling of ApplicativeDo in TH AST quotes

See https://ghc.haskell.org/trac/ghc/ticket/14471

Also fixes a parenthesization bug in pprStmt when ret_stripped is True

Test Plan: tests added to testsuite

Trac issues: #14471

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

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

17 months agoAdd flag to show docs of valid hole fits
Matthías Páll Gissurarson [Thu, 12 Jul 2018 13:57:00 +0000 (09:57 -0400)] 
Add flag to show docs of valid hole fits

One issue with valid hole fits is that the function names can often be
opaque for the uninitiated, such as `($)`. This diff adds a new flag,
`-fshow-docs-of-hole-fits` that adds the documentation of the identifier
in question to the message, using the same mechanism as the `:doc`
command.

As an example, with this flag enabled, the valid hole fits for `_ ::
[Int] -> Int` will include:

```
Valid hole fits include
  head :: forall a. [a] -> a
    {-^ Extract the first element of a list, which must be non-empty.-}
    with head @Int
    (imported from ‘Prelude’ (and originally defined in ‘GHC.List’))
```

And one of the refinement hole fits, `($) _`, will read:

```
Valid refinement hole fits include
  ...
  ($) (_ :: [Int] -> Int)
      where ($) :: forall a b. (a -> b) -> a -> b
      {-^ Application operator.  This operator is redundant, since ordinary
          application @(f x)@ means the same as @(f '$' x)@. However, '$' has
          low, right-associative binding precedence, so it sometimes allows
          parentheses to be omitted; for example:

          > f $ g $ h x  =  f (g (h x))

          It is also useful in higher-order situations, such as @'map' ('$' 0) xs@,
          or @'Data.List.zipWith' ('$') fs xs@.

          Note that @($)@ is levity-polymorphic in its result type, so that
              foo $ True    where  foo :: Bool -> Int#
          is well-typed-}
      with ($) @'GHC.Types.LiftedRep @[Int] @Int
      (imported from ‘Prelude’ (and originally defined in ‘GHC.Base’))

```

Another example of where documentation can come in very handy, is when
working with the `lens` library.

When you compile
```
{-# OPTIONS_GHC -fno-show-provenance-of-hole-fits -fshow-docs-of-hole-fits #-}
module LensDemo where

import Control.Lens
import Control.Monad.State

newtype Test = Test { _value :: Int } deriving (Show)

value :: Lens' Test Int
value f (Test i) = Test <$> f i

updTest :: Test -> Test
updTest t = t &~ do
    _ value (1 :: Int)
```

You get:
```
  Valid hole fits include
    (#=) :: forall s (m :: * -> *) a b.
            MonadState s m =>
            ALens s s a b -> b -> m ()
      {-^ A version of ('Control.Lens.Setter..=') that works on 'ALens'.-}
      with (#=) @Test @(StateT Test Identity) @Int @Int
    (<#=) :: forall s (m :: * -> *) a b.
             MonadState s m =>
             ALens s s a b -> b -> m b
      {-^ A version of ('Control.Lens.Setter.<.=') that works on 'ALens'.-}
      with (<#=) @Test @(StateT Test Identity) @Int @Int
    (<*=) :: forall s (m :: * -> *) a.
             (MonadState s m, Num a) =>
             LensLike' ((,) a) s a -> a -> m a
      {-^ Multiply the target of a numerically valued 'Lens' into your 'Monad''s
          state and return the result.

          When you do not need the result of the multiplication,
          ('Control.Lens.Setter.*=') is more flexible.

          @
          ('<*=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
          ('<*=') :: ('MonadState' s m, 'Num' a) => 'Control.Lens.Iso.Iso'' s a -> a -> m a
          @-}
      with (<*=) @Test @(StateT Test Identity) @Int
    (<+=) :: forall s (m :: * -> *) a.
             (MonadState s m, Num a) =>
             LensLike' ((,) a) s a -> a -> m a
      {-^ Add to the target of a numerically valued 'Lens' into your 'Monad''s state
          and return the result.

          When you do not need the result of the addition,
          ('Control.Lens.Setter.+=') is more flexible.

          @
          ('<+=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
          ('<+=') :: ('MonadState' s m, 'Num' a) => 'Control.Lens.Iso.Iso'' s a -> a -> m a
          @-}
      with (<+=) @Test @(StateT Test Identity) @Int
    (<-=) :: forall s (m :: * -> *) a.
             (MonadState s m, Num a) =>
             LensLike' ((,) a) s a -> a -> m a
      {-^ Subtract from the target of a numerically valued 'Lens' into your 'Monad''s
          state and return the result.

          When you do not need the result of the subtraction,
          ('Control.Lens.Setter.-=') is more flexible.

          @
          ('<-=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
          ('<-=') :: ('MonadState' s m, 'Num' a) => 'Control.Lens.Iso.Iso'' s a -> a -> m a
          @-}
      with (<-=) @Test @(StateT Test Identity) @Int
    (<<*=) :: forall s (m :: * -> *) a.
              (MonadState s m, Num a) =>
              LensLike' ((,) a) s a -> a -> m a
      {-^ Modify the target of a 'Lens' into your 'Monad''s state by multipling a value
          and return the /old/ value that was replaced.

          When you do not need the result of the operation,
          ('Control.Lens.Setter.*=') is more flexible.

          @
          ('<<*=') :: ('MonadState' s m, 'Num' a) => 'Lens'' s a -> a -> m a
          ('<<*=') :: ('MonadState' s m, 'Num' a) => 'Iso'' s a -> a -> m a
          @-}
      with (<<*=) @Test @(StateT Test Identity) @Int
    (Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)

```

Which allows you to see at a glance what opaque operators like `(<<*=)`
and `(<#=)` do.

Reviewers: bgamari, sjakobi

Reviewed By: sjakobi

Subscribers: sjakobi, alexbiehl, rwbarton, thomie, carter

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

17 months agoMake boot work if ACLOCAL_PATH is not set
Neil Mitchell [Mon, 9 Jul 2018 15:17:57 +0000 (16:17 +0100)] 
Make boot work if ACLOCAL_PATH is not set

17 months agoFix gcdExtInteger (trac#15350)
Bodigrim [Fri, 6 Jul 2018 23:20:10 +0000 (00:20 +0100)] 
Fix gcdExtInteger (trac#15350)

17 months agoThe Types section in Core-Spec doc is out-dated
ningning [Fri, 6 Jul 2018 21:23:49 +0000 (17:23 -0400)] 
The Types section in Core-Spec doc is out-dated

17 months agoTrac #8581 users_guide/glasgow_exts section 10.7
AntC [Wed, 20 Jun 2018 11:17:31 +0000 (23:17 +1200)] 
Trac #8581 users_guide/glasgow_exts section 10.7

as per comments on the ticket; also linked to Haskell folk art of 'Smart constructors'.

17 months agoBump xhtml submodule to 3000.2.2.1
Ben Gamari [Wed, 11 Jul 2018 00:20:51 +0000 (20:20 -0400)] 
Bump xhtml submodule to 3000.2.2.1

17 months agoRegister 'haddockHTMLs' for inplace builds
Alec Theriault [Tue, 19 Jun 2018 17:12:47 +0000 (10:12 -0700)] 
Register 'haddockHTMLs' for inplace builds

17 months agoLink to iterate' doesn't work.
David Sanders [Fri, 29 Jun 2018 16:27:33 +0000 (09:27 -0700)] 
Link to iterate' doesn't work.

17 months agoAttempt to fix travis build
Michael Sloan [Fri, 29 Jun 2018 00:07:45 +0000 (17:07 -0700)] 
Attempt to fix travis build

17 months agoAdding missing 'no'
jhb563 [Tue, 26 Jun 2018 03:05:48 +0000 (20:05 -0700)] 
Adding missing 'no'

17 months agoCorrect Simple to Complex wording
Sasa Bogicevic [Thu, 21 Jun 2018 09:06:13 +0000 (11:06 +0200)] 
Correct Simple to Complex wording

17 months agoMinor refactoring in CmmUtils.mkLiveness
Ömer Sinan Ağacan [Thu, 12 Jul 2018 14:09:52 +0000 (17:09 +0300)] 
Minor refactoring in CmmUtils.mkLiveness

Test Plan: validate

Reviewers: bgamari, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

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

17 months agoUse IfaceAppArgs to store an IfaceAppTy's arguments
Ryan Scott [Wed, 11 Jul 2018 16:28:38 +0000 (12:28 -0400)] 
Use IfaceAppArgs to store an IfaceAppTy's arguments

Summary:
Currently, an `IfaceAppTy` has no way to tell whether its
argument is visible or not, so it simply treats all arguments as
visible, leading to #15330. We already have a solution for this
problem in the form of the `IfaceTcArgs` data structure, used by
`IfaceTyConApp` to represent the arguments to a type constructor.
Therefore, it makes sense to reuse this machinery for `IfaceAppTy`,
so this patch does just that.

This patch:

1. Renames `IfaceTcArgs` to `IfaceAppArgs` to reflect its more
   general purpose.
2. Changes the second field of `IfaceAppTy` from `IfaceType` to
   `IfaceAppArgs`, and propagates the necessary changes through. In
   particular, pretty-printing an `IfaceAppTy` now goes through the
   `IfaceAppArgs` pretty-printer, which correctly displays arguments
   as visible or not for free, fixing #15330.
3. Changes `toIfaceTypeX` and related functions so that when
   converting an `AppTy` to an `IfaceAppTy`, it flattens as many
   argument `AppTy`s as possible, and then converts those arguments
   into an `IfaceAppArgs` list, using the kind of the function
   `Type` as a guide. (Doing so minimizes the number of times we need
   to call `typeKind`, which is more expensive that finding the kind
   of a `TyCon`.)

Test Plan: make test TEST=T15330

Reviewers: goldfire, simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15330

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

17 months agoBetter Note [The well-kinded type invariant]
Simon Peyton Jones [Wed, 11 Jul 2018 11:05:20 +0000 (12:05 +0100)] 
Better Note [The well-kinded type invariant]

c.f. Trac #14873

17 months agoAdd test for Trac #15352
Simon Peyton Jones [Wed, 11 Jul 2018 11:04:46 +0000 (12:04 +0100)] 
Add test for Trac #15352

17 months agoRemove bad debugging output.
Richard Eisenberg [Wed, 11 Jul 2018 02:00:36 +0000 (22:00 -0400)] 
Remove bad debugging output.

The removed line could cause GHC to hang by printing a
knot-tied type.

17 months agoNote [Ordering of implicit variables]
Richard Eisenberg [Tue, 10 Jul 2018 22:03:09 +0000 (18:03 -0400)] 
Note [Ordering of implicit variables]

This addresses #14808

[ci skip]

17 months agoExpand and implement Note [The tcType invariant]
Richard Eisenberg [Thu, 5 Jul 2018 23:51:59 +0000 (19:51 -0400)] 
Expand and implement Note [The tcType invariant]

Read that note -- it's necessary to make sure that we can
always call typeKind without panicking. As discussed on #14873,
there were more checks and zonking to do, implemented here.
There are no known bugs fixed by this patch, but there are likely
unknown ones.

17 months agoKind-check CUSK associated types separately
Richard Eisenberg [Thu, 5 Jul 2018 19:09:50 +0000 (15:09 -0400)] 
Kind-check CUSK associated types separately

Previously, we kind-checked associated types while while still
figuring out the kind of a CUSK class. This caused trouble, as
documented in Note [Don't process associated types in kcLHsQTyVars]
in TcTyClsDecls. This commit moves this process after the initial
kind of the class is determined.

Fixes #15142.

Test case: indexed-types/should_compile/T15142.hs

17 months agoUnwrap casts before checking vars in eager unifier
Richard Eisenberg [Thu, 5 Jul 2018 18:21:43 +0000 (14:21 -0400)] 
Unwrap casts before checking vars in eager unifier

Previously, checking whether (tv |> co) ~ (tv |> co) got deferred,
because we looked for vars before stripping casts. (The left type
would get stripped, and then tv ~ (tv |> co) would scare the occurs-
checker.)

This opportunity for improvement presented itself in other work.
This is just an optimization. Some programs can now report more
errors simultaneously.

17 months agoOptional context for a quantified constraint
Simon Peyton Jones [Tue, 10 Jul 2018 11:55:21 +0000 (12:55 +0100)] 
Optional context for a quantified constraint

This is a documentation-only fix, addressing Trac #15354.

17 months agoAdd nakedSubstTy and use it in TcHsType.tcInferApps
Simon Peyton Jones [Mon, 9 Jul 2018 16:29:22 +0000 (17:29 +0100)] 
Add nakedSubstTy and use it in TcHsType.tcInferApps

This was a tricky one.

During type checking we maintain TcType:
   Note [The well-kinded type invariant]
That is, types are well-kinded /without/ zonking.

But in tcInferApps we were destroying that invariant by calling
substTy, which in turn uses smart constructors, which eliminate
apparently-redundant Refl casts.

This is horribly hard to debug beause they really are Refls and
so it "ought" to be OK to discard them. But it isn't, as the
above Note describes in some detail.

Maybe we should review the invariant?  But for now I just followed
it, tricky thought it is.

This popped up because (for some reason) when I fixed Trac #15343,
that exposed this bug by making test polykinds/T14174a fail (in
Trac #14174 which indeed has the same origin).

So this patch fixes a long standing and very subtle bug.

One interesting point: I defined nakedSubstTy in a few lines by
using the generic mapType stuff.  I note that the "normal"
TyCoRep.substTy does /not/ use mapType.  But perhaps it should:
substTy has lots of $! strict applications in it, and they could
all be eliminated just by useing the StrictIdentity monad.  And
that'd make it much easier to experiment with switching between
strict and lazy versions.

17 months agoMore tc-tracing
Simon Peyton Jones [Mon, 9 Jul 2018 16:27:47 +0000 (17:27 +0100)] 
More tc-tracing

And I added some HasDebugCallStack constraints to tcExpectedKind
and related functions too.

17 months agoFix decompsePiCos and visible type application
Simon Peyton Jones [Mon, 9 Jul 2018 16:20:06 +0000 (17:20 +0100)] 
Fix decompsePiCos and visible type application

Trac #15343 was caused by two things

First, in TcHsType.tcHsTypeApp, which deals with the type argment
in visible type application, we were failing to call
solveLocalEqualities. But the type argument is like a user type
signature so it's at least inconsitent not to do so.

I thought that would nail it.  But it didn't. It turned out that we
were ended up calling decomposePiCos on a type looking like this
    (f |> co) Int

where co :: (forall a. ty) ~ (t1 -> t2)

Now, 'co' is insoluble, and we'll report that later.  But meanwhile
we don't want to crash in decomposePiCos.

My fix involves keeping track of the type on both sides of the
coercion, and ensuring that the outer shape matches before
decomposing.  I wish there was a simpler way to do this. But
I think this one is at least robust.

I suppose it is possible that the decomposePiCos fix would
have cured the original report, but I'm leaving the one-line
tcHsTypeApp fix in too because it just seems more consistent.

17 months agoMore refactoring in TcValidity
Simon Peyton Jones [Thu, 5 Jul 2018 16:09:47 +0000 (17:09 +0100)] 
More refactoring in TcValidity

This patch responds to Trac #15334 by making it an error to
write an instance declaration for a tuple constraint like
(Eq [a], Show [a]).

I then discovered that instance validity checking was
scattered betweeen TcInstDcls and TcValidity, so I took
the time to bring it all together, into
  TcValidity.checkValidInstHead

In doing so I discovered that there are lot of special
cases.   I have not changed them, but at least they are
all laid out clearly now.

17 months agoRefactor coercion rule
ningning [Tue, 10 Jul 2018 00:02:03 +0000 (20:02 -0400)] 
Refactor coercion rule

Summary:
The patch is an attempt on #15192.

It defines a new coercion rule

```
 | GRefl Role Type MCoercion
```

which correspondes to the typing rule

```
     t1 : k1
  ------------------------------------
  GRefl r t1 MRefl: t1 ~r t1

     t1 : k1       co :: k1 ~ k2
  ------------------------------------
  GRefl r t1 (MCo co) : t1 ~r t1 |> co
```

MCoercion wraps a coercion, which might be reflexive (MRefl)
or not (MCo co). To know more about MCoercion see #14975.

We keep Refl ty as a special case for nominal reflexive coercions,
naemly, Refl ty :: ty ~n ty.

This commit is meant to be a general performance improvement,
but there are a few regressions. See #15192, comment:13 for
more information.

Test Plan: ./validate

Reviewers: bgamari, goldfire, simonpj

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15192

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

17 months agoDefine an Outputable MCoercion instance
Ryan Scott [Sun, 8 Jul 2018 16:20:53 +0000 (12:20 -0400)] 
Define an Outputable MCoercion instance

Summary: I needed this when debugging #15346.

Test Plan: Does it compile? It does? Cool.

Reviewers: bgamari, mpickering

Reviewed By: mpickering

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15311

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

17 months agoRevert "rts: Enable two-step allocator on FreeBSD"
Ben Gamari [Fri, 6 Jul 2018 18:12:03 +0000 (14:12 -0400)] 
Revert "rts: Enable two-step allocator on FreeBSD"

This reverts commit 8736715857d08cc1f88d766c257b39c05df20639.

I hadn't intended on merging this.

17 months agorts: Enable two-step allocator on FreeBSD
Ben Gamari [Fri, 6 Jul 2018 15:11:20 +0000 (11:11 -0400)] 
rts: Enable two-step allocator on FreeBSD

Previously we would prevent any operating system not providing the
MEM_NORESERVE flag
from using the two-step allocator. Afterall, Linux will reserve
swap-space for
a mapping unless this flag is given, which is most certainly not what
we want.

However, it seems that FreeBSD provides the reservation-only mapping
behavior
that we expect despite not providing the MEM_NORESERVE macro. In fact,
it
provided the macro until 2014, when it was removed on account of not
being
implemented in the kernel. However, empirical evidence suggests that
just plain
mmap does what we want.

Reviewers: erikd, simonmar

Subscribers: rwbarton, thomie, erikd, carter

GHC Trac Issues: #15348

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

17 months agotestsuite: Add test for #15053
Ben Gamari [Fri, 6 Jul 2018 15:01:38 +0000 (11:01 -0400)] 
testsuite: Add test for #15053

Reviewers: Phyx

Reviewed By: Phyx

Subscribers: Phyx, rwbarton, thomie, carter

GHC Trac Issues: #15053

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

17 months agoFix for built-in Natural literals desugaring
Sylvain Henry [Fri, 6 Jul 2018 15:01:14 +0000 (11:01 -0400)] 
Fix for built-in Natural literals desugaring

The recent patch "Built-in Natural literals in Core"
(https://phabricator.haskell.org/rGHCfe770c211631e7b4c9b0b1e88ef9b6046c6
585ef) introduced a regression when desugaring large numbers.

This patch fixes it and adds a regression test.

Reviewers: hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15301

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

17 months agoSimplify lintIdUnfolding
Matthew Pickering [Fri, 6 Jul 2018 15:00:40 +0000 (11:00 -0400)] 
Simplify lintIdUnfolding

The logic for `DFunUnfolding` seemed quite confusing and unecessary. A
simpler strategy uses `maybeUnfoldingTemplate`, as that is what is
actually used when doing inlining and checking that has the right type.

Reviewers: simonpj, goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

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

17 months agoAdd a broken test for lingering state from TH unique names #9693
Michael Sloan [Fri, 6 Jul 2018 15:00:10 +0000 (11:00 -0400)] 
Add a broken test for lingering state from TH unique names #9693

The stderr output is

```
Loading with T9693_initial.hs

T9693_main.hs:4:1:
    Same exact name in multiple name-spaces:
      type constructor or class ‘X’, declared at: T9693_main.hs:4:1
      data constructor ‘X’, declared at: T9693_main.hs:4:1
      Probable cause: you bound a unique Template Haskell name (NameU),
      perhaps via newName, in different name-spaces.
      If that's it, then -ddump-splices might be useful
Reloading with T9693_modified.hs

T9693_main.hs:1:1:
    Data constructor ‘X’ used as a type constructor
```

The strange thing is that the modified version uses (mkName "X"), which should
be fine for simultaneous use in both a data constructor and type constructor.
Indeed, on a fresh load, the modified version works fine. So there is some sort
of state left over from the prior load when (newName "X") was used.

Test Plan: testsuite/tests/th/T9693.script

Reviewers: bgamari, sighingnow, RyanGlScott

Reviewed By: sighingnow, RyanGlScott

Subscribers: RyanGlScott, sighingnow, rwbarton, thomie, carter

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

17 months agoMark AutoDeriveTypeable as deprecated
Krzysztof Gogolewski [Fri, 6 Jul 2018 14:59:43 +0000 (10:59 -0400)] 
Mark AutoDeriveTypeable as deprecated

Test Plan: validate

Reviewers: bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15342

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

17 months agousers guide: Mention -fprint-typechecker-elaboration in -ddump-tc docs
Ben Gamari [Fri, 6 Jul 2018 14:58:15 +0000 (10:58 -0400)] 
users guide: Mention -fprint-typechecker-elaboration in -ddump-tc docs

Reviewers: mpickering

Reviewed By: mpickering

Subscribers: mpickering, rwbarton, thomie, carter

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

17 months agocircleci: Detect core count
Ben Gamari [Fri, 6 Jul 2018 14:57:55 +0000 (10:57 -0400)] 
circleci: Detect core count

Test Plan: Try `./validate`, CircleCI build; make sure core count
detection works in both cases.

Reviewers: alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #14470

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

17 months agoRemove BUILD_DPH, not used
Krzysztof Gogolewski [Fri, 6 Jul 2018 17:04:30 +0000 (19:04 +0200)] 
Remove BUILD_DPH, not used

17 months agoMake a variant of mkCastErr for kind coercions
Ryan Scott [Fri, 6 Jul 2018 14:53:00 +0000 (10:53 -0400)] 
Make a variant of mkCastErr for kind coercions

Summary:
I discovered when debugging #15346 that the Core Lint error
message for ill typed casts always mentions types of enclosed
//expressions//, even if the thing being casted is actually a type.
This generalizes `mkCastErr` a bit to allow it to give the proper
labelling for kind coercions.

Test Plan: Run on failing program in #15346, read the Core Lint error

Reviewers: goldfire, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie, carter

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

17 months agoAccept new stdout for tcrun045
Ryan Scott [Thu, 5 Jul 2018 13:44:18 +0000 (09:44 -0400)] 
Accept new stdout for tcrun045

The stdout produced by test tcrun045 changed in commit
45f44e2c9d5db2f25c52abb402f197c20579400f. The change appears to be
benign, so I've decided to accept it.

17 months agoComment out a pprTrace
Ryan Scott [Thu, 5 Jul 2018 12:54:03 +0000 (08:54 -0400)] 
Comment out a pprTrace

This was introduced in commit
45f44e2c9d5db2f25c52abb402f197c20579400f, but it results in lots of
"check_class ~" messages when validating. I've decided to just
comment it out.

17 months agoMake ppr_tc_args aware of -fprint-explicit-kinds
Ryan Scott [Thu, 5 Jul 2018 12:52:20 +0000 (08:52 -0400)] 
Make ppr_tc_args aware of -fprint-explicit-kinds

Summary:
`ppr_tc_args` was printing invisible kind arguments even
when `-fprint-explicit-kinds` wasn't enabled. Easily fixed.

Test Plan: make test TEST=T15341

Reviewers: goldfire, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie, carter

GHC Trac Issues: #15341

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

17 months agoFix #15331 with careful blasts of parenthesizeHsType
Ryan Scott [Thu, 5 Jul 2018 12:51:43 +0000 (08:51 -0400)] 
Fix #15331 with careful blasts of parenthesizeHsType

Summary:
Another `-ddump-splices` bug that can be solved with more
judicious use of parentheses.

Test Plan: make test TEST=T15331

Reviewers: goldfire, bgamari, alanz, tdammers

Reviewed By: tdammers

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15331

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

17 months agoParenthesize rank-n contexts in Convert
Ryan Scott [Thu, 5 Jul 2018 12:50:56 +0000 (08:50 -0400)] 
Parenthesize rank-n contexts in Convert

Summary: A simple oversight.

Test Plan: make test TEST=T15324

Reviewers: goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #15324

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