ghc.git
13 months agoAdding almost devoid check for covar in ForAllCo
Ningning Xie [Fri, 19 Oct 2018 09:10:08 +0000 (17:10 +0800)] 
Adding almost devoid check for covar in ForAllCo

Summary:
For the sake of consistency of the dependent core, there is a restriction on
where a coercion variable can appear in ForAllCo: the coercion variable can
appear nowhere except in coherence coercions.

Currently this restriction is missing in Core. The goal of this patch is to add
the missing restriction.

After discussion, we decide: coercion variables can appear nowhere except in
`GRefl` and `Refl`. Relaxing the restriction to include `Refl` should not break
consistency, we premuse.

Test Plan: ./validate

Reviewers: goldfire, simonpj, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15757

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

13 months agoFix T15729 in master
Zejun Wu [Wed, 17 Oct 2018 19:07:07 +0000 (15:07 -0400)] 
Fix T15729 in master

Summary:
It failed when running ./validate on master
T15729 is added by me in D5219 recently,
it failed when GHCi is dynamicly linked:

```
Stderr ( T15729 ):
/bin/ld.gold: error: bss.o: requires unsupported dynamic reloc 11;
recompile with -fPIC
collect2: error: ld returned 1 exit status
`gcc' failed in phase `Linker'. (Exit code: 1)
```

Test Plan: Both tests pass now.

Reviewers: simonmar, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

13 months agotestsuite: Fix non-canonical Monoid instance in T3001-2
Ben Gamari [Wed, 17 Oct 2018 19:04:31 +0000 (15:04 -0400)] 
testsuite: Fix non-canonical Monoid instance in T3001-2

13 months agoFix #15761 by adding parens
Richard Eisenberg [Wed, 17 Oct 2018 14:46:21 +0000 (10:46 -0400)] 
Fix #15761 by adding parens

This was just a pretty-printer infelicity. Fixed now.

Test case: printer/T15761

13 months agobase: Fill in TBAs in changelog
Ben Gamari [Mon, 15 Oct 2018 17:59:20 +0000 (13:59 -0400)] 
base: Fill in TBAs in changelog

I've added a check in my release script to ensure that this doesn't happen in
the future.

13 months agoAdd a strict version of foldMap to Foldable
Simon Jakobi [Mon, 15 Oct 2018 17:55:37 +0000 (13:55 -0400)] 
Add a strict version of foldMap to Foldable

Summary:
Original proposal by Andrew Martin:
https://mail.haskell.org/pipermail/libraries/2018-June/028852.html

Reviewers: andrewthad, hvr, bgamari, alpmestan, tdammers

Reviewed By: bgamari, alpmestan, tdammers

Subscribers: alpmestan, rwbarton, thomie, carter

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

13 months agoUpdate integer_gmp_gcdext documentation.
David Eichmann [Mon, 15 Oct 2018 17:54:49 +0000 (13:54 -0400)] 
Update integer_gmp_gcdext documentation.

Reviewers: hvr, bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

GHC Trac Issues: #15350

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

13 months agoFix BLACKHOLE inspection in RtClosureInspect
Ömer Sinan Ağacan [Mon, 15 Oct 2018 17:53:21 +0000 (13:53 -0400)] 
Fix BLACKHOLE inspection in RtClosureInspect

When inspecing a BLACKHOLE if the BLACKHOLE points to a TSO or a
BLOCKING_QUEUE we should return a suspension to the BLACKHOLE itself
(instead of returning a suspension to the indirectee). The reason is
because in the debugger when we want to evaluate this term we need to
enter the BLACKHOLE and not to the TSO or BLOCKING_QUEUE. See the
runtime panic caused by this in #8316.

Note that while with this patch we do the right thing to evaluate
thunks in GHCi, evaluating thunks that are owned by the evaluator thread
in a breakpoint will cause a deadlock as we don't release the breakMVar,
which is what blocks the evaluator thread from continuing with
evaluation. So the GHCi thread will enter the BLACKHOLE, but owner of
the BLACKHOLE is also blocked.

Reviewers: simonmar, hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #8316

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

13 months agoAllocate bss section within proper range of other sections
Zejun Wu [Mon, 15 Oct 2018 17:52:53 +0000 (13:52 -0400)] 
Allocate bss section within proper range of other sections

Allocate bss section within proper range of other sections:

* when `+RTS -xp` is passed, allocate it contiguously as we did for
  jump islands
* when we mmap the code to lower 2Gb, we should allocate bss section
  there too

This depends on {D5195}

Test Plan:
1. `./validate`

2.

with

```
DYNAMIC_GHC_PROGRAMS = NO
DYNAMIC_BY_DEFAULT = NO
```

`TEST="T15729" make test` passed in both linux and macos.

3.

Also test in a use case where we used to encouter error like:

```
ghc-iserv-prof: R_X86_64_PC32 relocation out of range: (noname) =
b90282ba
```

and now, everything works fine.

Reviewers: simonmar, bgamari, angerman, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15729

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

13 months agoAdd a RTS option -xp to load PIC object anywhere in address space
Zejun Wu [Mon, 15 Oct 2018 17:52:36 +0000 (13:52 -0400)] 
Add a RTS option -xp to load PIC object anywhere in address space

Add a RTS option -xp to load PIC object anywhere in address space. We do
this by relaxing the requirement of <0x80000000 result of
`mmapForLinker` and implying USE_CONTIGUOUS_MMAP.

We also need to change calls to `ocInit` and `ocGetNames` to avoid
dangling pointers when the address of `oc->image` is changed by
`ocAllocateSymbolExtra`.

Test Plan:
```
$ uname -a
Linux localhost 4.18.8-arch1-1-ARCH #1 SMP PREEMPT Sat Sep 15 20:34:48
UTC 2018 x86_64 GNU/Linux
$ cat mk/build.mk
DYNAMIC_GHC_PROGRAMS = NO
DYNAMIC_BY_DEFAULT = NO

GhcRTSWays += thr_debug
EXTRA_HC_OPTS += -debug
WAY_p_HC_OPTS += -fPIC -fexternal-dynamic-refs
$ inplace/bin/ghc-stage2 --interactive -prof +RTS -xp
GHCi, version 8.7.20180928: http://www.haskell.org/ghc/  :? for help
ghc-stage2: R_X86_64_32 relocation out of range:
ghczmprim_GHCziTypes_ZMZN_closure = 7f690bffab59
Recompile
/data/users/watashi/ghc/libraries/ghc-prim/dist-install/build/HSghc-prim
-0.5.3.o with -fPIC -fexternal-dynamic-refs.
ghc-stage2: unable to load package `ghc-prim-0.5.3'
$ strace -f -e open,mmap inplace/bin/ghc-stage2 --interactive -prof
-fexternal-interpreter  -opti+RTS -opti-xp
...
[pid 1355283]
open("/data/users/watashi/ghc/libraries/base/dist-install/build/libHSbas
e-4.12.0.0_p.a", O_RDONLY) = 14
[pid 1355283] mmap(NULL, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a84842000
[pid 1355283]
open("/data/users/watashi/ghc/libraries/base/dist-install/build/libHSbas
e-4.12.0.0_p.a", O_RDONLY) = 14
[pid 1355283] mmap(NULL, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a84676000
...
Prelude> System.Posix.Process.getProcessID
...
[pid 1355283]
open("/data/users/watashi/ghc/libraries/unix/dist-install/build/libHSuni
x-2.7.2.2_p.a", O_RDONLY) = 14
[pid 1355283] mmap(NULL, 45056, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a67d60000
[pid 1355283]
open("/data/users/watashi/ghc/libraries/unix/dist-install/build/libHSuni
x-2.7.2.2_p.a", O_RDONLY) = 14
[pid 1355283] mmap(NULL, 57344, PROT_READ|PROT_WRITE|PROT_EXEC,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f6a67d52000
...
```

```
$ uname -a
Darwin watashis-iMac.local 18.0.0 Darwin Kernel Version 18.0.0: Wed Aug
22 20:13:40 PDT 2018; root:xnu-4903.201.2~1/RELEASE_X86_64 x86_64
$ mv
/Users/watashi/gao/ghc/libraries/integer-gmp/dist-install/build/HSintege
r-gmp-1.0.2.0.o{,._DISABLE_GHC_ISSUE_15105}
$ inplace/bin/ghc-stage2 --interactive  +RTS -xp
GHCi, version 8.7.20181003: http://www.haskell.org/ghc/  :? for help
Prelude> System.Posix.Process.getProcessID
42791
Prelude> Data.Set.fromList [1 .. 10]
fromList [1,2,3,4,5,6,7,8,9,10]
Prelude>
Leaving GHCi.
$ inplace/bin/ghc-stage2 --interactive -prof -fexternal-interpreter
GHCi, version 8.7.20181003: http://www.haskell.org/ghc/  :? for help
Prelude> System.Posix.Process.getProcessID
42806
Prelude> Data.Set.fromList [1 .. 10]
fromList [1,2,3,4,5,6,7,8,9,10]
Prelude>
Leaving GHCi.
```

Also test with something that used to hit the 2Gb limit and it loads
and runs without problem.

Reviewers: simonmar, bgamari, angerman, Phyx, hvr, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

13 months agoEnable -Wcompat=error in the testsuite
Vladislav Zavialov [Mon, 15 Oct 2018 17:52:12 +0000 (13:52 -0400)] 
Enable -Wcompat=error in the testsuite

Enabling -Werror=compat in the testsuite allows us to easily see the
impact that a new warning has on code. It also means that in the period
between adding the warning and making the actual breaking change, all
new test cases that are being added to the testsuite will be
forwards-compatible. This is good because it will make the actual
breaking change contain less irrelevant testsuite updates.

Things that -Wcompat warns about are things that are going to break in
the future, so we can be proactive and keep our testsuite
forwards-compatible.

This patch consists of two main changes:

* Add `TEST_HC_OPTS += -Werror=compat` to the testsuite configuration.
* Fix all broken test cases.

Test Plan: Validate

Reviewers: hvr, goldfire, bgamari, simonpj, RyanGlScott

Reviewed By: goldfire, RyanGlScott

Subscribers: rwbarton, carter

GHC Trac Issues: #15278

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

13 months agoghc-heap: Fix writing closures on big endian
Peter Trommler [Mon, 15 Oct 2018 17:51:53 +0000 (13:51 -0400)] 
ghc-heap: Fix writing closures on big endian

We need to write the closure type as a HalfWord not
an Int. On big endian systems the closure type ends up being zero
(the upper word of the Int) making the closure an invalid object.

Test Plan: validate (preferably on a big endian system)

Reviewers: bgamari, hvr, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

13 months agoGenerate correct relocation for external cost centre
Zejun Wu [Mon, 15 Oct 2018 17:51:24 +0000 (13:51 -0400)] 
Generate correct relocation for external cost centre

We used to always generate direct access for cost centre labels.  We
fixed this by generating indirect data load for cost centre defined in
external module.

Test Plan:
The added test used to fail with error message
```
/bin/ld.gold: error: T15723B.o: requires dynamic R_X86_64_PC32 reloc
against 'T15723A_foo1_EXPR_cc' which may overflow at runtime; recompile
with -fPIC
```
and now passes.

Also check that `R_X86_64_PC32` is generated for CostCentre from the
same module and `R_X86_64_GOTPCREL` is generated for CostCentre from
external module:
```
$ objdump -rdS T15723B.o
0000000000000028 <T15723B_test_info>:
  28:   48 8d 45 f0             lea    -0x10(%rbp),%rax
  2c:   4c 39 f8                cmp    %r15,%rax
  2f:   72 70                   jb     a1 <T15723B_test_info+0x79>
  31:   48 83 ec 08             sub    $0x8,%rsp
  35:   48 8d 35 00 00 00 00    lea    0x0(%rip),%rsi        # 3c
<T15723B_test_info+0x14>
                        38: R_X86_64_PC32
T15723B_test1_EXPR_cc-0x4
  3c:   49 8b bd 60 03 00 00    mov    0x360(%r13),%rdi
  43:   31 c0                   xor    %eax,%eax
  45:   e8 00 00 00 00          callq  4a <T15723B_test_info+0x22>
                        46: R_X86_64_PLT32      pushCostCentre-0x4
  4a:   48 83 c4 08             add    $0x8,%rsp
  4e:   48 ff 40 30             incq   0x30(%rax)
  52:   49 89 85 60 03 00 00    mov    %rax,0x360(%r13)
  59:   48 83 ec 08             sub    $0x8,%rsp
  5d:   49 8b bd 60 03 00 00    mov    0x360(%r13),%rdi
  64:   48 8b 35 00 00 00 00    mov    0x0(%rip),%rsi        # 6b
<T15723B_test_info+0x43>
                        67: R_X86_64_GOTPCREL   T15723A_foo1_EXPR_cc-0x4
  6b:   31 c0                   xor    %eax,%eax
  6d:   e8 00 00 00 00          callq  72 <T15723B_test_info+0x4a>
                        6e: R_X86_64_PLT32      pushCostCentre-0x4
  72:   48 83 c4 08             add    $0x8,%rsp
  76:   48 ff 40 30             incq   0x30(%rax)
```

Reviewers: simonmar, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15723

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

13 months agoFix #15738 by defining (and using) parenthesizeHsContext
Ryan Scott [Mon, 15 Oct 2018 17:49:11 +0000 (13:49 -0400)] 
Fix #15738 by defining (and using) parenthesizeHsContext

With `QuantifiedConstraints`, `forall`s can appear in more
nested positions than they could before, but `Convert` and the TH
pretty-printer were failing to take this into account. On the
`Convert` side, this is fixed by using a `parenthesizeHsContext`
to parenthesize singleton quantified constraints that appear to the
left of a `=>`. (A similar fix is applied to the TH pretty-printer.)

Test Plan: make test TEST=T15738

Reviewers: goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15738

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

13 months agoFix cardinality change of fields in addDataConStrictness
Ömer Sinan Ağacan [Mon, 15 Oct 2018 17:48:53 +0000 (13:48 -0400)] 
Fix cardinality change of fields in addDataConStrictness

Test Plan: This validates

Reviewers: simonpj, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

13 months agoFix #12430 by expanding type synonyms in injTyVarsOfType
Ryan Scott [Mon, 15 Oct 2018 17:48:21 +0000 (13:48 -0400)] 
Fix #12430 by expanding type synonyms in injTyVarsOfType

We weren't expanding type synonyms when determining the
injective type variables of a type, leading to certain non-injective
families being mistakenly labeled as injective (#12430). Easily fixed
with a tactical use of `coreView`.

Test Plan: make test TEST=T12430

Reviewers: bgamari, goldfire

Reviewed By: goldfire

Subscribers: goldfire, rwbarton, carter

GHC Trac Issues: #12430

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

13 months agoSurprising error message with bang pattern
Sasa Bogicevic [Mon, 15 Oct 2018 17:47:48 +0000 (13:47 -0400)] 
Surprising error message with bang pattern

Reviewers: bgamari, alanz

Reviewed By: bgamari

Subscribers: sgraf, mpickering, rwbarton, thomie, carter

GHC Trac Issues: #13600

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

13 months agoTypeable: Only render saturated tuple types with tuple syntax
Ben Gamari [Mon, 15 Oct 2018 17:36:16 +0000 (13:36 -0400)] 
Typeable: Only render saturated tuple types with tuple syntax

This isn't as efficient as it could be since it needs to compute the
kind of the type. However, this is `show` so there shouldn't be any
particular expectation of speed.

Fixes #14341.

Test Plan: Validate

Reviewers: hvr

Subscribers: monoidal, rwbarton, carter

GHC Trac Issues: #14341

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

13 months agoCleanup boot and validate
Krzysztof Gogolewski [Mon, 15 Oct 2018 17:32:54 +0000 (13:32 -0400)] 
Cleanup boot and validate

- Remove dph from validate; dph was removed
- The required-tag argument to boot was used only for dph, remove
- check_boot_packages() was not called at all, and didn't work.
  I fixed it based on previous Perl version.

Test Plan: Harbormaster

Reviewers: bgamari, thomie

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

13 months agoFix plugin tests requirements
Tamar Christina [Mon, 15 Oct 2018 17:23:51 +0000 (13:23 -0400)] 
Fix plugin tests requirements

Unfortunately the implementation has confused the ability to make
dynamic libraries with dynamic way.
This constraint is only true for systems that require `-fPIC` for
shared libraries.

Since the implementation has this implicit assumption, mark the tests
as requiring dynway.

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: simonpj, rwbarton, carter

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

13 months agoDeprecate -fllvm-pass-vectors-in-regs
Ben Gamari [Mon, 15 Oct 2018 17:17:46 +0000 (13:17 -0400)] 
Deprecate -fllvm-pass-vectors-in-regs

Summary:
The behavior previously enabled by this flag is as been the default
since 8.6.1.

Reviewers: simonmar

Subscribers: rwbarton, carter

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

13 months agoCorrect typo "Deppendency" -> Dependency
Nathan van Doorn [Mon, 15 Oct 2018 09:41:37 +0000 (10:41 +0100)] 
Correct typo "Deppendency" -> Dependency

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

13 months agoFix test for GCC support for atomics in Autotools
Ondra Pelech [Sun, 23 Sep 2018 21:14:53 +0000 (23:14 +0200)] 
Fix test for GCC support for atomics in Autotools

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

13 months agoUse an accumulator version of tyCoVarsOfType
Tobias Dammers [Mon, 15 Oct 2018 08:26:31 +0000 (10:26 +0200)] 
Use an accumulator version of tyCoVarsOfType

Summary:
This is part 1 from #14880: factor out a worker for the tyCoVarsOf... family of
function, implementing them in terms of VarSet, but with accumulator-style
(like in `FV`) built in, and with the same kind of pre-insert lookup; this
has shown to perform better than either FV or plain VarSet in this particular
scenario.

Original notes from simonpj:

In TyCoRep we now have tyCoVarsOfType implemented

1) Using FV -- this is the baseline version in GHC today

2) Using VarSets via unionVarSet

3) Using VarSets in accumulator-style

In this patch (3) is enabled.

When compiling perf/compiler/T5631 we get

         Compiler allocs
   (1)   1,144M
   (2)   1,175M
   (3)   1,142M

The key new insight in (3) is this:

  ty_co_vars_of_type (TyVarTy v) is acc
    | v `elemVarSet` is  = acc
    | v `elemVarSet` acc = acc   <---- NB!
    | otherwise          = ty_co_vars_of_type (tyVarKind v) is (extendVarSet acc v)

Notice the second line! If the variable is already in the
accumulator, don't re-add it.  This makes big difference.
Without it, allocation is 1,169M or so.

One cause is that we only take the free vars of its kind once;
that problem will go away when we do the main part of #14088 and
close over kinds /afterwards/.  But still, another cause is perhaps
that every insert into a set overwrites the previous item, and so
allocates a new path to the item; it's not a no-op even if the
item is there already.

Why use (3) rather than (1)?  Becuase it just /has/ to
be better;

* FV carries around an InterestingVarFun, which does nothing
  useful here, but is tested at every variable

* FV carries around a [Var] for the deterministic version.

For this very hot operation (finding free vars) I think it
makes sense to have speical purpose code.

On the way I also simplified the (less used) coVarsOfType/Co family
to use FV, by making serious use of the InterestingVarFun!

Test Plan: validate, nofib

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #14880

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

13 months agoFix #15725 with an extra Sym
Ryan Scott [Mon, 15 Oct 2018 08:25:02 +0000 (10:25 +0200)] 
Fix #15725 with an extra Sym

Summary:
We were adding a `Sym` to one argument in the `InstCo`
case of `optCoercion` but not another, leading to the two arguments
to misaligned when combined via `Trans`. This fixes the issue with
a well targeted use of `wrapSym`.

Test Plan: make test TEST=T15725

Reviewers: goldfire, ningning, bgamari

Reviewed By: goldfire, ningning

Subscribers: rwbarton, carter

GHC Trac Issues: #15725

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

14 months agoFix typo in documentation
Jan Path [Tue, 2 Oct 2018 13:39:36 +0000 (15:39 +0200)] 
Fix typo in documentation

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

14 months agoMinor documentation markup fix in HsExpr.hs
Josh Price [Mon, 8 Oct 2018 18:58:27 +0000 (14:58 -0400)] 
Minor documentation markup fix in HsExpr.hs

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

14 months agoAdd RubbishLit for absent bindings of UnliftedRep
Sebastian Graf [Sun, 14 Oct 2018 18:32:40 +0000 (20:32 +0200)] 
Add RubbishLit for absent bindings of UnliftedRep

Summary:
Trac #9279 reminded us that the worker wrapper transformation copes
really badly with absent unlifted boxed bindings.

As `Note [Absent errors]` in WwLib.hs points out, we can't just use
`absentError` for unlifted bindings because there is no bottom to hide
the error in.
So instead, we synthesise a new `RubbishLit` of type
`forall (a :: TYPE 'UnliftedRep). a`, which code-gen may subsitute for
any boxed value. We choose `()`, so that there is a good chance that
the program crashes instead instead of leading to corrupt data, should
absence analysis have been too optimistic (#11126).

Reviewers: simonpj, hvr, goldfire, bgamari, simonmar

Reviewed By: simonpj

Subscribers: osa1, rwbarton, carter

GHC Trac Issues: #15627, #9279, #4306, #11126

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

14 months agorts: Stop tracing environment variables (fixes #15371)
Mitsutoshi Aoe [Sun, 14 Oct 2018 18:23:21 +0000 (20:23 +0200)] 
rts: Stop tracing environment variables (fixes #15371)

Summary:
This tracing may cause a security issue as some external tools
out there expects user to set credentials in environment variables.

Reviewers: bgamari, erikd, simonmar, monoidal

Reviewed By: monoidal

Subscribers: tdammers, rwbarton, carter

GHC Trac Issues: #15371

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

14 months agoFix dataToTag# comment syntax again (primops.txt.pp)
Ömer Sinan Ağacan [Fri, 12 Oct 2018 17:49:50 +0000 (20:49 +0300)] 
Fix dataToTag# comment syntax again (primops.txt.pp)

14 months agoInclude -fwarn-star-is-type in -Wcompat
Vladislav Zavialov [Fri, 12 Oct 2018 15:15:26 +0000 (11:15 -0400)] 
Include -fwarn-star-is-type in -Wcompat

According to the deprecation schedule in the accepted proposal,
the first step is to include `-fwarn-star-is-type` in `-Wcompat`.

Test Plan: Validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15476

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

14 months agoComments about dataToTag# only
Simon Peyton Jones [Fri, 12 Oct 2018 15:04:57 +0000 (16:04 +0100)] 
Comments about dataToTag# only

14 months agoSupport builtin classes like KnownNat in backpack
Piyush P Kurur [Tue, 9 Oct 2018 14:14:15 +0000 (10:14 -0400)] 
Support builtin classes like KnownNat in backpack

This commit allows backpack signatures to enforce constraints like
KnownNat
on data types.  Thus it fixes #15379.  There were two important
differences in the
way GHC used to handle classes like KnowNat

1.  Hand crafted instances of `KnownNat` were  forbidden, and

2. The dictionary for an  instance `KnownNat T` was generated on the
fly.

For supporting backpack both these points have to be revisited.

Disallowing instances of KnownNat
--------------------------------------------

Users were disallowed to declare instances of certain builtin classes
like KnownNat for obvious safety reasons --- when we use the
constraint like `KnownNat T`, we want T to be associated to a natural
number. However, due to the reuse of this code while processing backpack
signatures, `instance KnownNat T` were being disallowed even in module
signature files.

There is an important difference when it comes to instance declarations
in a signature file. Consider the signature `Abstract` given below

```
signature Abstract where
  data T :: Nat
  instance KnownNat T

```

Inside a signature like `Abstract`, the `instance Known T` is not really
creating an instance but rather demanding any module that implements
this signature to enforce the constraint `KnownNat` on its type
T.  While hand crafted KnownNat instances continued to be prohibited in
modules,
this commit ensures that it is not forbidden while handling signatures.

Resolving Dictionaries
----------------------------

Normally GHC expects any instance `T` of class `KnownNat` to eventually
resolve
to an integer and hence used to generate the evidence/dictionary for
such instances
on the fly as in when it is required. However, when backpack module and
signatures are involved
It is not always possible to resolve the type to a concrete integer
utill the mixin stage. To illustrate
consider again the  signature `Abstract`

> signature Abstract where
>   data T :: Nat
>   instance KnownNat T

and a module `Util` that depends on it:

> module Util where
>     import Abstract
>     printT :: IO ()
>     printT = do print $ natVal (Proxy :: Proxy T)

Clearly, we need to "use" the dictionary associated with `KnownNat T`
in the module `Util`, but it is too early for the compiler to produce
a real dictionary as we still have not fixed what `T` is. Only when we
mixin a concrete module

> module Concrete where
>   type T = 42

do we really get hold of the underlying integer.

In this commit, we make the following changes in the resolution of
instance dictionary
for constraints like `KnownNat T`

1. If T is indeed available as a type alias for an integer constant,
   generate the dictionary on the fly as before, failing which

2. Do not give up as before but look up the type class environment for
the evidence.

This was enough to make the resolution of `KnownNat` dictionaries work
in the setting of Backpack as
when actual code is generated, the signature Abstract (due to the
`import Abstract` ) in `Util` gets
replaced by an actual module like Concrete, and resolution happens as
before.

Everything that we said for `KnownNat` is applicable for `KnownSymbol`
as well.

Reviewers: bgamari, ezyang, goldfire, simonpj

Reviewed By: simonpj

Subscribers: simonpj, ezyang, rwbarton, thomie, carter

GHC Trac Issues: #15379

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

14 months agoRe-enable test T14251
Ömer Sinan Ağacan [Wed, 10 Oct 2018 18:57:03 +0000 (21:57 +0300)] 
Re-enable test T14251

(This change was accidentally reverted with the previous commit)

14 months agoFix dataToTag# argument evaluation
Ömer Sinan Ağacan [Wed, 10 Oct 2018 07:07:05 +0000 (10:07 +0300)] 
Fix dataToTag# argument evaluation

See #15696 for more details. We now always enter dataToTag# argument (done in
generated Cmm, in StgCmmExpr). Any high-level optimisations on dataToTag#
applications are done by the simplifier. Looking at tag bits (instead of
reading the info table) for small types is left to another diff.

Incorrect test T14626 is removed. We no longer do this optimisation (see
comment:44, comment:45, comment:60).

Comments and notes about special cases around dataToTag# are removed. We no
longer have any special cases around it in Core.

Other changes related to evaluating primops (seq# and dataToTag#) will be
pursued in follow-up diffs.

Test Plan: Validates with three regression tests

Reviewers: simonpj, simonmar, hvr, bgamari, dfeuer

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15696

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

14 months agoRevert "Add Int8# and Word8#"
Ben Gamari [Tue, 9 Oct 2018 16:39:14 +0000 (12:39 -0400)] 
Revert "Add Int8# and Word8#"

This unfortunately broke i386 support since it introduced references to
byte-sized registers that don't exist on that architecture.

Reverts binary submodule

This reverts commit 5d5307f943d7581d7013ffe20af22233273fba06.

14 months agoupdate amd64 linux/osx stats for haddock.base perf test
Alp Mestanogullari [Tue, 9 Oct 2018 10:37:10 +0000 (12:37 +0200)] 
update amd64 linux/osx stats for haddock.base perf test

This perf test is regularly failing (e.g with a deviation of 5.1%
on a recent harbormaster build), this patch addresses the failure.

Test Plan: TEST=haddock.base ./validate

Reviewers: bgamari

Subscribers: rwbarton, carter

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

14 months agoAdd Int8# and Word8#
Michal Terepeta [Thu, 4 Oct 2018 17:56:59 +0000 (13:56 -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 `MachOP`s.

- For `CmmCall`s 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.

Bumps binary submodule.

Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com>
Test Plan: ./validate with new tests

Reviewers: hvr, goldfire, bgamari, simonmar

Subscribers: Abhiroop, dfeuer, rwbarton, thomie, carter

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

14 months agotestsuite: disable T11760 on non-smp targets
Sergei Trofimovich [Sun, 7 Oct 2018 08:35:48 +0000 (09:35 +0100)] 
testsuite: disable T11760 on non-smp targets

T11760 needs multicore support from RTS:
    T11760: unknown RTS option: -N2

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
14 months agotestsuite: disable nursery-chunks1 on non-smp targets
Sergei Trofimovich [Sun, 7 Oct 2018 08:31:55 +0000 (09:31 +0100)] 
testsuite: disable nursery-chunks1 on non-smp targets

"ghc: setNumCapabilities: not supported on this platform"
is caused by use of 'setNumCapabilities' in test itself.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
14 months agotestsuite: disable T10017 on non-smp targets
Sergei Trofimovich [Sun, 7 Oct 2018 08:27:34 +0000 (09:27 +0100)] 
testsuite: disable T10017 on non-smp targets

T10017 needs multicore support from RTS:
    T10017: unknown RTS option: -N2

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
14 months agotestsuite: disable T14075 on non-smp targets
Sergei Trofimovich [Sun, 7 Oct 2018 08:23:07 +0000 (09:23 +0100)] 
testsuite: disable T14075 on non-smp targets

"ghc: setNumCapabilities: not supported on this platform"
is caused by use of 'ghc --make -j2' in build rule.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
14 months agoUNREG: don't prefix asm prefixes in via-C mode
Sergei Trofimovich [Sat, 6 Oct 2018 18:45:18 +0000 (19:45 +0100)] 
UNREG: don't prefix asm prefixes in via-C mode

commit 64c54fff2d6534e1229359a8d357ec1dc6c21b73
("Mark system and internal symbols as private symbols in asm")

Added `internalNamePrefix` helper. Unfortunately it
generates invalid label in unregisterised mode:

```
$ ./configure --enable-unregisterised
/tmp/ghc19372_0/ghc_4.hc:2831:22: error:
     error: expected identifier or '(' before '.' token
     static const StgWord .Lcl3_info[]__attribute__((aligned(8)))= {
                          ^
```

Here asm-style prefix is applied to C symbol.
The fix is simple: apply asm-style labels only to assembly code.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Reviewers: simonmar, last_g, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

14 months agoAdd a missing write barrier to small array writes
Ömer Sinan Ağacan [Sat, 6 Oct 2018 14:53:06 +0000 (17:53 +0300)] 
Add a missing write barrier to small array writes

Write barriers for large array writes were added in D2525, as a part of #12469.
However it seems we forgot about small arrays. This patch adds the same write
barrier to small array writes.

Reviewers: simonmar, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #12469

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

14 months agoStable name type role
David Feuer [Thu, 4 Oct 2018 17:52:23 +0000 (13:52 -0400)] 
Stable name type role

Make the `StableName#` parameter phantom:

There is actually never any reason to care about the type of
the underlying object of a `StableName#`. The underlying object
type shouldn't really even *be* a parameter. But at least we
can mark it as phantom.

Reviewers: hvr, bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: ekmett, rwbarton, carter

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

14 months agoMake TcRnMonad independent of TcSplice (#14391)
Krzysztof Gogolewski [Thu, 4 Oct 2018 17:50:54 +0000 (13:50 -0400)] 
Make TcRnMonad independent of TcSplice (#14391)

Test Plan: validate

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #14391

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

14 months agoFix PE linker wibbles
Tamar Christina [Thu, 4 Oct 2018 17:50:04 +0000 (13:50 -0400)] 
Fix PE linker wibbles

Fix some various issues that popped up because the linker now doesn't
load import libraries for longer than it needs to.

These are all use after free issues.

Test Plan: ./validate

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: simonpj, rwbarton, carter

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

14 months agoUpdate performance numbers on Windows
Tamar Christina [Thu, 4 Oct 2018 17:48:52 +0000 (13:48 -0400)] 
Update performance numbers on Windows

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

14 months agoMultiple fixes / improvements for LLVM backend
Kavon Farvardin [Thu, 4 Oct 2018 17:44:55 +0000 (13:44 -0400)] 
Multiple fixes / improvements for LLVM backend

- Fix for #13904 -- stop "trashing" callee-saved registers, since it is
  not actually doing anything useful.

- Fix for #14251 -- fixes the calling convention for functions passing
  raw SSE-register values by adding padding as needed to get the values
  in the right registers. This problem cropped up when some args were
  unused an dropped from the live list.

- Fixed a typo in 'readnone' attribute

- Added 'lower-expect' pass to level 0 LLVM optimization passes to
  improve block layout in LLVM for stack checks, etc.

Test Plan: `make test WAYS=optllvm` and `make test WAYS=llvm`

Reviewers: bgamari, simonmar, angerman

Reviewed By: angerman

Subscribers: rwbarton, carter

GHC Trac Issues: #13904, #14251

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

14 months agoAdd -Wstar-is-type to the User's Guide
Vladislav Zavialov [Thu, 4 Oct 2018 17:43:47 +0000 (13:43 -0400)] 
Add -Wstar-is-type to the User's Guide

The -Wstar-is-type flag was added without documentation.
Now it has documentation.

Test Plan: Validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

14 months agotestsuite: Skip T3171 for now
Ben Gamari [Thu, 4 Oct 2018 17:42:30 +0000 (13:42 -0400)] 
testsuite: Skip T3171 for now

This test is remarkably flaky, failing regularly on i386/Linux,
amd64/Fedora, and amd64/Darwin. I've opened #15383 to track this and am
disabling the test for now until we have a chance to investigate.

Test Plan: Validate

Reviewers: alpmestan

Subscribers: rwbarton, carter

GHC Trac Issues: #15383

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

14 months agoBump Cabal submodule
Ben Gamari [Thu, 4 Oct 2018 16:44:49 +0000 (12:44 -0400)] 
Bump Cabal submodule

14 months agoDon't leak internal commentary into HasField's Haddocks
Ryan Scott [Thu, 4 Oct 2018 22:56:50 +0000 (18:56 -0400)] 
Don't leak internal commentary into HasField's Haddocks

In commit 2f09753f9620, some internal comments about the kind
signature of the HasField class accidentially leaked into its
publicly exported Haddocks.

14 months agoSet `infixr -1 ->`
Alec Theriault [Thu, 4 Oct 2018 22:13:28 +0000 (18:13 -0400)] 
Set `infixr -1 ->`

Summary:
This simply makes explicit what is already the case. Due to special
treatment in the parser, `->` has the lowest fixity. This patch propagates
that information to:

  * GHCi, where `:info ->` now return the right fixity
  * TH, where `reifyFixity` returns the right fixity
  * the generated sources for `GHC.Prim`

See #15235.

Test Plan: make test

Reviewers: bgamari, alanz, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: int-index, RyanGlScott, rwbarton, mpickering, carter

GHC Trac Issues: #15235

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

14 months agoDon't drop arguments in TH type arguments
Alec Theriault [Thu, 4 Oct 2018 22:13:15 +0000 (18:13 -0400)] 
Don't drop arguments in TH type arguments

Summary:
When converting from TH AST back to HsType, we were occasionally
dropping type arguments. This resulted in incorrectly accepted programs
as well as incorrectly rejected programs.

Test Plan: make TEST=T15360a && make TEST=T15360b

Reviewers: goldfire, bgamari, tdammers

Reviewed By: bgamari, tdammers

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #15360

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

14 months agoAllow (unparenthesized) kind signatures
Alec Theriault [Thu, 4 Oct 2018 22:10:21 +0000 (18:10 -0400)] 
Allow (unparenthesized) kind signatures

Summary: This allows for things like `[t :: MyKind]`, `(a :: k, b)`, and so on.

Test Plan: make TEST=T11622 && make TEST=T8708

Reviewers: RyanGlScott, bgamari, simonpj, goldfire, alanz

Reviewed By: RyanGlScott, simonpj

Subscribers: alanz, simonpj, rwbarton, mpickering, carter

GHC Trac Issues: #11622, #8708

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

14 months agoDocumentation fixes in 'template-haskell'
Alec Theriault [Thu, 4 Oct 2018 15:19:46 +0000 (11:19 -0400)] 
Documentation fixes in 'template-haskell'

Summary:
 * Clarify the non-presence of derived classes in reified decls (#15167)
 * Clarify the shallowness of "reifyInstances" (#7066)
 * Mention that 'Typeable' instances are not found by reifyInstances (#11251)
 * Various Haddock markup issues fixed

Reviewers: goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15167, #7066, #11251

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

14 months agoImprove generated `GHC.Prim` docs
Alec Theriault [Thu, 4 Oct 2018 15:18:54 +0000 (11:18 -0400)] 
Improve generated `GHC.Prim` docs

Summary:
* Extended `genprimcode` to generate Haddock-compatible deprecations,
  as well as displaying information about which functions are LLVM-only
  and which functions can fail with an unchecked exception.

* Ported existing deprecations to the new format, and also added a
  deprecation on `par#` (see Trac #15227).

* Emit an error on fixity/deprecation of builtins, unless we are
  processing the module in which that name is defined (see Trac #15233).
  That means the following is no longer accepted (outside of `GHC.Types`):

```
infixr 7 :
{-# DEPRECATED (:) "cons is deprecated" #-}
```

* Generate `data (->) a b` with docs and fixity in `GHC.Prim`. This
  means: GHC can now parse `data (->) a b` and `infixr 0 ->` (only in
  `GHC.Prim`) and `genprimcode` can digest `primtype (->) a b` (See Trac
  #4861)

as well as some misc fixes along the way.

Reviewers: bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, mpickering, carter

GHC Trac Issues: #15227, #15233, #4861

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

14 months agoDocument the list data type
Alec Theriault [Thu, 4 Oct 2018 15:18:32 +0000 (11:18 -0400)] 
Document the list data type

Summary: Also qualified some identifier hyperlinks along the way.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #4861

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

14 months agotc-trace changes only
Simon Peyton Jones [Thu, 4 Oct 2018 14:30:04 +0000 (15:30 +0100)] 
tc-trace changes only

14 months agoDistinguish Inferred from Specified tyvars
Simon Peyton Jones [Wed, 3 Oct 2018 15:35:09 +0000 (16:35 +0100)] 
Distinguish Inferred from Specified tyvars

In a declared type we need to distinguish between Inferred
and Specified type variables. This was exposed by Trac #15592.

See Note [Work out final tyConBinders] in TcTyClsDecls.

I had to change the definition of HasField in GHC.Records to
   class HasField x r a | x r -> a where
so as to have an /inferred/ kind argument rather than a
specfied one.  So
   HasField :: forall {k}. k -> * -> * -> Constraint

14 months agoBetter pretty-printing of forall types
Simon Peyton Jones [Wed, 3 Oct 2018 14:58:13 +0000 (15:58 +0100)] 
Better pretty-printing of forall types

Currently forall-types with a lot of type variables,
or type variables with big kinds, are pretty-printed too
horizontally, and dribble off to the right in an illegible
way.

This patch treats the type variables as a group, and uses
'fsep' to lay them out decently.

14 months agoFail fast on pattern synonyms
Simon Peyton Jones [Wed, 3 Oct 2018 14:53:59 +0000 (15:53 +0100)] 
Fail fast on pattern synonyms

We were recovering too eagerly from errors in pattern-synonym
type inference, leading to a cascade of confusing follow up errors
(Trac #15685, #15692).

The underlying issue is that a pattern synonym should have a closed,
fixed type, with no unification variables in it.  But it wasn't!

Fixing this made me change the interface to simplifyInfer slightly.
Instead of /emitting/ a residual implication constraint, it
now /returns/ it, so that the caller can decide what to do.

14 months agoDo not mark CoVars as dead in the occur-anal
Simon Peyton Jones [Wed, 3 Oct 2018 14:41:43 +0000 (15:41 +0100)] 
Do not mark CoVars as dead in the occur-anal

For years we have been marking CoVars as dead, becuase we
don't gather occurrence info from types.  This is obviously
wrong and caused Trac #15695.

See Note [Do not mark CoVars as dead] in OccurAnal.

14 months agoMake Lint check that for CoVars more carefully
Simon Peyton Jones [Wed, 3 Oct 2018 12:28:04 +0000 (13:28 +0100)] 
Make Lint check that for CoVars more carefully

Check than an Id of type (t1 ~# t2) is a CoVar; if not,
it ends up in the wrong simplifier environment, with
strange consequences. (Trac #15648)

14 months agoBetter comments and debug-print only
Simon Peyton Jones [Wed, 3 Oct 2018 12:27:06 +0000 (13:27 +0100)] 
Better comments and debug-print only

14 months agoBetter -ddump-types
Simon Peyton Jones [Wed, 3 Oct 2018 12:24:11 +0000 (13:24 +0100)] 
Better -ddump-types

The debug flag -ddump-types is supposed to show the type
of Ids, and the kinds of type constructors.  It was doing
the former but not the latter -- instead it was using
showTyTying, which is actually less helpful when debugging.

This patch changes it to print the kind and roles of the thing.

I also made -ddump-types show pattern synonyms

14 months agoParse the (!) type operator and allow type operators in existential context
Vladislav Zavialov [Thu, 4 Oct 2018 13:17:55 +0000 (09:17 -0400)] 
Parse the (!) type operator and allow type operators in existential context

Summary:
Improve the way `(!)`, `(~)`, and other type operators are handled in the parser,
fixing two issues at once:

1. `(!)` can now be used as a type operator
   that respects fixity and precedence (#15457)
2. Existential context of a data constructor
   no longer needs parentheses (#15675)

In addition to that, with this patch it is now trivial to adjust precedence of
the `{-# UNPACK #-}` pragma, as suggested in
https://ghc.haskell.org/trac/ghc/ticket/14761#comment:7

There was a small change to API Annotations. Before this patch, `(~)` was a
strange special case that produced an annotation unlike any other type
operator. After this patch, when `(~)` or `(!)` are used to specify strictness they
produce AnnTilde and AnnBang annotations respectively, and when they are used
as type operators, they produce no annotations.

Test Plan: Validate

Reviewers: simonpj, bgamari, alanz, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, mpickering, carter

GHC Trac Issues: #15457, #15675

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

14 months agoMake GHC (the library) flexible in the choice of integer library
Joachim Breitner [Wed, 3 Oct 2018 13:36:55 +0000 (15:36 +0200)] 
Make GHC (the library) flexible in the choice of integer library

Summary:
We have more and more users of GHC as a library, for example the
Haskell-to-WebAssembly-compiler https://github.com/tweag/asterius.
These need to make different decisions about various aspects of
code generation than the host compiler, and ideally GHC-the-library
allows them to set the `DynFlags` as needed.

This patch adds a new `DynFlag` that configures which `integer`
library to use. This flag is initialized by `cIntegerLibraryType`
(as before), and is only used in `CorePrep` to decide whether to
use `S#` or not.

The other code paths that were varying based on `cIntegerLibraryType`
are no now longer varying: The trick is to use `integer-wired-in`
as the `-this-unit-id` when compiling either `integer-gmp` or
`integer-simple`.

Test Plan: Validate is happy.

Reviewers: hvr, bgamari

Reviewed By: bgamari

Subscribers: TerrorJack, adamse, simonpj, rwbarton, carter

GHC Trac Issues: #13477

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

14 months agodistrib: Remove mention of no-longer-existent make target
Ben Gamari [Wed, 3 Oct 2018 13:35:32 +0000 (15:35 +0200)] 
distrib: Remove mention of no-longer-existent make target

Summary:
`show-install-setup` used to be defined by `distrib/Makefile` which hasn't been
used in a very long time and was removed from the tree in
a1c008b30fc60a327afe098cf16bd14ca1e5e381.

Reviewers: monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

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

14 months agoDrop accidental write-attributes request
Tamar Christina [Wed, 3 Oct 2018 13:34:56 +0000 (15:34 +0200)] 
Drop accidental write-attributes request

Summary:
The new filesystem code accidentally asks for write attributes
permissions when doing read-only access.

I believe this is what's causing the GHC 8.6.1 tarballs to fail
when installed to a privileged location.
I haven't been able to reproduce the issue yet, but this permission
bit is wrong anyway.

Test Plan: I'm still trying to workout how to test that this works,
changing the permissions on the folder doesn't seem to reproduce
the error on a tarball I made from before the change.

Reviewers: bgamari, tdammers

Reviewed By: bgamari

Subscribers: tdammers, monoidal, rwbarton, carter

GHC Trac Issues: #15667

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

14 months agoDrop GHC 8.2 compatibility
Ryan Scott [Wed, 3 Oct 2018 12:41:56 +0000 (08:41 -0400)] 
Drop GHC 8.2 compatibility

Summary:
GHC 8.6.1 is out, so now GHC's support window only extends
back to GHC 8.4. This means we can delete gobs of code that were
only used for GHC 8.2 support. Hooray!

Test Plan: ./validate

Reviewers: bgamari, Phyx, erikd

Reviewed By: bgamari, Phyx

Subscribers: rwbarton, erikd, carter

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

14 months agoGHCi should not filter instances involving cTuples
Alec Theriault [Tue, 2 Oct 2018 12:48:00 +0000 (14:48 +0200)] 
GHCi should not filter instances involving cTuples

Summary: See the new T12005 test case for an example of this.

Test Plan: make TEST=T12005

Reviewers: bgamari, osa1

Reviewed By: osa1

Subscribers: osa1, rwbarton, carter

GHC Trac Issues: #12005

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

14 months agorts.cabal.in: add more flags to control the extra flavours (for hadrian)
Alp Mestanogullari [Tue, 2 Oct 2018 12:46:28 +0000 (14:46 +0200)] 
rts.cabal.in: add more flags to control the extra flavours (for hadrian)

Summary:
In order to properly honor the different ways in which the RTS must
be built by hadrian, and in particular to have fine grained control over that,
I'm introducing new Cabal flags in rts.cabal[.in]. This should not affect the
make build system and will only be used and picked up by hadrian, which uses
Cabal directly to operate on cabal packages, including libHSrts.

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

14 months agoresolve T13704
chessai [Tue, 2 Oct 2018 12:46:08 +0000 (14:46 +0200)] 
resolve T13704

Summary: allow -main-is to change export list for default module
header, allowing one to change the entry point to one's program.

Test Plan: ./validate

Reviewers: bgamari, nomeata, mpickering

Reviewed By: mpickering

Subscribers: mpickering, rwbarton, carter

GHC Trac Issues: #13704

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

14 months agocircleci: Create missing test-results directory
Ben Gamari [Tue, 2 Oct 2018 13:16:27 +0000 (09:16 -0400)] 
circleci: Create missing test-results directory

14 months agoQuantify class variables first in associated families' kinds
Ryan Scott [Mon, 1 Oct 2018 16:05:12 +0000 (12:05 -0400)] 
Quantify class variables first in associated families' kinds

Summary:
Previously, `kcLHsQTyVars` would always quantify class-bound
variables invisibly in the kinds of associated types, resulting in
#15591. We counteract this by explicitly passing the class-bound
variables to `kcLHsQTyVars` and quantifying over the ones that are
mentioned in the associated type such that (1) they are specified,
and (2) they come before other kind variables.
See `Note [Kind variable ordering for associated types]`.

Test Plan: make test TEST=T15591

Reviewers: goldfire, simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15591

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

14 months agoFix #15637 by using VTA more in GND
Ryan Scott [Mon, 1 Oct 2018 16:00:52 +0000 (12:00 -0400)] 
Fix #15637 by using VTA more in GND

Summary:
The code that GND was generating before could crumple over
if it derived an instance for a class with an ambiguous type variable
in the class head, such as the example in #15637. The solution is
straightforward: simply instantiate all variables bound by the class
head explicitly using visible type application, which will nip any
ambiguity in the bud.

Test Plan: make test TEST=T15637

Reviewers: bgamari, simonpj, goldfire

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #15637

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

14 months agocircleci: Run slowtest with multiple threads
Ben Gamari [Mon, 1 Oct 2018 15:46:54 +0000 (11:46 -0400)] 
circleci: Run slowtest with multiple threads

14 months agoghc-prim: Fix typo in traceBinaryEvent# changelog entry
Ben Gamari [Thu, 27 Sep 2018 22:46:53 +0000 (18:46 -0400)] 
ghc-prim: Fix typo in traceBinaryEvent# changelog entry

14 months agoghc-prim: Add missing changelog entry
Ben Gamari [Thu, 27 Sep 2018 22:46:37 +0000 (18:46 -0400)] 
ghc-prim: Add missing changelog entry

14 months agoprimops: Fix documentation of compactAllocateBlock#
Ben Gamari [Wed, 26 Sep 2018 20:03:44 +0000 (16:03 -0400)] 
primops: Fix documentation of compactAllocateBlock#

Pointed out by @andrewthad.

14 months agoghc-bin.cabal.in: add a 'threaded' flag for hadrian
Alp Mestanogullari [Mon, 1 Oct 2018 13:14:23 +0000 (15:14 +0200)] 
ghc-bin.cabal.in: add a 'threaded' flag for hadrian

Summary:
hadrian will explicitly enable this flag, but more importantly needs it
as otherwise we just never end up passing -threaded to GHC when building
a new GHC binary. We could quite likely unconditionally pass -threaded,
as the corresponding logic for GhcThreaded in mk/config.mk.in seems to
always lead to it being set to True, but we instead leave a way out for
anyone in need of a GHC linked against a non-threaded runtime system in
the future.

Test Plan: T8242 (with a GHC built by hadrian)

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

14 months agoCodeGen: Teach CodeGen about aliasing of XMM/YMM/ZMM registers
Ben Gamari [Mon, 1 Oct 2018 13:13:32 +0000 (15:13 +0200)] 
CodeGen: Teach CodeGen about aliasing of XMM/YMM/ZMM registers

Reviewers: simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

14 months agoAlways check the relocation value for x86_64
Zejun Wu [Mon, 1 Oct 2018 13:12:29 +0000 (15:12 +0200)] 
Always check the relocation value for x86_64

Summary:
Always check that no overflow happens during relocation for x86_64.
It's not safe to assume the result returned by `ocAllocateSymbolExtras` is
always valid if we allocate it neither in lower 2G nor in a contiguous range
with the image.

There are also some minor fixes in this diff:

* `off >= 0x7fffffffL` should be `>`
* use of unaligned pointer is undefined behavior, use `memcpy` instead, gcc
  will be able to optimize it to `mov %edx, (%rax)`.

Test Plan:
build ghci with:

```
DYNAMIC_GHC_PROGRAMS = NO
DYNAMIC_BY_DEFAULT = NO
```

and play with it.

  ./validate

Reviewers: simonmar, austin, bgamari, erikd

Reviewed By: simonmar

Subscribers: alpmestan, rwbarton, carter

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

14 months agoAdd -fkeep-cafs
Simon Marlow [Fri, 28 Sep 2018 12:27:22 +0000 (14:27 +0200)] 
Add -fkeep-cafs

Summary:
I noticed while playing around with
https://github.com/fbsamples/ghc-hotswap/ that the main binary needs to
have a custom main function to set `config.keep_cafs = true` when
initialising the runtime. This is pretty annoying, it means an extra
C file with some cryptic incantations in it, and a `-no-hs-main` flag.

So I've replaced this with a link-time flag to GHC, `-fkeep-cafs` that
does the same thing.

Test Plan:
New unit test that tests for the RTS's GC'd CAFs assertion, and also
the -keep-cafs flag.

Reviewers: bgamari, osa1, erikd, noamz

Reviewed By: osa1

Subscribers: rwbarton, carter

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

14 months agoExpose wopt_set/unset_fatal in DynFlags
Neil Mitchell [Wed, 26 Sep 2018 09:58:38 +0000 (10:58 +0100)] 
Expose wopt_set/unset_fatal in DynFlags

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

14 months agoNormalise EmptyCase types using the constraint solver
Ryan Scott [Fri, 28 Sep 2018 12:22:48 +0000 (14:22 +0200)] 
Normalise EmptyCase types using the constraint solver

Summary:
Certain `EmptyCase` expressions were mistakently producing
warnings since their types did not have as many type families reduced
as they could have. The most direct way to fix this is to normalise
these types initially using the constraint solver to solve for any
local equalities that may be in scope.

Test Plan: make test TEST=T14813

Reviewers: simonpj, bgamari, goldfire

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #14813

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

14 months agoFix for recover with -fexternal-interpreter (#15418)
Simon Marlow [Wed, 26 Sep 2018 20:32:29 +0000 (15:32 -0500)] 
Fix for recover with -fexternal-interpreter (#15418)

Summary:
When using -fexternal-interpreter, recover was not treating a Q
compuation that simply registered an error with addErrTc as failing.

Test Plan:
New unit tests:
* T15418 is the repro from in the ticket
* TH_recover_warns is a new test to ensure that we're keeping warnings when
  the body of recover succeeds.

Reviewers: bgamari, RyanGlScott, angerman, goldfire, erikd

Subscribers: rwbarton, carter

GHC Trac Issues: #15418

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

14 months agousers' guide: document -freverse-errors
quasicomputational [Wed, 26 Sep 2018 09:57:38 +0000 (10:57 +0100)] 
users' guide: document -freverse-errors

14 months agoFix constant-folding for Integer shifts
Simon Peyton Jones [Wed, 26 Sep 2018 03:29:19 +0000 (04:29 +0100)] 
Fix constant-folding for Integer shifts

In this patch
    commit 869f69fd4a78371c221e6d9abd69a71440a4679a
    Author: Simon Peyton Jones <simonpj@microsoft.com>
    Date:   Wed Dec 11 18:19:34 2013 +0000

    Guarding against silly shifts

we deal with silly shifts like (Sll 1 9223372036854775807).  But
I only dealt with primops that Int# and Word#.

Alas, the same problem affects shifts of Integer, as Trac #15673
showed.  Fortunately, the problem is easy to fix.

14 months agoFix Lint of unsaturated type families
Simon Peyton Jones [Tue, 25 Sep 2018 14:19:22 +0000 (15:19 +0100)] 
Fix Lint of unsaturated type families

GHC allows types to have unsaturated type synonyms and type families,
provided they /are/ saturated if you expand all type synonyms.

TcValidity carefully checked this; see check_syn_tc_app.  But
Lint only did half the job, adn that led to Trac #15664.

This patch just teaches Core Lint to be as clever as TcValidity.

14 months agoExpand the Note on let-bound skolems
Simon Peyton Jones [Sun, 23 Sep 2018 14:23:09 +0000 (15:23 +0100)] 
Expand the Note on let-bound skolems

14 months agoAdd regression test for #15666
Ryan Scott [Tue, 25 Sep 2018 12:33:06 +0000 (08:33 -0400)] 
Add regression test for #15666

Commit 59f38587d44efd00b10a6d98f6a7a1b22e87f13a ended up
fixing #15666. Let's add a regression test to ensure that it stays
fixed.

14 months agoDon't show constraint tuples in errors (#14907)
Alec Theriault [Tue, 25 Sep 2018 09:58:12 +0000 (11:58 +0200)] 
Don't show constraint tuples in errors (#14907)

Summary:
This means that 'GHC.Classes.(%,%)' is no longer mentioned in
error messages for things like

   class (a,b,c)  -- outside of 'GHC.Classes'
   class (a,Bool)

Test Plan: make TEST=T14907a && make TEST=T14907b

Reviewers: RyanGlScott, bgamari

Reviewed By: RyanGlScott

Subscribers: rwbarton, carter

GHC Trac Issues: #14907

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

14 months agoaclocal.m4: fix shell comment syntax: '#', not '$'
Sergei Trofimovich [Tue, 25 Sep 2018 09:57:35 +0000 (11:57 +0200)] 
aclocal.m4: fix shell comment syntax: '#', not '$'

Summary:
Reported-by: Evan Laforge
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Reviewers: bgamari

Subscribers: rwbarton, erikd, carter

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

14 months agoFix a MSG_BLACKHOLE sanity check, add some comments
Ömer Sinan Ağacan [Mon, 24 Sep 2018 13:21:27 +0000 (16:21 +0300)] 
Fix a MSG_BLACKHOLE sanity check, add some comments

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15508

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

14 months agoAdd a recursivity check in nonVoid
Ryan Scott [Sun, 23 Sep 2018 12:15:13 +0000 (08:15 -0400)] 
Add a recursivity check in nonVoid

Summary:
Previously `nonVoid` outright refused to call itself
recursively to avoid the risk of hitting infinite loops when
checking recurisve types. But this is too conservative—we //can//
call `nonVoid` recursively as long as we incorporate a way to detect
the presence of recursive types, and bail out if we do detect one.
Happily, such a mechanism already exists in the form of `checkRecTc`,
so let's use it.

Test Plan: make test TEST=T15584

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15584

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

14 months agoFix get getIdFromTrivialExpr
Simon Peyton Jones [Sat, 22 Sep 2018 23:44:14 +0000 (00:44 +0100)] 
Fix get getIdFromTrivialExpr

This bug, discovered by Trac #15325, has been lurking since

  commit 1c9fd3f1c5522372fcaf250c805b959e8090a62c
  Author: Simon Peyton Jones <simonpj@microsoft.com>
  Date:   Thu Dec 3 12:57:54 2015 +0000

    Case-of-empty-alts is trivial (Trac #11155)

I'd forgotttnen to modify getIdFromTrivialExpr when I
modified exprIsTrivial.   Easy to fix, though.

14 months agoComments only
Simon Peyton Jones [Thu, 20 Sep 2018 19:05:05 +0000 (20:05 +0100)] 
Comments only