ghc.git
9 months agoUse autoconf to generate version numbers for libiserv and friends
Ryan Scott [Mon, 26 Nov 2018 17:59:30 +0000 (12:59 -0500)] 
Use autoconf to generate version numbers for libiserv and friends

Summary:
Currently, the version numbers for `libiserv`, `iserv`, and
`iserv-proxy` are hard-coded directly into their `.cabal` files.
These are easy to forget to update, and in fact, this has already
happened once (see #15866). Let's use `autoconf` to do this for us
so that it is not forgotten in the future.

Test Plan: ./validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, erikd, carter

GHC Trac Issues: #15866

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

9 months agoPrint explicit foralls in type family eqns when appropriate
Ryan Scott [Mon, 26 Nov 2018 17:59:09 +0000 (12:59 -0500)] 
Print explicit foralls in type family eqns when appropriate

Summary:
When `-fprint-explicit-foralls` is enabled, type family
equations are either printed without an explict `forall` entirely,
or with a bizarre square bracket syntax (in the case of closed type
families). I find neither satisfying, so in this patch, I introduce
support for printing explicit `forall`s in open type-family, closed
type-family, and data-family equations when appropriate. (By "when
appropriate", I refer to the conditions laid out in
`Note [When to print foralls]` in `IfaceType`.)

One tricky point in the implementation is that I had to pick a
visibility for each type variable in a `CoAxiom`/`FamInst` in order
to be able to pass it to `pprUserIfaceForAll` //et al.// Because
the type variables in a type family instance equation can't be
instantiated by the programmer anyway, the choice only really matters
for pretty-printing purposes, so I simply went with good ol'
trustworthy `Specified`. (This design choice is documented in
`Note [Printing foralls in type family instances]` in `IfaceType`.)

Test Plan: make test TEST=T15827

Reviewers: goldfire, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter

GHC Trac Issues: #15827

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

9 months agoFix build on darwin
Ömer Sinan Ağacan [Mon, 26 Nov 2018 09:27:59 +0000 (12:27 +0300)] 
Fix build on darwin

CPP error introduced with b2950e0

9 months agoRevert "Remove redundant check in cgCase"
Ömer Sinan Ağacan [Mon, 26 Nov 2018 09:00:02 +0000 (12:00 +0300)] 
Revert "Remove redundant check in cgCase"

This reverts commit d13b7d60650cb84af11ee15b3f51c3511548cfdb.

(See discussion in D5358)

9 months agoRemove unused declarations in MarkWeak.h
Ömer Sinan Ağacan [Sun, 25 Nov 2018 14:03:39 +0000 (17:03 +0300)] 
Remove unused declarations in MarkWeak.h

9 months agoCircleCI: More cleanup
Ben Gamari [Sat, 24 Nov 2018 18:08:06 +0000 (13:08 -0500)] 
CircleCI: More cleanup

9 months agoRevert "Fix uninformative hp2ps error when the cmdline contains double quotes"
Ben Gamari [Sat, 24 Nov 2018 19:01:40 +0000 (14:01 -0500)] 
Revert "Fix uninformative hp2ps error when the cmdline contains double quotes"

This reverts commit 390df8b51b917fb6409cbde8e73fe838d61d8832.

9 months agoCircleCI: Clean up docker image
Ben Gamari [Sat, 24 Nov 2018 17:34:57 +0000 (12:34 -0500)] 
CircleCI: Clean up docker image

9 months ago[TTG: Handling Source Locations] Foundation and Pat
Shayan-Najd [Thu, 22 Nov 2018 01:23:29 +0000 (01:23 +0000)] 
[TTG: Handling Source Locations] Foundation and Pat

This patch removes the ping-pong style from HsPat (only, for now),
using the plan laid out at
https://ghc.haskell.org/trac/ghc/wiki/ImplementingTreesThatGrow/HandlingSourceLocations (solution
A).

- the class `HasSrcSpan`, and its functions (e.g., `cL` and `dL`), are introduced
- some instances of `HasSrcSpan` are introduced
- some constructors `L` are replaced with `cL`
- some patterns `L` are replaced with `dL->L` view pattern
- some type annotation are necessarily updated (e.g., `Pat p` --> `Pat (GhcPass p)`)

Phab diff: D5036
Trac Issues #15495

Updates haddock submodule

9 months agoFix unused import warning
= [Sat, 24 Nov 2018 09:08:36 +0000 (11:08 +0200)] 
Fix unused import warning

Presumably introduced by new unused import checker.

9 months agoRevert "'DynFlag'-free version of 'mkParserFlags'"
Ben Gamari [Fri, 23 Nov 2018 19:09:30 +0000 (14:09 -0500)] 
Revert "'DynFlag'-free version of 'mkParserFlags'"

This reverts commit 5aa29231ab7603537284eff5e4caff3a73dba6d2.

9 months agoRevert "Simplify 'ExtBits' in the lexer"
Ben Gamari [Fri, 23 Nov 2018 19:09:28 +0000 (14:09 -0500)] 
Revert "Simplify 'ExtBits' in the lexer"

This reverts commit d2fbc33c4ff3074126ab71654af8bbf8a46e4e11.

9 months agoBump text submodule
Ben Gamari [Fri, 23 Nov 2018 17:32:09 +0000 (12:32 -0500)] 
Bump text submodule

9 months agoBump containers submodule
Ben Gamari [Fri, 23 Nov 2018 17:30:13 +0000 (12:30 -0500)] 
Bump containers submodule

9 months agousers guide: Clarify meanings of -g<n> flags
Ben Gamari [Thu, 22 Nov 2018 22:20:40 +0000 (17:20 -0500)] 
users guide: Clarify meanings of -g<n> flags

9 months agodistrib/configure: Set RanlibCmd
Ben Gamari [Thu, 8 Nov 2018 02:02:19 +0000 (21:02 -0500)] 
distrib/configure: Set RanlibCmd

This fixes #15875.

9 months agoconfigure: Use LLVM 7.0
Ben Gamari [Thu, 22 Nov 2018 21:07:49 +0000 (16:07 -0500)] 
configure: Use LLVM 7.0

9 months agoImplement late lambda lift
Sebastian Graf [Fri, 23 Nov 2018 15:24:18 +0000 (16:24 +0100)] 
Implement late lambda lift

Summary:
This implements a selective lambda-lifting pass late in the STG
pipeline.

Lambda lifting has the effect of avoiding closure allocation at the cost
of having to make former free vars available at call sites, possibly
enlarging closures surrounding call sites in turn.

We identify beneficial cases by means of an analysis that estimates
closure growth.

There's a Wiki page at
https://ghc.haskell.org/trac/ghc/wiki/LateLamLift.

Reviewers: simonpj, bgamari, simonmar

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #9476

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

9 months agoTypofix in help text
Gabor Greif [Fri, 23 Nov 2018 11:02:49 +0000 (12:02 +0100)] 
Typofix in help text

9 months agoUse handy shortcut llvm_ways
Gabor Greif [Fri, 23 Nov 2018 09:09:57 +0000 (10:09 +0100)] 
Use handy shortcut llvm_ways

9 months agoFix unused-import warnings
David Eichmann [Thu, 22 Nov 2018 19:48:05 +0000 (14:48 -0500)] 
Fix unused-import warnings

This patch fixes a fairly long-standing bug (dating back to 2015) in
RdrName.bestImport, namely

   commit 9376249b6b78610db055a10d05f6592d6bbbea2f
   Author: Simon Peyton Jones <simonpj@microsoft.com>
   Date:   Wed Oct 28 17:16:55 2015 +0000

   Fix unused-import stuff in a better way

In that patch got the sense of the comparison back to front, and
thereby failed to implement the unused-import rules described in
  Note [Choosing the best import declaration] in RdrName

This led to Trac #13064 and #15393

Fixing this bug revealed a bunch of unused imports in libraries;
the ones in the GHC repo are part of this commit.

The two important changes are

* Fix the bug in bestImport

* Modified the rules by adding (a) in
     Note [Choosing the best import declaration] in RdrName
  Reason: the previosu rules made Trac #5211 go bad again.  And
  the new rule (a) makes sense to me.

In unravalling this I also ended up doing a few other things

* Refactor RnNames.ImportDeclUsage to use a [GlobalRdrElt] for the
  things that are used, rather than [AvailInfo]. This is simpler
  and more direct.

* Rename greParentName to greParent_maybe, to follow GHC
  naming conventions

* Delete dead code RdrName.greUsedRdrName

Bumps a few submodules.

Reviewers: hvr, goldfire, bgamari, simonmar, jrtc27

Subscribers: rwbarton, carter

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

9 months agoDon't pass -no-pie when -pgmc is supplied
Krzysztof Gogolewski [Thu, 22 Nov 2018 19:46:27 +0000 (14:46 -0500)] 
Don't pass -no-pie when -pgmc is supplied

Test Plan: validate

Reviewers: bgamari

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15319

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

9 months agoSimplify 'ExtBits' in the lexer
Alec Theriault [Thu, 22 Nov 2018 19:40:08 +0000 (14:40 -0500)] 
Simplify 'ExtBits' in the lexer

The main change is to export 'ExtBits' instead of defining/exporting a
bunch of boilerplate functions that test for a particular 'ExtBits'.
In the process, I also

  * cleaned up an unneeded special case for 'ITstatic'
  * made 'UsePosPrags' another variant of 'ExtBits'
  * made the logic in 'reservedSymsFM' match that of 'reservedWordsFM'

Test Plan: make test

Reviewers: bgamari, alanz

Subscribers: sjakobi, rwbarton, mpickering, carter

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

9 months ago'DynFlag'-free version of 'mkParserFlags'
Alec Theriault [Thu, 22 Nov 2018 19:39:41 +0000 (14:39 -0500)] 
'DynFlag'-free version of 'mkParserFlags'

Obtaining a `DynFlags` is difficult, making using the lexer/parser
for pure parsing/lexing unreasonably difficult, even with
`mkPStatePure`.
This is despite the fact that we only really need

  * language extension flags
  * warning flags
  * a handful of boolean options

The new `mkParserFlags'` function makes is easier to directly construct
a `ParserFlags`. Furthermore, since `pExtsBitmap` is just a footgun,
I've gone ahead and made `ParserFlags` an abstract type.

Reviewers: bgamari, alanz, sjakobi

Reviewed By: bgamari, sjakobi

Subscribers: mpickering, sjakobi, rwbarton, carter

GHC Trac Issues: #11301

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

9 months agoDoc-only fixes
Alec Theriault [Fri, 21 Sep 2018 06:31:00 +0000 (23:31 -0700)] 
Doc-only fixes

* laws are capitalized definition lists, no emphasis on the labels
* adds missing hyperlinks
* fixes other misc. Haddock markup issues.

9 months agoLLVM: Use generic code for small size quot-rem ops
Peter Trommler [Sun, 18 Nov 2018 15:41:38 +0000 (16:41 +0100)] 
LLVM: Use generic code for small size quot-rem ops

9 months agorts/MachO: Iterate through N (all) symbols, not M external symbols
Dario Bertini [Fri, 16 Nov 2018 14:49:37 +0000 (15:49 +0100)] 
rts/MachO: Iterate through N (all) symbols, not M external symbols

Fixes #15105

9 months agorts/MachO: A bit of refactoring in ocGetNames
Dario Bertini [Fri, 16 Nov 2018 14:48:36 +0000 (15:48 +0100)] 
rts/MachO: A bit of refactoring in ocGetNames

Eliminates a bit of repetition.

9 months agorts/MachO: Add a bit more debugging output to getNames
Dario Bertini [Fri, 16 Nov 2018 14:46:54 +0000 (15:46 +0100)] 
rts/MachO: Add a bit more debugging output to getNames

9 months agocircleci: Actually build with in-tree GMP on Darwin
Dario Bertini [Fri, 16 Nov 2018 09:25:32 +0000 (10:25 +0100)] 
circleci: Actually build with in-tree GMP on Darwin

Fixes #15404.

9 months agollvmGen: Eliminate duplicate definition
Gabor Greif [Tue, 20 Nov 2018 13:35:09 +0000 (14:35 +0100)] 
llvmGen: Eliminate duplicate definition

remove local

9 months agoUNREG: PprC: Add support for adjacent floats
James Clarke [Thu, 22 Nov 2018 16:55:17 +0000 (11:55 -0500)] 
UNREG: PprC: Add support for adjacent floats

When two 32-bit floats are adjacent for a 64-bit target, there is no
padding between them to force alignment, so we must combine their bit
representations into a single word.

Reviewers: bgamari, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15853

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

9 months agoOverhaul -fprint-explicit-kinds to use VKA
Ryan Scott [Thu, 22 Nov 2018 16:55:00 +0000 (11:55 -0500)] 
Overhaul -fprint-explicit-kinds to use VKA

This patch changes the behavior of `-fprint-explicit-kinds`
so that it displays kind argument using visible kind application.
In other words, the flag now:

1. Prints instantiations of specified variables with `@(...)`.
2. Prints instantiations of inferred variables with `@{...}`.

In addition, this patch removes the `Use -fprint-explicit-kinds to
see the kind arguments` error message that often arises when a type
mismatch occurs due to different kinds. Instead, whenever there is a
kind mismatch, we now enable the `-fprint-explicit-kinds` flag
locally to help cue to the programmer where the error lies.
(See `Note [Kind arguments in error messages]` in `TcErrors`.)
As a result, these funny `@{...}` things can now appear to the user
even without turning on the `-fprint-explicit-kinds` flag explicitly,
so I took the liberty of documenting them in the users' guide.

Test Plan: ./validate

Reviewers: goldfire, simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15871

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

9 months agoHadrian: Misc. fixes in Haddock rules
Alec Theriault [Thu, 22 Nov 2018 16:53:10 +0000 (11:53 -0500)] 
Hadrian: Misc. fixes in Haddock rules

* Pass 'GHC/Prim.hs' to Haddock when processing 'ghc-prim'. This
  file is autogenerated for the sole purpose of giving Haddock
  something to process, so we really should make sure it gets
  through to Haddock!

* Add a "docs-haddock" build rule, which should build all Haddock docs
  that the Makefile builds by default (all libs + index for libs + ghc)

* Prune some unnecessary rules (esp. `gen_contents_index`)

Reviewers: bgamari, snowleopard

Reviewed By: snowleopard

Subscribers: alpmestan, snowleopard, rwbarton, carter

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

9 months agoRemove warnings-silencing flags for code generated by Alex
Simon Jakobi [Thu, 22 Nov 2018 16:52:53 +0000 (11:52 -0500)] 
Remove warnings-silencing flags for code generated by Alex

Current versions of Alex don't seem to produce as many warnings any
more.

In order to silence a warning and to avoid overlong lines, I've taken
the liberty of refactoring 'tok_num'.

Test Plan: ./validate

Reviewers: bgamari, simonmar

Reviewed By: simonmar

Subscribers: erikd, rwbarton, carter

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

9 months agoCalling gcc: Pass optc flags as last options (#14452)
Roland Senn [Thu, 22 Nov 2018 16:52:33 +0000 (11:52 -0500)] 
Calling gcc: Pass optc flags as last options (#14452)

Test Plan: make test TEST=T14452

Reviewers: hvr, bgamari, monoidal, thomie, osa1

Reviewed By: osa1

Subscribers: rwbarton, carter

GHC Trac Issues: #14452

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

9 months agoFix #15852 by eta expanding data family instance RHSes, too
Ryan Scott [Thu, 22 Nov 2018 16:52:12 +0000 (11:52 -0500)] 
Fix #15852 by eta expanding data family instance RHSes, too

When I defined `etaExpandFamInstLHS`, I blatantly forgot
to eta expand the RHSes of data family instances. (Actually, I
claimed that they didn't //need// to be eta expanded. I'm not sure
what I was thinking.)

This fixes the issue by changing `etaExpandFamInstLHS` to
`etaExpandFamInst` and, well, making it actually eta expand the RHS.

Test Plan: make test TEST=T15852

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15852

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

9 months agoRefactor TcRnMonad.mapAndRecoverM
Simon Jakobi [Thu, 22 Nov 2018 16:51:53 +0000 (11:51 -0500)] 
Refactor TcRnMonad.mapAndRecoverM

This version doesn't require the 'reverse' step after the monadic
fold.

Test Plan: ./validate

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: monoidal, rwbarton, carter

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

9 months agoFix uninformative hp2ps error when the cmdline contains double quotes
Zejun Wu [Thu, 22 Nov 2018 16:51:15 +0000 (11:51 -0500)] 
Fix uninformative hp2ps error when the cmdline contains double quotes

The format of hp file didn't allow double quotes inside strings, and
under prof build, we include args in JOB, which may have double quotes.
When this happens, the error message is confusing to the user. This can
also happen under normal build if the executable name contains double
quite, which is unlikely though.

We fix this issue by introducing escaping for double quotes inside a
string by repeating it twice.

We also fix a buffer overflow bug when the length of the string happen
to be multiple of 5000.

Test Plan:
new tests, which used to fail with error message:

```
hp2ps: "T15904".hp, line 2: integer must follow identifier
```

use new ghc and hp2ps to profile a simple program.

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15904

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

9 months agoLoad plugins in interactive session
Christiaan Baaij [Thu, 22 Nov 2018 16:50:51 +0000 (11:50 -0500)] 
Load plugins in interactive session

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: monoidal, rwbarton, carter

GHC Trac Issues: #15633

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

9 months agoFix deadlock bug when mkFastStringWith is duplicated
Zejun Wu [Thu, 22 Nov 2018 16:49:51 +0000 (11:49 -0500)] 
Fix deadlock bug when mkFastStringWith is duplicated

In D5211, we use `withMVar` to guard writes to the same segment, this
is unsafe to be duplicated. It can lead to deadlock if it is only run
partially and `putMVar` is not called after `takeMVar`.

Test Plan:
  ./validate

We used to see deadlock when building stackage without this fix, and it
no longer happens.

Reviewers: simonmar, bgamari

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

9 months agoplugins10 no longer broken
Christiaan Baaij [Thu, 22 Nov 2018 16:49:37 +0000 (11:49 -0500)] 
plugins10 no longer broken

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: rwbarton, carter

GHC Trac Issues: #15216

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

9 months agorts.cabal.in: force inclusion of findPtr/_findPtr symbol only with debug flag
Alp Mestanogullari [Thu, 22 Nov 2018 16:47:48 +0000 (11:47 -0500)] 
rts.cabal.in: force inclusion of findPtr/_findPtr symbol only with debug flag

The previous strategy caused problems on Windows, as pointed out
at [1]

[1]: https://phabricator.haskell.org/rGHC900c47f88784#133905

Reviewers: Phyx, bgamari, erikd, simonmar

Reviewed By: Phyx

Subscribers: rwbarton, carter

GHC Trac Issues: #15671

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

9 months agoHadrian: work around Cabal's/GHC's different Arch/OS strings
Alec Theriault [Thu, 22 Nov 2018 16:47:27 +0000 (11:47 -0500)] 
Hadrian: work around Cabal's/GHC's different Arch/OS strings

The path to the 'include' subdirectory of 'rts' includes a folder that
whose name is generated by Cabal and mentiones the architecture and OS.
For example:

    _build/stage1/lib/x86_64-osx-ghc-8.7.20181120/rts-1.0/include

Hadrian needs to be aware that Cabal renders architectures and OSes in
a slightly different way than GHC. There is already symmetric logic in
Cabal (for working with GHC environment files, which follow GHC's naming
conventions).

Test Plan: ./hadrian/build.sh -c "binary-dist" # on mac

Reviewers: snowleopard, alpmestan, bgamari

Reviewed By: snowleopard

Subscribers: rwbarton, carter

GHC Trac Issues: #15922

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

9 months agorts: fix Windows megablock allocator
Tamar Christina [Thu, 22 Nov 2018 16:47:10 +0000 (11:47 -0500)] 
rts: fix Windows megablock allocator

The megablock allocator does not currently check that after aligning the
free region if it still has enough space to actually do the allocation.

This causes it to return a memory region which it didn't fully allocate
itself.  Even worse, it can cause it to return a block with a region
that will be present in two allocation pools.

This causes if you're lucky an error from the OS that you're committing
memory that has never been reserved, or causes random heap corruption.

This change makes it consider the alignment as well.

Test Plan: ./validate , testcase testmblockalloc

Reviewers: bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

9 months agoDon't reverse explicit export lists during renaming
Simon Jakobi [Thu, 22 Nov 2018 16:45:35 +0000 (11:45 -0500)] 
Don't reverse explicit export lists during renaming

This will be useful for Hi Haddock / D5067.

Previously any export list in 'tcg_rn_exports' would be in reverse
order.

Also remove a redundant setSrcSpan.

Test Plan: ./validate

Reviewers: bgamari

Subscribers: rwbarton, carter

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

9 months agoFixup the new code layout patch for SplitObjs.
klebinger.andreas@gmx.at [Thu, 22 Nov 2018 16:43:53 +0000 (11:43 -0500)] 
Fixup the new code layout patch for SplitObjs.

When splitting objects we sometimes generate
dummy CmmProcs containing bottom in some fields.

Code introduced in the new code layout patch looked
at these which blew up the compiler. Now we instead
check first if the function actually contains code.

Reviewers: bgamari

Subscribers: simonpj, rwbarton, carter

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

9 months agotestuite: update more windows tests outputs
Tamar Christina [Thu, 22 Nov 2018 16:43:37 +0000 (11:43 -0500)] 
testuite: update more windows tests outputs

Test Plan: ./validate

Reviewers: bgamari, simonmar

Subscribers: rwbarton, carter

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

9 months agorts: Fix bss initialization on Windows
Tamar Christina [Thu, 22 Nov 2018 16:43:15 +0000 (11:43 -0500)] 
rts: Fix bss initialization on Windows

This patch fixes BSS initialization such that it is
initialized to 0 as you'd expect.

Test Plan: ./validate, test T7040_ghci

Reviewers: bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15669

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

9 months agorts/M32Alloc: Abort if m32 linker mmap fails
Ben Gamari [Sat, 10 Nov 2018 20:35:37 +0000 (15:35 -0500)] 
rts/M32Alloc: Abort if m32 linker mmap fails

Previously we should just blinding dereference a NULL pointer.

9 months agoAdd test for #15437
Matthew Pickering [Thu, 22 Nov 2018 16:38:10 +0000 (11:38 -0500)] 
Add test for #15437

Reviewers: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15437

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

9 months agobase: Mention openFile throwing does-not-exist-errors on FIFOs
Ben Gamari [Thu, 22 Nov 2018 16:33:39 +0000 (11:33 -0500)] 
base: Mention openFile throwing does-not-exist-errors on FIFOs

As discussed in #15715, the POSIX specification specifies that
attempting to open a FIFO in write-only mode when the FIFO has no
readers will fail with -ENOENT.

[skip ci]

Test Plan: Read it

Reviewers: hvr

Subscribers: rwbarton, carter

GHC Trac Issues: #15715

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

9 months agoFix GhostScript detection (Trac #15856)
Krzysztof Gogolewski [Thu, 22 Nov 2018 16:32:55 +0000 (11:32 -0500)] 
Fix GhostScript detection (Trac #15856)

The option `confdir` (used in GhostScript test) was set correctly
via `--config` in `test.mk` and incorrectly via `config/ghc`.
AFAICT, some time ago this was working because the
incorrect assignment was done first, and later it broke.

Hardian doesn't pass `confdir`. I removed `confdir` and use
`config.top` to determine the directory of the
`good.ps` and `bad.ps` files. This is simpler.

I also removed some redundant assignments in `config/ghc`.

Test Plan: manually set config.have_profiling and make test

Reviewers: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15856

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

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

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

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

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

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

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

Subscribers: tdammers, rwbarton, thomie, carter

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

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

We now generally use split-sections instead.

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

only concat once

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

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

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

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

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

GHC Trac Issues: #15906

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

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

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

Test Plan: Validated locally.

Reviewers: sgraf, bgamari, simonmar

Subscribers: rwbarton, carter

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

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

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

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

Fixes #15754.

Reviewers: simonpj, osa1, bgamari, simonmar

Reviewed By: osa1

Subscribers: rwbarton, carter

GHC Trac Issues: #15754

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

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

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

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

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

Reviewers: bgamari, tdammers

Reviewed By: tdammers

Subscribers: mpickering, RyanGlScott, rwbarton, carter

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

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

Reviewers: maoe, bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, carter, sjorn3

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

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

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

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

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

This builds off of D4475.

Bumps binary submodule.

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

Subscribers: rwbarton, thomie

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

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

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

Reviewers: mpickering, monoidal, bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #13704, #15702

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

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

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

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

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

Reviewers: bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

GHC Trac Issues: #11477

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

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

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

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

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

Now, they're are printed like this:

    {x_s2fE, y_s2fF, z_s2fG, g_s2fH}

Reviewers: simonpj, bgamari, AndreasK, dfeuer, osa1

Reviewed By: osa1

Subscribers: osa1, rwbarton, carter

GHC Trac Issues: #15879

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

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

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

Reviewers: bgamari, monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

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

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

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

Test Plan: make test TEST=T12906

Reviewers: dfeuer, RyanGlScott, ezyang, mpickering, bgamari

Reviewed By: RyanGlScott

Subscribers: rwbarton, carter

GHC Trac Issues: #12906

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

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

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

Test Plan: make test TEST=T12525

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

Reviewed By: osa1

Subscribers: simonpj, osa1, rwbarton, carter

GHC Trac Issues: #12525

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

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

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

Reviewers: bgamari, erikd, alpmestan

Reviewed By: alpmestan

Subscribers: rwbarton, carter

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

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

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

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

Test Plan: TEST=T15898 ./validate

Reviewers: bgamari

Subscribers: rwbarton, carter

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

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

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

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

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

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

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

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

Things this patch does:

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

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

Test Plan: ci

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

Reviewed By: RyanGlScott

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

GHC Trac Issues: #15124

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

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

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

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

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

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

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

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

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

Test Plan: Validated locally

Reviewers: simonmar, hvr, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, carter

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

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

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

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

Test Plan: build haddock (make or hadrian)

Reviewers: bgamari, AndreasK

Reviewed By: AndreasK

Subscribers: osa1, AndreasK, rwbarton, carter

GHC Trac Issues: #15900

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

10 months agoSmarter HsType pretty-print for promoted datacons
Simon Peyton Jones [Thu, 15 Nov 2018 09:02:11 +0000 (09:02 +0000)] 
Smarter HsType pretty-print for promoted datacons

Fix Trac #15898, by being smarter about when to print
a space before a promoted data constructor, in a HsType.
I had to implement a mildly tiresome function
    HsType.lhsTypeHasLeadingPromotionQuote
It has multiple cases, of course, but it's very simple.

The patch improves the error-message output in a bunch of
cases, and (to my surprise) actually fixes a bug in the
output of T14343 (Trac #14343), thus

  -  In the expression: _ :: Proxy '('( 'True,  'False),  'False)
  +  In the expression: _ :: Proxy '( '( 'True, 'False), 'False)

I discovered that there were two copies of the PromotionFlag
type (a boolean, with helpfully named data cons), one in
IfaceType and one in HsType.  So I combined into one,
PromotionFlag, and moved it to BasicTypes.  That's why
quite a few files are touched, but it's all routine.

10 months agoComments adding to the fix for Trac #15859
Simon Peyton Jones [Tue, 6 Nov 2018 09:10:30 +0000 (09:10 +0000)] 
Comments adding to the fix for Trac #15859

10 months agoComments only, about polykinded TyConApps
Simon Peyton Jones [Mon, 5 Nov 2018 13:48:27 +0000 (13:48 +0000)] 
Comments only, about polykinded TyConApps

See Trac #15704 comment:8ff

10 months agoFix a bug in SRT generation (#15892)
Simon Marlow [Thu, 15 Nov 2018 03:31:35 +0000 (06:31 +0300)] 
Fix a bug in SRT generation (#15892)

Summary:
The logic in `Note [recursive SRTs]` was correct. However, my
implementation of it wasn't: I got the associativity of
`Set.difference` wrong, which led to an extremely subtle and difficult
to find bug.

Fortunately now we have a test case. I was able to cut down the code
to something manageable, and I've added it to the test suite.

Test Plan:
Before (using my stage 1 compiler without the fix):

```
====> T15892(normal) 1 of 1 [0, 0, 0]
cd "T15892.run" &&  "/home/smarlow/ghc/inplace/bin/ghc-stage1" -o T15892
T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
-dno-debug-output  -O
cd "T15892.run" && ./T15892  +RTS -G1 -A32k -RTS
Wrong exit code for T15892(normal)(expected 0 , actual 134 )
Stderr ( T15892 ):
T15892: internal error: evacuate: strange closure type 0
    (GHC version 8.7.20181113 for x86_64_unknown_linux)
    Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
Aborted (core dumped)
*** unexpected failure for T15892(normal)
=====> T15892(g1) 1 of 1 [0, 1, 0]
cd "T15892.run" &&  "/home/smarlow/ghc/inplace/bin/ghc-stage1" -o T15892
T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
-dno-debug-output  -O
cd "T15892.run" && ./T15892 +RTS -G1 -RTS +RTS -G1 -A32k -RTS
Wrong exit code for T15892(g1)(expected 0 , actual 134 )
Stderr ( T15892 ):
T15892: internal error: evacuate: strange closure type 0
    (GHC version 8.7.20181113 for x86_64_unknown_linux)
    Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug
Aborted (core dumped)
```

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

```
=====> T15892(normal) 1 of 1 [0, 0, 0]
cd "T15892.run" &&  "/home/smarlow/ghc/inplace/test   spaces/ghc-stage2"
-o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
-dno-debug-output
cd "T15892.run" && ./T15892  +RTS -G1 -A32k -RTS
=====> T15892(g1) 1 of 1 [0, 0, 0]
cd "T15892.run" &&  "/home/smarlow/ghc/inplace/test   spaces/ghc-stage2"
-o T15892 T15892.hs -dcore-lint -dcmm-lint -no-user-package-db -rtsopts
-fno-warn-missed-specialisations -fshow-warning-groups
-fdiagnostics-color=never -fno-diagnostics-show-caret -Werror=compat
-dno-debug-output
cd "T15892.run" && ./T15892 +RTS -G1 -RTS +RTS -G1 -A32k -RTS
```

Reviewers: bgamari, osa1, erikd

Reviewed By: osa1

Subscribers: rwbarton, carter

GHC Trac Issues: #15892

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

10 months agohadrian: build ghc-iserv-dyn
David Eichmann [Wed, 14 Nov 2018 14:43:57 +0000 (15:43 +0100)] 
hadrian: build ghc-iserv-dyn

... in addition to ghc-iserv and ghc-iserv-prof, as it is required
to get 10+ tests to pass

Reviewers: bgamari, alpmestan

Reviewed By: alpmestan

Subscribers: alpmestan, rwbarton, carter

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

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

Summary:
This brings the situation of `UniqDSet` in line with `UniqSet`.

@dfeuer said in D3146#92820 that he would do this, but probably
never got around to it.

Validated locally.

Reviewers: AndreasK, mpickering, bgamari, dfeuer, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, carter, dfeuer

GHC Trac Issues: #15879, #13114

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

10 months agocircleci: Disable pushing of test metrics if not validating upstream
Ben Gamari [Mon, 12 Nov 2018 19:11:05 +0000 (14:11 -0500)] 
circleci: Disable pushing of test metrics if not validating upstream

10 months agoCorrect link to GHC API in docs index.
Shao Cheng [Mon, 12 Nov 2018 10:45:06 +0000 (18:45 +0800)] 
Correct link to GHC API in docs index.

10 months agocompareByPreference: handle the integer-gmp vs -simple case
Alp Mestanogullari [Mon, 12 Nov 2018 14:38:46 +0000 (15:38 +0100)] 
compareByPreference: handle the integer-gmp vs -simple case

Currently, it assumes the package names are identical and this
breaks in the case where integer-gmp is in one package db and
integer-simple in another. This became a problem with
the commit: fc2ff6dd7496a33bf68165b28f37f40b7d647418.

Instead of following the precedence information, leading to
the right choice, the current code would compare the
integer-gmp and integer-simple versions and pick integer-gmp
because it happened to have a greater version, despite having
a lower precedence. See
https://github.com/snowleopard/hadrian/issues/702 for
a comprehensive report about the problem.

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

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

Reviewers: snowleopard, bgamari

Reviewed By: bgamari

Subscribers: snowleopard, rwbarton, carter

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

10 months agoRemove StgBinderInfo and related computation in CoreToStg
Ömer Sinan Ağacan [Mon, 12 Nov 2018 03:50:54 +0000 (06:50 +0300)] 
Remove StgBinderInfo and related computation in CoreToStg

- The StgBinderInfo type was never used in the code gen, so the type, related
  computation in CoreToStg, and some comments about it are removed. See #15770
  for more details.

- Simplified CoreToStg after removing the StgBinderInfo computation: removed
  StgBinderInfo arguments and mfix stuff.

The StgBinderInfo values were not used in the code gen, but I still run nofib
just to make sure: 0.0% change in allocations and binary sizes.

Test Plan: Validated locally

Reviewers: simonpj, simonmar, bgamari, sgraf

Reviewed By: sgraf

Subscribers: AndreasK, sgraf, rwbarton, carter

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

10 months agoFix #15594 (--abi-hash with Backpack sometimes fails)
Edward Z. Yang [Mon, 12 Nov 2018 03:39:29 +0000 (22:39 -0500)] 
Fix #15594 (--abi-hash with Backpack sometimes fails)

Summary:
For holes, its necessary to "see through" the instantiation
of the hole to get accurate family instance dependencies.
For example, if B imports <A>, and <A> is instantiated with
F, we must grab and include all of the dep_finsts from
F to have an accurate transitive dep_finsts list.

However, we MUST NOT do this for regular modules.
First, for efficiency reasons, doing this
bloats the the dep_finsts list, because we *already* had
those modules in the list (it wasn't a hole module, after
all). But there's a second, more important correctness
consideration: we perform module renaming when running
--abi-hash.  In this case, GHC's contract to the user is that
it will NOT go and read out interfaces of any dependencies
(https://github.com/haskell/cabal/issues/3633); the point of
--abi-hash is just to get a hash of the on-disk interfaces
for this *specific* package.  If we go off and tug on the
interface for /everything/ in dep_finsts, we're gonna have a
bad time.  (It's safe to do do this for hole modules, though,
because the hmap for --abi-hash is always trivial, so the
interface we request is local.  Though, maybe we ought
not to do it in this case either...)

Signed-off-by: Edward Z. Yang <ezyang@fb.com>
Test Plan: validate

Reviewers: alexbiehl, goldfire, bgamari

Subscribers: ppk, shlevy, rwbarton, carter

GHC Trac Issues: #15594

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

10 months agoRespect naming conventions in module RnUnbound.hs in fix for #15611
Roland Senn [Sun, 11 Nov 2018 10:21:26 +0000 (11:21 +0100)] 
Respect naming conventions in module RnUnbound.hs in fix for #15611

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

  - Top level functions names are written in camelCase.
  -  Local function names in where clauses are written as names_with_underscores.

This patch restores these conventions.

Test Plan: make test TESTS="T15611a T15611b"

Reviewers: DavidEichmann, monoidal, hvr, mpickering, bgamari

Reviewed By: mpickering

Subscribers: rwbarton, carter

GHC Trac Issues: #15611

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

10 months agoIgnore .gdb_history files
Ben Gamari [Sun, 11 Nov 2018 10:20:57 +0000 (11:20 +0100)] 
Ignore .gdb_history files

Summary: I tend to accumulate these and they are often quite useful to keep around.

Reviewers: monoidal

Reviewed By: monoidal

Subscribers: rwbarton, carter

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

10 months agoiserv: Fix typo in cabal file
Matthew Pickering [Sun, 11 Nov 2018 10:20:19 +0000 (11:20 +0100)] 
iserv: Fix typo in cabal file

Reviewers: bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, rwbarton, carter

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

10 months agoGHCi does not need a main function
roland [Sun, 11 Nov 2018 10:19:30 +0000 (11:19 +0100)] 
GHCi does not need a main function

Summary: In GHCi we don't check anymore, whether a main function is exported.

Test Plan: make test TEST=T11647

Reviewers: hvr, osa1, monoidal, mpickering, bgamari

Reviewed By: osa1, mpickering

Subscribers: rwbarton, carter

GHC Trac Issues: #11647

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

10 months agoFix #15845 by defining etaExpandFamInstLHS and using it
Ryan Scott [Thu, 8 Nov 2018 15:26:48 +0000 (10:26 -0500)] 
Fix #15845 by defining etaExpandFamInstLHS and using it

Summary:
Both #9692 and #14179 were caused by GHC being careless
about using eta-reduced data family instance axioms. Each of those
tickets were fixed by manually whipping up some code to eta-expand
the axioms. The same sort of issue has now caused #15845, so I
figured it was high time to factor out the code that each of these
fixes have in common.

This patch introduces the `etaExpandFamInstLHS` function, which takes
a family instance's type variables, LHS types, and RHS type, and
returns type variables and LHS types that have been eta-expanded if
necessary, in the case of a data family instance. (If it's a type
family instance, `etaExpandFamInstLHS` just returns the supplied type
variables and LHS types unchanged).

Along the way, I noticed that many references to
`Note [Eta reduction for data families]` (in `FamInstEnv`) had
slightly bitrotted (they either referred to a somewhat different
name, or claimed that the Note lived in a different module), so
I took the liberty of cleaning those up.

Test Plan: make test TEST="T9692 T15845"

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, carter

GHC Trac Issues: #15845

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

10 months agotestsuite: Save performance metrics in git notes.
David Eichmann [Wed, 7 Nov 2018 17:02:47 +0000 (12:02 -0500)] 
testsuite: Save performance metrics in git notes.

This patch makes the following improvement:
  - Automatically records test metrics (per test environment) so that
    the programmer need not supply nor update expected values in *.T
    files.
    - On expected metric changes, the programmer need only indicate the
      direction of change in the git commit message.
  - Provides a simple python tool "perf_notes.py" to compare metrics
    over time.

Issues:
  - Using just the previous commit allows performance to drift with each
    commit.
    - Currently we allow drift as we have a preference for minimizing
      false positives.
    - Some possible alternatives include:
      - Use metrics from a fixed commit per test: the last commit that
        allowed a change in performance (else the oldest metric)
      - Or use some sort of aggregate since the last commit that allowed
        a change in performance (else all available metrics)
      - These alternatives may result in a performance issue (with the
        test driver) having to heavily search git commits/notes.
  - Run locally, performance tests will trivially pass unless the tests
    were run locally on the previous commit. This is often not the case
    e.g.  after pulling recent changes.

Previously, *.T files contain statements such as:
```
stats_num_field('peak_megabytes_allocated', (2, 1))
compiler_stats_num_field('bytes allocated',
                         [(wordsize(64), 165890392, 10)])
```
This required the programmer to give the expected values and a tolerance
deviation (percentage). With this patch, the above statements are
replaced with:
```
collect_stats('peak_megabytes_allocated', 5)
collect_compiler_stats('bytes allocated', 10)
```
So that programmer must only enter which metrics to test and a tolerance
deviation. No expected value is required. CircleCI will then run the
tests per test environment and record the metrics to a git note for that
commit and push them to the git.haskell.org ghc repo. Metrics will be
compared to the previous commit. If they are different by the tolerance
deviation from the *.T file, then the corresponding test will fail. By
adding to the git commit message e.g.
```
 # Metric (In|De)crease <metric(s)> <options>: <tests>
Metric Increase ['bytes allocated', 'peak_megabytes_allocated'] \
         (test_env='linux_x86', way='default'):
    Test012, Test345
Metric Decrease 'bytes allocated':
    Test678
Metric Increase:
    Test711
```
This will allow the noted changes (letting the test pass). Note that by
omitting metrics or options, the change will apply to all possible
metrics/options (i.e. in the above, an increase for all metrics in all
test environments is allowed for Test711)

phabricator will use the message in the description

Reviewers: bgamari, hvr

Reviewed By: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #12758

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

10 months agoRevert "CircleCI: Build DWARF-enabled Linux bindists"
Ben Gamari [Wed, 7 Nov 2018 14:17:59 +0000 (09:17 -0500)] 
Revert "CircleCI: Build DWARF-enabled Linux bindists"

This reverts commit 406978c478e4b14e677f396499420d7b8e5d21fd.

10 months agoRevert "Multiple fixes / improvements for LLVM backend"
Ben Gamari [Wed, 7 Nov 2018 13:06:18 +0000 (08:06 -0500)] 
Revert "Multiple fixes / improvements for LLVM backend"

This reverts commit adcb5fb47c0942671d409b940d8884daa9359ca4.