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

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

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

Test Plan: ./validate

Reviewers: simonpj, goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15806

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

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

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

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

Reviewers: simonmar, hvr

Subscribers: rwbarton, carter

GHC Trac Issues: #14784

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

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

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

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

This diff fixed the error.

Test Plan:
  ./validate

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

Ben says:

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

Reviewers: simonmar, scpmw, last_g, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

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

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

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

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

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

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

Reviewers: bgamari, angerman

Reviewed By: bgamari

Subscribers: rwbarton, carter

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

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

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

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

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

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

Includes submodule update for Haddock.

Test Plan: validate

Reviewers: goldfire, bgamari, alanz

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

GHC Trac Issues: #2600, #14268

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Test Plan: Please read core-spec.pdf

Reviewers: goldfire, simonpj, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15497, #15589

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

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

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

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

An attempt to help with Trac #15800

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

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

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

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

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

This just improves docmentation for the fix to Trac #15300

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

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

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

Test Plan: manually verify links work

Reviewers: bgamari, simonmar, mpickering

Reviewed By: bgamari, mpickering

Subscribers: mpickering, rwbarton, carter

GHC Trac Issues: #15733

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

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

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

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

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

This is a debug-only change

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

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

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

This fixes #15767.

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

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

Solution: don't attempt to print the coercion.

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

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

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

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

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

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

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

Particular changes

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

* isCoercionType is renamed to isCoVarType

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

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

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

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

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

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

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

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

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

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

* Prints data constructor separately
* Omits empty chunks of output

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

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

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

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

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

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

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

Test Plan: make test TEST=T15792

Reviewers: goldfire, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #15792

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

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

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

Test Plan: make test TEST=T15783

Reviewers: bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, rwbarton, carter

GHC Trac Issues: #15783

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

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

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

Test Plan: make test TEST="KindSigs T15781"

Reviewers: harpocrates, bgamari

Reviewed By: harpocrates

Subscribers: rwbarton, mpickering, carter

GHC Trac Issues: #15781

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

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

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

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

Reviewers: bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, carter

GHC Trac Issues: #10453, #13087

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

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

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

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

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

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

See #15349.

13 months agoClarify Note about ForAllCo coercions.
Richard Eisenberg [Mon, 22 Oct 2018 18:58:28 +0000 (14:58 -0400)] 
Clarify Note about ForAllCo coercions.

Comments only: [skip ci]

13 months agoUpdate hsc2hs submodule to work around bug in response file handling.
klebinger.andreas@gmx.at [Mon, 22 Oct 2018 17:15:35 +0000 (19:15 +0200)] 
Update hsc2hs submodule to work around bug in response file handling.

Summary:
This works around #15758 by bumping hsc2hs.

The new version includes support for response files
independent of the boot compiler.

Test Plan: ci, building formerly broken packages

Reviewers: bgamari, RyanGlScott, ckoparkar

Reviewed By: ckoparkar

Subscribers: rwbarton, carter

GHC Trac Issues: #15758

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

13 months agoFix warnings, improve documentation
Andrey Mokhov [Sat, 20 Oct 2018 18:41:27 +0000 (19:41 +0100)] 
Fix warnings, improve documentation

13 months agoBump QuickCheck bound
Andrey Mokhov [Sat, 20 Oct 2018 17:42:41 +0000 (18:42 +0100)] 
Bump QuickCheck bound

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

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

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

13 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

13 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 agoMerge pull request #700 from snowleopard/alp/ghc-versions-ci
Alp Mestanogullari [Tue, 9 Oct 2018 14:33:22 +0000 (16:33 +0200)] 
Merge pull request #700 from snowleopard/alp/ghc-versions-ci

update GHC versions used on travis

14 months agoupdate GHC versions used on travis
Alp Mestanogullari [Tue, 9 Oct 2018 11:17:15 +0000 (13:17 +0200)] 
update GHC versions used on travis

I saw that (nightly) travis builds are failing because we now only support 8.4 or higher to boot a GHC HEAD build. I don't know how to achieve this for the OS X section though.

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