ghc.git
9 months agoapp_ok case for dataToTag# is now the same as seq# case, update notes wip/T15696
Ömer Sinan Ağacan [Fri, 19 Oct 2018 13:01:45 +0000 (16:01 +0300)] 
app_ok case for dataToTag# is now the same as seq# case, update notes

9 months agoRevert OK-for-spec change for the general app case
Ömer Sinan Ağacan [Wed, 17 Oct 2018 07:16:37 +0000 (10:16 +0300)] 
Revert OK-for-spec change for the general app case

9 months agoFix FloatIn literal case
Ömer Sinan Ağacan [Fri, 12 Oct 2018 05:23:50 +0000 (08:23 +0300)] 
Fix FloatIn literal case

9 months agoRemove can_fail for dataToTag#, add a special case to app_ok
Ömer Sinan Ağacan [Thu, 11 Oct 2018 11:14:47 +0000 (14:14 +0300)] 
Remove can_fail for dataToTag#, add a special case to app_ok

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

9 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

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

9 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

9 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

9 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>
9 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>
9 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>
9 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>
9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

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

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

9 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

9 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

9 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

9 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

9 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

9 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

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

9 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

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

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

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

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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

9 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

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

9 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

9 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

9 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

9 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

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

9 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

9 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

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

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

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

9 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

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

9 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

9 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

9 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

9 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

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

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

9 months agoDon't look up unnecessary return in LastStmt
Simon Peyton Jones [Thu, 20 Sep 2018 19:02:39 +0000 (20:02 +0100)] 
Don't look up unnecessary return in LastStmt

This fixes Trac #15607. The general pattern is well
established (e.g. see the guard_op binding in rnStmt
of BodyStme), but we weren't using it for LastStmt.

9 months agoBuglet in reporting out of scope errors in rules
Simon Peyton Jones [Thu, 20 Sep 2018 18:53:56 +0000 (19:53 +0100)] 
Buglet in reporting out of scope errors in rules

Most out of scope errors get reported by the type checker these
days, but not all.  Example, the function on the LHS of a RULE.

Trace #15659 pointed out that this less-heavily-used code path
produce a "wacky" error message.  Indeed so.  Easily fixed.

9 months agotestsuite: Bump T9630 expected allocations
Ben Gamari [Sat, 22 Sep 2018 15:12:59 +0000 (11:12 -0400)] 
testsuite: Bump T9630 expected allocations

This failed on Darwin.

9 months agotestsuite: Bump expected allocations for T12707
Ben Gamari [Fri, 21 Sep 2018 22:51:38 +0000 (18:51 -0400)] 
testsuite: Bump expected allocations for T12707

9 months agotestsuite: Bump expected allocations of T9675
Ben Gamari [Fri, 21 Sep 2018 20:24:32 +0000 (16:24 -0400)] 
testsuite: Bump expected allocations of T9675

This inexplicably started with 989dca6cbd93, which appears to be a bump of the
`text` submodule. This is very fishy so I've opened #15663 to ensure we
investigate.

9 months agotestsuite: Fix readFail048 and readFail032 brokenness declarations
Ben Gamari [Fri, 21 Sep 2018 20:18:08 +0000 (16:18 -0400)] 
testsuite: Fix readFail048 and readFail032 brokenness declarations

Whoops.

9 months agotestsuite: Mark readFail032 and readFail048 as broken on Darwin
Ben Gamari [Fri, 21 Sep 2018 16:16:35 +0000 (12:16 -0400)] 
testsuite: Mark readFail032 and readFail048 as broken on Darwin

It looks like Clang's CPP implementation has an off-by-one error here.

9 months agotestsuite: Don't force run of llvm ways in T14251
Ben Gamari [Fri, 21 Sep 2018 15:44:35 +0000 (11:44 -0400)] 
testsuite: Don't force run of llvm ways in T14251

This breaks if LLVM is not available.

9 months agoRemove redundant slop zeroing
Ömer Sinan Ağacan [Fri, 21 Sep 2018 07:08:18 +0000 (10:08 +0300)] 
Remove redundant slop zeroing

OVERWRITE_INFO already does zero slopping by calling OVERWRITING_CLOSURE

9 months agoFix slop zeroing for AP_STACK eager blackholes in debug build
Ömer Sinan Ağacan [Fri, 21 Sep 2018 06:33:38 +0000 (09:33 +0300)] 
Fix slop zeroing for AP_STACK eager blackholes in debug build

As #15571 reports, eager blackholing breaks sanity checks as we can't
zero the payload when eagerly blackholing (because we'll be using the
payload after blackholing), but by the time we blackhole a previously
eagerly blackholed object (in `threadPaused()`) we don't have the
correct size information for the object (because the object's type
becomes BLACKHOLE when we eagerly blackhole it) so can't properly zero
the slop.

This problem can be solved for AP_STACK eager blackholing (which unlike
eager blackholing in general, is not optional) by zeroing the payload
after entering the stack. This patch implements this idea.

Fixes #15571.

Test Plan:
Previously concprog001 when compiled and run with sanity checks

    ghc-stage2 Mult.hs -debug -rtsopts
    ./Mult +RTS -DS

was failing with

    Mult: internal error: checkClosure: stack frame
        (GHC version 8.7.20180821 for x86_64_unknown_linux)
        Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

thic patch fixes this panic. The test still panics, but it runs for a while
before panicking (instead of directly panicking as before), and the new problem
seems unrelated:

    Mult: internal error: ASSERTION FAILED: file rts/sm/Sanity.c, line 296
        (GHC version 8.7.20180919 for x86_64_unknown_linux)
        Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

The new problem will be fixed in another diff.

I also tried slow validate (which requires D5164): this does not introduce any
new failures.

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15571

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

9 months agouser-guide: Allow build with sphinx < 1.8
Ben Gamari [Thu, 20 Sep 2018 21:35:05 +0000 (17:35 -0400)] 
user-guide: Allow build with sphinx < 1.8

Apparently the override argument to add_directive_to_domain was added in sphinx
1.8.

9 months agousers_guide: fix sphinx error caused by non-explicit override
Zejun Wu [Thu, 20 Sep 2018 20:05:28 +0000 (16:05 -0400)] 
users_guide: fix sphinx error caused by non-explicit override

Encouter following error when `make`:

```
Extension error:
The 'ghc-flag' directive is already registered to domain std
```

as we register `ghc-flag` to `std` in `add_object_type` first and then
overtride it in `add_directive_to_domain`.

Test Plan:
  make -C utils/haddock/doc html SPHINX_BUILD=/usr/bin/sphinx-build

Reviewers: austin, bgamari, patrickdoc

Subscribers: rwbarton, carter

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

9 months agousers-guide: Fix build with sphinx 1.8
Ben Gamari [Thu, 20 Sep 2018 12:27:37 +0000 (08:27 -0400)] 
users-guide: Fix build with sphinx 1.8

It seems that both add_object_type and add_directive_to_domain both register a
directive. Previously sphinx didn't seem to mind this but as of Sphinx 1.8 it
crashes with an exception.

9 months agoRevert "adds -latomic to. ghc-prim"
Ben Gamari [Wed, 19 Sep 2018 19:23:27 +0000 (15:23 -0400)] 
Revert "adds -latomic to. ghc-prim"

This commit was never properly justified and relies on the existence of
libatomic, which doesn't appear to exist on Darwin.

This reverts commit ec9aacf3eb2975fd302609163aaef429962ecd87.

9 months agoAdd testcase for #14251
Ben Gamari [Wed, 19 Sep 2018 19:04:11 +0000 (15:04 -0400)] 
Add testcase for #14251

9 months agousers guide: Fix a few issues
Frank Steffahn [Tue, 21 Aug 2018 21:37:33 +0000 (23:37 +0200)] 
users guide: Fix a few issues

10 months agoRemove -Waggregate-return when building RTS
Ömer Sinan Ağacan [Thu, 20 Sep 2018 13:04:11 +0000 (16:04 +0300)] 
Remove -Waggregate-return when building RTS

This causes slow validate build to fail (in Profiling.c:countTickss), and
there's nothing wrong with struct returns.

Reviewers: simonmar, bgamari, erikd

Subscribers: rwbarton, carter

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

10 months agoUse predefined known-key names when possible
Chaitanya Koparkar [Wed, 19 Sep 2018 07:19:53 +0000 (09:19 +0200)] 
Use predefined known-key names when possible

Summary:
For certain entities in 'PrelNames', we were creating new 'Name's
instead of reusing the ones already defined. Easily fixed.

Test Plan: ./validate

Reviewers: dfeuer, RyanGlScott, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #13279

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

10 months agodocs: fix example code
john [Mon, 17 Sep 2018 06:21:39 +0000 (06:21 +0000)] 
docs: fix example code

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

10 months agoDon't shortcut SRTs for static functions (#15544)
Simon Marlow [Tue, 18 Sep 2018 15:47:56 +0000 (11:47 -0400)] 
Don't shortcut SRTs for static functions (#15544)

Shortcutting the SRT for a static function can lead to resurrecting a
static object at runtime, which violates assumptions in the GC. See
comments for details.

Test Plan:
- manual testing (in progress)
- validate

Reviewers: osa1, bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15544

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

10 months agoBump deepseq submodule
Ben Gamari [Sun, 16 Sep 2018 20:56:16 +0000 (16:56 -0400)] 
Bump deepseq submodule

(cherry picked from commit c4209ba8a448b501a11d66640d280fe1e194f847)

10 months agoBump text submodule
Ben Gamari [Sun, 16 Sep 2018 20:55:21 +0000 (16:55 -0400)] 
Bump text submodule

(cherry picked from commit a512f1e32bd4d6079559e3172522591863321fe7)

10 months agoBump stm submodule
Ben Gamari [Sun, 16 Sep 2018 20:51:53 +0000 (16:51 -0400)] 
Bump stm submodule

(cherry picked from commit f458bca3a9667af95b8782747eab5b0e70cba4b4)

10 months agoInvert FP conditions to eliminate the explicit NaN check.
klebinger.andreas@gmx.at [Tue, 18 Sep 2018 15:46:38 +0000 (17:46 +0200)] 
Invert FP conditions to eliminate the explicit NaN check.

Summary:
Optimisation: we don't have to test the parity flag if we
know the test has already excluded the unordered case: eg >
and >= test for a zero carry flag, which can only occur for
ordered operands.

By reversing comparisons we can avoid testing the parity
for < and <= as well. This works since:
* If any of the arguments is an NaN CF gets set. Resulting in a false result.
* Since this allows us to rule out NaN we can exchange the arguments and invert the
  direction of the arrows.

Test Plan: ci/nofib

Reviewers: carter, bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: alpmestan, simonpj, jmct, rwbarton, thomie

GHC Trac Issues: #15196

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

10 months agoFix check whether GCC supports __atomic_ builtins
Ilias Tsitsimpis [Tue, 18 Sep 2018 15:45:17 +0000 (17:45 +0200)] 
Fix check whether GCC supports __atomic_ builtins

Summary:
C11 atomics are never used because:

* The program used for checking whether GCC supports
__atomic_ builtins fails with the following error:

```
  error: size mismatch in argument 2 of `__atomic_load`
   int test(int *x) { int y; __atomic_load(&x, &y, __ATOMIC_SEQ_CST); return x; }
```

* There is a typo when checking if CONF_GCC_SUPPORTS__ATOMICS equals YES,
resulting in PRIM_CFLAGS and PRIM_EXTRA_LIBRARIES never being set.

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, erikd, carter

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

10 months agoNoImplicitPrelude in ghc-boot-th, ghc-boot, ghc-heap, ghci
Shayne Fletcher [Tue, 21 Aug 2018 11:58:16 +0000 (07:58 -0400)] 
NoImplicitPrelude in ghc-boot-th, ghc-boot, ghc-heap, ghci

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

10 months agoUsers guide: EmptyDataDecls on by default
Chris Martin [Thu, 30 Aug 2018 17:23:59 +0000 (13:23 -0400)] 
Users guide: EmptyDataDecls on by default

10 months agoUpdated PE linker, section alignment and cleanup.
Tamar Christina [Mon, 17 Sep 2018 21:06:05 +0000 (22:06 +0100)] 
Updated PE linker, section alignment and cleanup.

Summary:
This patch is to address a couple of short comings of the PE linker.

The first thing it does is properly honor section alignments, so SSE code
will work reliably.

While doing this I've also changed how it reads and stores ObjectFile
information. Previously the entire object file was read in and treated
as one blob, including headers, symbol tables etc.

Now the ObjectFile is read in but stored in chunks, tables go into a temporary
info struct and code/data into a new private heap. This allows me to free all
meta data once we're done relocating. Which means we can reclaim this memory.

As I've mentioned above I've also moved from using VirtualAlloc to HeapAlloc.
The reason is VirtualAlloc is meant to be used for more low level memory
allocation, it's very fast because it can only allocate whole blocks,
(64k) by default, and the memory must be paged (4k) aligned.

So when you ask for e.g. 30k of memory, you're given a whole block where 34k
will be wasted memory. Nothing else can ever access that untill you free the 30k.

One downside of HeapAlloc is that you're not in control of how the heap grows,
and heap memory is always committed. So it's harder to tell how much we're
actually using now.

Another big upside of splitting off the ObjectCode tables to info structs
is that I can adjust them, so that later addressings can just use array
subscripts to index into them. This simplifies the code a lot and a lot of
complicated casts and indexing can be removed. Leaving less and more simple
code.

This patch doesn't fix the memprotection but it doesn't regress it either.
It does however make the next changes smaller and fixes the alignments.

Test Plan: ./validate , new test T13617

Reviewers: bgamari, erikd, simonmar, hvr, angerman

Reviewed By: angerman

Subscribers: nickkuk, carter, RyanGlScott, rwbarton, thomie

GHC Trac Issues: #13617

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

10 months agoMake sure forM_ and related functions fuse cleanly
Sebastian Graf [Mon, 17 Sep 2018 19:11:09 +0000 (21:11 +0200)] 
Make sure forM_ and related functions fuse cleanly

Summary:
It was revealed in #8763 that it's hard to come up with a list fusion
helper for `efdtIntFB` that doesn't duplicated occurrences of `c`,
which is crucial in guaranteeing that it is inlined.

Not inlining `c` led to spoiled join points, in turn leading to unnecessary
heap allocation. This patch tackles the problem from a different angle:
Fixing all consumers instead of the less often used producer
`efdtIntFB` by inserting an INLINE pragma in the appropriate places.
See https://ghc.haskell.org/trac/ghc/ticket/8763#comment:76 and the new
Note [List fusion and continuations in 'c'].

A quick run of NoFib revealed no regression or improvements whatsoever.

Reviewers: hvr, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #8763

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