ghc.git
2 years agoTypos in manual and comments [ci skip]
Gabor Greif [Tue, 17 Jan 2017 10:25:49 +0000 (11:25 +0100)] 
Typos in manual and comments [ci skip]

2 years agoComments about TyBinders (only)
Simon Peyton Jones [Fri, 13 Jan 2017 15:58:06 +0000 (15:58 +0000)] 
Comments about TyBinders (only)

2 years agoRefine exprOkForSpeculation
Simon Peyton Jones [Fri, 13 Jan 2017 14:20:15 +0000 (14:20 +0000)] 
Refine exprOkForSpeculation

This patch implements two related changes, both inspired by
the discussion on Trac #13027, comment:23:

* exprOkForSpeculation (op# a1 .. an), where op# is a primop,
  now skips over arguments ai of lifted type.  See the comments
  at Note [Primops with lifted arguments] in CoreUtils.

  There is no need to treat dataToTag# specially any more.

* dataToTag# is now treated as a can-fail primop.  See
  Note [dataToTag#] in primops.txt.pp

I don't expect this to have a visible effect on anything, but
it's much more solid than before.

2 years agoUnbreak libGHCi by adding missing symbol.
Tamar Christina [Mon, 16 Jan 2017 08:14:28 +0000 (08:14 +0000)] 
Unbreak libGHCi by adding missing symbol.

Summary:
Someone committed a new public symbol `purgeObj` again
without adding it to the symbols table.

Test Plan: ./validate

Reviewers: austin, bgamari, simonmar, erikd

Reviewed By: erikd

Subscribers: thomie

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

2 years agoAdd missing test files for T13082.
Tamar Christina [Mon, 16 Jan 2017 03:11:44 +0000 (03:11 +0000)] 
Add missing test files for T13082.

Summary:
Add two missing test files for T13082.
The reason they were missing is because the .gitignore
contains a very harmful and broad wildcard `foo*`. Why?

Test Plan: make test TEST="T13082_good T13082_fail"

Reviewers: austin, bgamari, simonmar, erikd

Reviewed By: erikd

Subscribers: thomie

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

GHC Trac Issues: #13082

2 years agoAdd dump-parsed-ast flag and functionality
Alan Zimmerman [Wed, 11 Jan 2017 09:57:35 +0000 (11:57 +0200)] 
Add dump-parsed-ast flag and functionality

Summary:
This flag causes a dump of the ParsedSource as an AST in textual form, similar
to the ghc-dump-tree on hackage.

Test Plan: ./validate

Reviewers: mpickering, bgamari, austin

Reviewed By: mpickering

Subscribers: nominolo, thomie

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

GHC Trac Issues: #11140

2 years agoLLVM: Tweak TBAA metadata codegen
Erik de Castro Lopo [Sun, 15 Jan 2017 19:17:17 +0000 (06:17 +1100)] 
LLVM: Tweak TBAA metadata codegen

This change is requred for llvm 4.0. GHC doesn't use that version yet,
but this change is just as valid for versions eariler than 4.0.

Two changes needed:

* Previously, GHC defined a `topN` node in the TBAA heiarchy and some IR
  instructions referenced that node. With LLVM 4.0 the root node can no
  longer be referenced by IR instructions, so we introduce a new element
  `rootN` and make `topN` a child of that.

* Previously the root TBAA node was rendered as "!0 = !{!"root", null}".
  With LLVM 4.0 that needs to be "!0 = !{!"root"}" which is also
  accepted by earlier versions.

Test Plan: Build with quick-llvm BuildFlavor and run tests

Reviewers: bgamari, drbo, austin, angerman, michalt, DemiMarie

Reviewed By: DemiMarie

Subscribers: mpickering, DemiMarie, thomie

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

2 years agoRevert "Record evaluated-ness on workers and wrappers"
Matthew Pickering [Sun, 15 Jan 2017 17:33:30 +0000 (17:33 +0000)] 
Revert "Record evaluated-ness on workers and wrappers"

This reverts commit 6b976eb89fe72827f226506d16d3721ba4e28bab.

Ben, Ryan and I decided to revert this for now due to T12234 failing
and causing all harbormaster builds to fail.

2 years agoImprove access violation reporting on Windows
Ryan Scott [Sun, 15 Jan 2017 16:54:41 +0000 (11:54 -0500)] 
Improve access violation reporting on Windows

Summary:
This patch is courtesy of @awson.

Currently, whenever GHC catches a segfault on Windows, it simply reports the
somewhat uninformative message
`Segmentation fault/access violation in generated code`. This patch adds to
the message the type of violation (read/write/dep) and location information,
which should help debugging segfaults in the future.

Fixes #13108.

Test Plan: Build on Windows

Reviewers: austin, erikd, bgamari, simonmar, Phyx

Reviewed By: bgamari, Phyx

Subscribers: awson, thomie, #ghc_windows_task_force

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

GHC Trac Issues: #13108

2 years agoProperly introduce CTimer to System.Posix.Types
Ryan Scott [Sun, 15 Jan 2017 16:53:34 +0000 (11:53 -0500)] 
Properly introduce CTimer to System.Posix.Types

Summary:
In ffc2327070dbb664bdb407a804121eacb2a7c734, an attempt was made at
adding a Haskell wrapper around the C `timer_t` type. Unfortunately, GHC's
autoconf macros weren't sophisticated enough at the time to properly detect
that `timer_t` is represented by a `void *` (i.e., a pointer) on most OSes.

This is a second attempt at `CTimer`, this time using `AC_COMPILE_IFELSE` to
detect if a type is a pointer type by compiling the following program:

```
type val;
*val;
```

This also only derives a small subset of class instances for `CTimer` that are
known to be compatible with `Ptr` using a new `OPAQUE_TYPE_WITH_CTYPE` macro.

Test Plan: ./validate

Reviewers: erikd, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #12795, #12998

2 years agoFix abort and import lib search on Windows
Tamar Christina [Sun, 15 Jan 2017 13:07:36 +0000 (13:07 +0000)] 
Fix abort and import lib search on Windows

Summary:
Apparently `sysErrorBelch` doesn't terminate the program anymore making
previously unreachable code now execute. If a dll is not found the error
message we return needs to be a heap value.

Secondly also allow the pattern `lib<name>` to be allowed for finding an
import library with the name `lib<name>.dll.a`.

Test Plan: ./validate, new tests T13082_good and T13082_fail

Reviewers: austin, RyanGlScott, hvr, erikd, simonmar, bgamari

Reviewed By: RyanGlScott, bgamari

Subscribers: thomie, #ghc_windows_task_force

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

GHC Trac Issues: #13082

2 years agoUse latin1 code page on Windows for response files.
Tamar Christina [Sun, 15 Jan 2017 12:52:14 +0000 (12:52 +0000)] 
Use latin1 code page on Windows for response files.

Summary:
D2917 added a change that will make paths on Windows response files
use DOS 8.3 shortnames to get around the fact that `libiberty` assumes
a one byte per character encoding.

This is actually not the problem, the actual problem is that GCC on
Windows doesn't seem to support Unicode at all.

This comes down to how unicode characters are handled between POSIX and
Windows. On Windows, Unicode is only supported using a multibyte character
encoding such as `wchar_t` with calls to the appropriate wide version of
APIs (name post-fixed with the `W` character). On Posix I believe the standard
`char` is used and based on the value it is decoded to the correct string.

GCC doesn't seem to make calls to the Wide version of the Windows APIs,
and even if it did, it's character representation would be wrong. So I
believe GCC just does not support utf-8 paths on Windows.

So the hack in D2917 is the only way to get Unicode support. The problem is
however that `GCC` is not the only tool with this issue and we don't use response
files for every invocation of the tools. Most of the tools probably don't support it.

Furthermore, DOS 8.1 shortnames only exist when the path or file physically exists on
disk. We pass lots of paths to GCC that don't exist yet, like the output file.
D2917 works around this by splitting the path from the file and try shortening that.

But this may not always work.

In short, even if we do Unicode correctly (which we don't atm, the GCC driver we build
uses `char` instead of `wchar_t`) we won't be able to compile using unicode paths that
need to be passed to `GCC`. So not sure about the point of D2917.

What we can do is support the most common non-ascii characters by writing the response
files out using the `latin1` code page.

Test Plan: compile + make test TEST=T12971

Reviewers: austin, bgamari, erikd

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

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

GHC Trac Issues: #12971

2 years agoDesugar static forms to makeStatic calls.
Facundo Domínguez [Mon, 9 Jan 2017 17:29:32 +0000 (14:29 -0300)] 
Desugar static forms to makeStatic calls.

Summary:
Using makeStatic instead of applications of the StaticPtr data
constructor makes possible linting core when unboxing strict
fields.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari, hvr

Reviewed By: simonpj

Subscribers: RyanGlScott, mboes, thomie

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

GHC Trac Issues: #12622

2 years agoRequire python3 like everywhere else too
Gabor Greif [Fri, 13 Jan 2017 15:37:28 +0000 (16:37 +0100)] 
Require python3 like everywhere else too

2 years agoSimplify CPP logic as we now need v7.10 for bootstrapping
Gabor Greif [Thu, 12 Jan 2017 16:44:38 +0000 (17:44 +0100)] 
Simplify CPP logic as we now need v7.10 for bootstrapping

2 years agoSpelling fixes in non-exported data type
Gabor Greif [Thu, 12 Jan 2017 16:42:30 +0000 (17:42 +0100)] 
Spelling fixes in non-exported data type

2 years agoTypos in comments
Gabor Greif [Thu, 12 Jan 2017 14:10:48 +0000 (15:10 +0100)] 
Typos in comments

2 years agoRecord evaluated-ness on workers and wrappers
Simon Peyton Jones [Fri, 13 Jan 2017 08:56:53 +0000 (08:56 +0000)] 
Record evaluated-ness on workers and wrappers

In Trac #13027, comment:20, I noticed that wrappers created after
demand analysis weren't recording the evaluated-ness of strict
constructor arguments.  In the ticket that led to a (debatable)
Lint error but in general the more we know about evaluated-ness
the better we can optimise.

This commit adds that info both in the worker (on args) and in
the wrapper (on CPR result patterns).

See Note [Record evaluated-ness in worker/wrapper] in WwLib

On the way I defined Id.setCaseBndrEvald, and used it to shorten
the code in a few other places

2 years agoFix top-level constraint handling (Trac #12921)
Simon Peyton Jones [Thu, 12 Jan 2017 10:59:08 +0000 (10:59 +0000)] 
Fix top-level constraint handling (Trac #12921)

Some out-of-scope errors were not being reported if anyone
throws an un-caught exception in the TcM monad.  That led to

  ghc: panic! (the 'impossible' happened)
initTc: unsolved constraints

I fixed this

* Splitting captureConstraints to use an auxilliary
  tryCaptureConstraints (which never fails)

* Define a new TcSimplify.captureTopConstraints (replacing
  the old TcRnMonad.captureTopConstraints), which reports
  any unsolved out-of-scope constraints before propagating
  the exception

That in turn allowed me to do some tidying up of the static-constraint
machinery, reducing duplication.

Also solves #13106.

2 years agoSmall refactoring in TcErrors
Simon Peyton Jones [Thu, 12 Jan 2017 10:57:25 +0000 (10:57 +0000)] 
Small refactoring in TcErrors

No change in behaviour

2 years agoTypos in manual, comments and tests
Gabor Greif [Wed, 11 Jan 2017 16:52:20 +0000 (17:52 +0100)] 
Typos in manual, comments and tests

2 years agoAdd mkUserGuidePart.cabal to .gitignore
Ryan Scott [Wed, 11 Jan 2017 23:17:25 +0000 (18:17 -0500)] 
Add mkUserGuidePart.cabal to .gitignore

Following fe75d2d4db44cee72d505bba24bd44c1a2a75613.

2 years agoImprove coment in typecheckIfacesForMerging.
Edward Z. Yang [Tue, 10 Jan 2017 22:16:28 +0000 (14:16 -0800)] 
Improve coment in typecheckIfacesForMerging.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoFix handling of closed type families in Backpack.
Edward Z. Yang [Fri, 6 Jan 2017 04:33:02 +0000 (20:33 -0800)] 
Fix handling of closed type families in Backpack.

Summary:
A few related problems:

- CoAxioms, like DFuns, are implicit and never exported,
  so we have to make sure we treat them the same way as
  DFuns: in RnModIface we need to rename references to
  them with rnIfaceImplicit and in mergeSignatures we need
  to NOT check them directly for compatibility (the
  test on the type family will do this check for us.)

- But actually, we weren't checking if the axioms WERE
  consistent.  This is because we were forwarding all
  embedded CoAxiom references in the type family TyThing
  to the merged version, but that reference was what
  checkBootDeclM was using as a comparison point.
  This is similar to a problem we saw with DFuns.

  To fix this, I refactored the handling of implicit entities in TcIface
  for Backpack.  See Note [The implicit TypeEnv] for the gory details.
  Instead of passing the TypeEnv around explicitly, we stuffed it in
  IfLclEnv.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, simonpj, austin

Subscribers: thomie

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

2 years agoRewrite module signature documentation.
Edward Z. Yang [Thu, 5 Jan 2017 04:33:13 +0000 (23:33 -0500)] 
Rewrite module signature documentation.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: none

Reviewers: bgamari, simonpj, austin, goldfire

Subscribers: thomie

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

GHC Trac Issues: #10262

2 years agoRevamp Backpack/hs-boot handling of type class signatures.
Edward Z. Yang [Thu, 5 Jan 2017 21:52:12 +0000 (13:52 -0800)] 
Revamp Backpack/hs-boot handling of type class signatures.

Summary:
A basket of fixes and improvements:

- The permissible things that one can write in a type
  class definition in an hsig file has been reduced
  to encompass the following things:

    - Methods
    - Default method signatures (but NOT implementation)
    - MINIMAL pragma

  It is no longer necessary nor encouraged to specify
  that a method has a default if it is mentioned in
  a MINIMAL pragma; the MINIMAL pragma is assumed to
  provide the base truth as to what methods need to
  be implemented when writing instances of a type
  class.

- Handling of default method signatures in hsig was
  previously buggy, as these identifiers were not exported,
  so we now treat them similarly to DFuns.

- Default methods are merged, where methods with defaults
  override those without.

- MINIMAL pragmas are merged by ORing together pragmas.

- Matching has been relaxed: a method with a default can
  be used to fill a signature which did not declare the
  method as having a default, and a more relaxed MINIMAL
  pragma can be used (we check if the signature pragma
  implies the final implementation pragma, on the way
  fixing a bug with BooleanFormula.implies, see #13073)

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, bgamari, austin

Subscribers: thomie

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

GHC Trac Issues: #13041

2 years agoImprove Backpack support for fixities.
Edward Z. Yang [Thu, 5 Jan 2017 09:09:29 +0000 (01:09 -0800)] 
Improve Backpack support for fixities.

Summary:
Two major bug-fixes:

    - Check that fixities match between hsig and implementation

    - Merge and preserve fixities when merging signatures

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, simonpj, austin

Subscribers: thomie

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

GHC Trac Issues: #13066

2 years agoWarn if you explicitly export an identifier with warning attached.
Edward Z. Yang [Fri, 30 Dec 2016 05:39:27 +0000 (21:39 -0800)] 
Warn if you explicitly export an identifier with warning attached.

Summary:
This won't stop people from attempting to use this identifier
(since it is still always going to be in the export list), but
having an explicit reference to something people shouldn't
use is a smell, so warn about it.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

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

2 years agoAttach warnings to non-PVP compatible uses of signatures.
Edward Z. Yang [Fri, 30 Dec 2016 02:58:22 +0000 (18:58 -0800)] 
Attach warnings to non-PVP compatible uses of signatures.

Summary:
If you use an inherited signature from another package in your own code,
the only valid PVP bound you can specify for this package is an *exact*
version bound.  This is because the signature is used both covariantly
(it provides declarations for import) and contravariantly (it specifies
what is required).  However, this is a bit distressing if you want to
use a PVP-style bound that allows for upgrading a package.  So there is
a dichotomy:

    1. Any signatures that come from packages with exact bounds
    (this includes, in particular, signature packages, who are
    included solely to make declarations available), can be
    used without problem by modules, but

    2. Any signatures that come from packages that are version
    bounded (i.e., any package that also provides modules) must
    NOT be used, because if they were used, they could break
    under a PVP policy that allows relaxations in the needed
    requirements.

To help users avoid situation (2), I've added a warning to all
signature declarations that come solely from (2).  This is not
perfect; you might still end up relying on some type identity
specified by a signature in a version-bounded package, but it
should help catch major errors.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

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

2 years agoSupport for using only partial pieces of included signatures.
Edward Z. Yang [Tue, 27 Dec 2016 02:39:01 +0000 (18:39 -0800)] 
Support for using only partial pieces of included signatures.

Summary:
Generally speaking, it's not possible to "hide" a requirement from a
package you include, because if there is some module relying on that
requirement, well, you can't just wish it out of existence.

However, some packages don't have any modules.  For these, we can
validly thin out requirements; indeed, this is very convenient if
someone has published a large signature package but you only want
some of the definitions.

This patchset tweaks the interpretation of export lists in
signatures: in particular, they no longer need to refer to
entities that are defined locally; they range over both the current
signature as well as any signatures that were inherited from
signature packages (defined by having zero exposed modules.)

In the process of doing this, I cleaned up a number of other
things:

* rnModIface and rnModExports now report errors that occurred
  during renaming and can propagate these to the TcM monad.
  This is important because in the current semantics, you can
  thin out a type which is referenced by a value you keep;
  in this situation, we need to error (to ensure that all
  types in signatures are rooted, so that we can determine
  their identities).

* I ended up introducing a new construct 'dependency signature;
  to bkp files, to make it easier to tell if we were depending
  on a signature package.  It's not difficult for Cabal to
  figure this out (I already have a patch for it.)

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, austin, bgamari

Subscribers: thomie, mpickering

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

GHC Trac Issues: #12994

2 years agoRevert "event manager: Don't worry if attempt to wake dead manager fails"
Ben Gamari [Wed, 11 Jan 2017 04:40:33 +0000 (23:40 -0500)] 
Revert "event manager: Don't worry if attempt to wake dead manager fails"

This broke the OS X build.

This reverts commit 6de7613604216f65fae92d8066a078bf9cd3c088.

2 years agoInline partially-applied wrappers
David Feuer [Tue, 10 Jan 2017 21:33:20 +0000 (16:33 -0500)] 
Inline partially-applied wrappers

Suppose we have

```
data Node a = Node2 !Int a a | Node3 !Int a a a
instance Traversable Node where
  traverse f (Node2 s x y) = Node2 s <$> f x <*> f y
  ...

```

Since `Node2` is partially applied, we wouldn't inline its
wrapper.  The result was that we'd box up the `Int#` to put
the box in the closure passed to `fmap`. We now allow the wrapper
to inline when partially applied, so GHC stores the `Int#`
directly in the closure.

Reviewers: rwbarton, mpickering, simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: mpickering, thomie

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

GHC Trac Issues: #12990

2 years agoFix references in let/app invariant note
David Feuer [Tue, 10 Jan 2017 20:45:40 +0000 (15:45 -0500)] 
Fix references in let/app invariant note

`mkCoreApp` and `mkCoreLet` have moved since the let/app invariant
note was written. Update the note to reflect that change.

[skip ci]

Test Plan: Read

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoMark *FB functions INLINE[0] (Fixes #13001)
Takano Akio [Tue, 10 Jan 2017 19:36:00 +0000 (14:36 -0500)] 
Mark *FB functions INLINE[0] (Fixes #13001)

When fusion rules successfully fire, we are left with calls to
*FB functions. They are higher-order functions, and therefore they
often benefit from inlining. This is particularly important when
then final consumer is a strict fold (foldl', length, etc.), because
not inlining these functions means allocating a function closure
for each element in the list, which often is more costly than what
fusion eliminates.

Nofib shows a slight increase in the binary size:

------------------------------------------------------------------------
       Program           Size    Allocs   Runtime   Elapsed  TotalMem
------------------------------------------------------------------------
   gen_regexps          -0.3%      0.0%     0.000     0.000      0.0%
        puzzle          +0.8%      0.0%     0.089     0.090      0.0%
       reptile          +0.8%     -0.0%     0.008     0.008      0.0%
------------------------------------------------------------------------
           Min          -0.3%     -0.0%     -7.3%     -7.1%      0.0%
           Max          +0.8%     +0.0%     +7.8%     +7.7%     +1.8%
Geometric Mean          +0.0%     -0.0%     +0.2%     +0.2%     +0.0%
------------------------------------------------------------------------

Reviewers: simonpj, austin, hvr, bgamari

Reviewed By: simonpj

Subscribers: simonpj, thomie

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

GHC Trac Issues: #13001

2 years agoDon't use the splitter on Darwin
Demi Obenour [Tue, 10 Jan 2017 19:32:46 +0000 (14:32 -0500)] 
Don't use the splitter on Darwin

Test Plan: GHC CI

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix terminal corruption bug and clean up SDoc interface.
Phil Ruffwind [Tue, 10 Jan 2017 19:31:55 +0000 (14:31 -0500)] 
Fix terminal corruption bug and clean up SDoc interface.

- Fix #13076 by wrapping `printDoc_` so that the terminal color is
  reset even if an exception occurs.

- Add `printSDoc`, `printSDocLn`, and `bufLeftRenderSDoc` to keep `SDoc`
  values abstract (they are wrappers of `printDoc_`, `printDoc`, and
  `bufLeftRender` respectively).

- Remove unused function: `printForAsm`

Test Plan: manual

Reviewers: RyanGlScott, austin, dfeuer, bgamari

Reviewed By: dfeuer, bgamari

Subscribers: dfeuer, mpickering, thomie

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

GHC Trac Issues: #13076

2 years agotestsuite driver: don't append to existing output files
Reid Barton [Tue, 10 Jan 2017 19:29:11 +0000 (14:29 -0500)] 
testsuite driver: don't append to existing output files

If you happen to have a T1234.run.stdout file lying aroud (probably
from before the move to running tests in temporary subdirectories)
it gets symlinked into the T1234.run directory since its name starts
with T1234; and then program output gets appended to the existing
file (through the symlink). We should open the file for writing
instead, to replace the symlink with a new file.

Test Plan: tested locally, + harbormaster

Reviewers: austin, Phyx, bgamari

Reviewed By: Phyx, bgamari

Subscribers: thomie

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

2 years agoExpose purgeObj in ObjLink
Jon Coens [Tue, 10 Jan 2017 19:28:54 +0000 (14:28 -0500)] 
Expose purgeObj in ObjLink

Test Plan: Rebuild GHC under 7.10.2.

Reviewers: niteria, simonmar, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix typo in comment
Steffen Forkmann [Sat, 7 Jan 2017 09:39:09 +0000 (10:39 +0100)] 
Fix typo in comment

2 years agoRemove tyConString
David Feuer [Tue, 10 Jan 2017 18:41:31 +0000 (13:41 -0500)] 
Remove tyConString

`tyConString` has been deprecated since GHC 7.4. It's time for it to go.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13096

2 years agoRemove deprecated InteractiveEval API
David Feuer [Tue, 10 Jan 2017 18:40:51 +0000 (13:40 -0500)] 
Remove deprecated InteractiveEval API

Remove `RunResult(..)`, `runStmt`, and `runStmtWithLocation`.  These
were all deprecated and documented as slated for removal in GHC 7.14,
which I figure means 8.2.

See cf7573b8207bbb17c58612f3345e0b17d74cfb58 for an explanation of why
this change was made.

Reviewers: simonpj, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13095

2 years agoevent manager: Don't worry if attempt to wake dead manager fails
Ben Gamari [Tue, 10 Jan 2017 18:38:50 +0000 (13:38 -0500)] 
event manager: Don't worry if attempt to wake dead manager fails

This fixes #12038, where the TimerManager would attempt to wake up a
manager that was already dead, resulting in setnumcapabilities001
occassionally failing during shutdown with unexpected output on stderr.

I'm frankly still not entirely confident in this solution but perhaps it
will help to get a few more eyes on this.

My hypothesis is that the TimerManager is racing:

  thread                   TimerManager worker
  -------                  --------------------
  requests that thread
  manager shuts down

                           begins to clean up,
                           closing eventfd

  calls wakeManager,
  which tries to write
  to closed eventfd

To prevent this `wakeManager` will need to synchronize with the
TimerManger worker to ensure that the worker doesn't clean up the
`Control` while another thread is trying to send a wakeup. However, this
would add a bit of overhead on every timer interaction, which feels
rather costly for what is really a problem only at shutdown.  Moreover,
it seems that the event manager (e.g.  `GHC.Event.Manager`) is also
afflicted by a similar race.

This patch instead simply tries to catch the write failure after it has
happened and silence it in the case that the fd has vanished. It feels
rather hacky but it seems to work.

Test Plan: Run `setnumcapabilities001` repeatedly

Reviewers: austin, hvr, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

GHC Trac Issues: #12038

2 years agoAdd doc header to Dynamic's re-export of Typeable
Chris Martin [Tue, 10 Jan 2017 18:38:33 +0000 (13:38 -0500)] 
Add doc header to Dynamic's re-export of Typeable

Data.Data and Data.Dynamic both re-export Data.Typeable with the same
comment, though in the Data module the comment is a haddock header, and
in Typeable it is not. I assume the inconsistency was a mistake.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agousers-guide: Produce OpenSearch description
Ben Gamari [Tue, 10 Jan 2017 18:38:15 +0000 (13:38 -0500)] 
users-guide: Produce OpenSearch description

Reviewers: austin, hsyl20

Reviewed By: hsyl20

Subscribers: thomie

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

2 years agoEnable subsections via symbols on iOS
Demi Obenour [Tue, 10 Jan 2017 18:37:47 +0000 (13:37 -0500)] 
Enable subsections via symbols on iOS

Test Plan: GHC CI

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #11040, #13049

2 years agoCheck that type variable does not reference itself in its kind signature
John Leo [Tue, 10 Jan 2017 18:36:17 +0000 (13:36 -0500)] 
Check that type variable does not reference itself in its kind signature

This fixes #11592.

Test Plan: validate

Reviewers: simonpj, austin, bgamari, goldfire

Reviewed By: goldfire

Subscribers: thomie

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

GHC Trac Issues: #11592

2 years agobase: Add Foreign.ForeignPtr.plusForeignPtr.
Shea Levy [Tue, 10 Jan 2017 18:33:58 +0000 (13:33 -0500)] 
base: Add Foreign.ForeignPtr.plusForeignPtr.

Reviewers: simonmar, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, thomie

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

2 years agoThrow an exception on heap overflow
Demi Obenour [Tue, 10 Jan 2017 18:33:31 +0000 (13:33 -0500)] 
Throw an exception on heap overflow

This changes heap overflow to throw a HeapOverflow exception instead of
killing the process.

Test Plan: GHC CI

Reviewers: simonmar, austin, hvr, erikd, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

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

GHC Trac Issues: #1791

2 years agotestsuite: Add performance testcase from #12707
Ben Gamari [Thu, 5 Jan 2017 19:32:57 +0000 (14:32 -0500)] 
testsuite: Add performance testcase from #12707

2 years agoEnsure mkUserGuidePart is compiled with current GHC version
Ben Gamari [Sat, 7 Jan 2017 14:59:56 +0000 (09:59 -0500)] 
Ensure mkUserGuidePart is compiled with current GHC version

2 years ago-dead_strip is now the default on Darwin
Demi Obenour [Thu, 5 Jan 2017 22:06:26 +0000 (17:06 -0500)] 
-dead_strip is now the default on Darwin

This enables subsections-via-symbols (-dead_strip) by default on Darwin.
The Static Reference Table (SRT) needs to be split in order for
-dead_strip to be helpful, so this commit always splits it on Darwin
systems.

Test Plan: GHC CI on Darwin

Reviewers: erikd, austin, bgamari

Reviewed By: erikd, bgamari

Subscribers: erikd, thomie

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

GHC Trac Issues: #11040, #13049

2 years agoProperly detect MinTTY when running GHCi on Windows
Ryan Scott [Thu, 5 Jan 2017 22:03:19 +0000 (17:03 -0500)] 
Properly detect MinTTY when running GHCi on Windows

Before, we detecting the presence of MinTTY on Windows in a very
imprecise way: by checking if the `_` environment variable was set. Not
only is this easy to circumvent, but it also yields false positives on
terminals like ConEmu.

This changes the test to use the `GetFileInformationByHandleEx` function
instead, which provides a far more accurate check for MinTTY's presence.
I've tested this on PowerShell, MSYS2, Cygwin, ConEmu, and Git Bash, and
it does the right thing on each one.

Fixes #12958.

Test Plan: Run GHCi on many different Windows and MinTTY consoles

Reviewers: erikd, Phyx, austin, bgamari

Reviewed By: Phyx, bgamari

Subscribers: thomie, #ghc_windows_task_force

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

GHC Trac Issues: #12958

2 years agoCmmCommonBlockElim: Ignore CmmUnwind nodes
Ben Gamari [Thu, 5 Jan 2017 22:02:00 +0000 (17:02 -0500)] 
CmmCommonBlockElim: Ignore CmmUnwind nodes

We don't want unwind information to affect the code we produce.
Consequently we need to ensure that CBE ignores unwind nodes for the
purposes of equality.

Test Plan: Validate

Reviewers: scpmw, simonmar, austin

Reviewed By: simonmar

Subscribers: thomie

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

2 years agoMake HsIParamTy have a Located HsIPName
Alan Zimmerman [Tue, 10 Jan 2017 15:01:50 +0000 (17:01 +0200)] 
Make HsIParamTy have a Located HsIPName

To simplify API Annotations.

Updates haddock submodule

2 years agoTypos in comments (and in a test)
Gabor Greif [Thu, 5 Jan 2017 10:41:44 +0000 (11:41 +0100)] 
Typos in comments (and in a test)

2 years agoFix zonk_eq_types in TcCanonical
Simon Peyton Jones [Mon, 9 Jan 2017 14:58:02 +0000 (14:58 +0000)] 
Fix zonk_eq_types in TcCanonical

This fixes Trac #13083. An egregious bug.

Merge to the 8.0 branch

2 years agoParse holes as infix operators
Ömer Sinan Ağacan [Sun, 8 Jan 2017 04:52:53 +0000 (07:52 +0300)] 
Parse holes as infix operators

Reported as #13050. Since holes are expressions but not identifiers,
holes were not allowed in infix operator position. This patch introduces
a new production in infix operator parser to allow this.

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj, RyanGlScott, thomie, mpickering

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

GHC Trac Issues: #13050

2 years agoTH: Add Trustworthy language pragma
Erik de Castro Lopo [Sat, 7 Jan 2017 21:34:30 +0000 (08:34 +1100)] 
TH: Add Trustworthy language pragma

Test Plan: validate

Reviewers: goldfire, bgamari, austin, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, simonpj, thomie, goldfire

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

GHC Trac Issues: #12511

2 years agoHave addModFinalizer expose the local type environment.
Facundo Domínguez [Tue, 20 Dec 2016 11:39:10 +0000 (08:39 -0300)] 
Have addModFinalizer expose the local type environment.

Kind inference in ghci was interfered when renaming of type splices
introduced the HsSpliced data constructor. This patch has kind
inference skip over it.

Test Plan: ./validate

Reviewers: simonpj, rrnewton, bgamari, goldfire, austin

Subscribers: thomie, mboes

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

GHC Trac Issues: #12985

2 years agoRevert "Have addModFinalizer expose the local type environment."
Facundo Domínguez [Fri, 6 Jan 2017 18:08:47 +0000 (15:08 -0300)] 
Revert "Have addModFinalizer expose the local type environment."

This reverts commit e5d1ed9c8910839e109da59820ca793642961284.

2 years agoActually add the right file for T13035 stderr
Matthew Pickering [Fri, 6 Jan 2017 17:15:35 +0000 (17:15 +0000)] 
Actually add the right file for T13035 stderr

2 years agoHave addModFinalizer expose the local type environment.
Facundo Domínguez [Mon, 2 Jan 2017 22:42:20 +0000 (19:42 -0300)] 
Have addModFinalizer expose the local type environment.

Summary:
Kind inference in ghci was interfered when renaming of type splices
introduced the HsSpliced data constructor. This patch has kind
inference skip over it.

Test Plan: ./validate

Reviewers: simonpj, rrnewton, austin, goldfire, bgamari

Reviewed By: goldfire, bgamari

Subscribers: thomie, mboes

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

GHC Trac Issues: #12985

2 years agoAdd missing stderr file for T13035
Matthew Pickering [Fri, 6 Jan 2017 17:14:30 +0000 (17:14 +0000)] 
Add missing stderr file for T13035

2 years agoMore fixes for #5654
Simon Marlow [Tue, 20 Dec 2016 14:32:11 +0000 (14:32 +0000)] 
More fixes for #5654

* In stg_ap_0_fast, if we're evaluating a thunk, the thunk might
  evaluate to a function in which case we may have to adjust its CCS.

* The interpreter has its own implementation of stg_ap_0_fast, so we
  have to do the same shenanigans with creating empty PAPs and copying
  PAPs there.

* GHCi creates Cost Centres as children of CCS_MAIN, which enterFunCCS()
  wrongly assumed to imply that they were CAFs.  Now we use the is_caf
  flag for this, which we have to correctly initialise when we create a
  Cost Centre in GHCi.

2 years agoAdd performance test for #13056
Ryan Scott [Wed, 4 Jan 2017 18:57:25 +0000 (13:57 -0500)] 
Add performance test for #13056

This performance regression was fixed by commit
517d03e41b4f5c144d1ad684539340421be2be2a (#12234). Let's add a performance test
to ensure that it doesn't break again.

2 years agoFix the implementation of the "push rules"
Simon Peyton Jones [Fri, 6 Jan 2017 09:35:37 +0000 (09:35 +0000)] 
Fix the implementation of the "push rules"

Richard pointed out (comment:12 of Trac #13025) that my
implementation of the coercion "push rules", newly added
in exprIsConAppMaybe by commit b4c3a66, wasn't quite right.

But in fact that means that the implementation of those same
rules in Simplify.simplCast was wrong too.

Hence this commit:

* Refactor the push rules so they are implemented in just
  one place (CoreSubst.pushCoArgs, pushCoTyArg, pushCoValArg)
  The code in Simplify gets simpler, which is nice.

* Fix the bug that Richard pointed out (to do with hetero-kinded
  coercions)

Then compiler performance worsened, which led mt do discover
two performance bugs:

* The smart constructor Coercion.mkNthCo didn't have a case
  for ForAllCos, which meant we stupidly build a complicated
  coercion where a simple one would do

* In OptCoercion there was one place where we used CoherenceCo
  (the data constructor) rather than mkCoherenceCo (the smart
  constructor), which meant that the the stupid complicated
  coercion wasn't optimised away

For reasons I don't fully understand, T5321Fun did 2% less compiler
allocation after all this, which is good.

2 years agoAvoid exponential blowup in FamInstEnv.normaliseType
Simon Peyton Jones [Thu, 5 Jan 2017 17:40:49 +0000 (17:40 +0000)] 
Avoid exponential blowup in FamInstEnv.normaliseType

Trac #13035 showed up a nasty case where we took exponentially
long to normalise a (actually rather simple) type.  Fortunately
it was easy to fix: see Note [Normalisation and type synonyms].

2 years agoUse the right in-scope set
Simon Peyton Jones [Thu, 5 Jan 2017 17:39:08 +0000 (17:39 +0000)] 
Use the right in-scope set

I tripped over these calls to substTyWith that didn't obey the
precondition about in-scope variables.  Easily fixed, happily.

2 years agoCoerce for fmapDefault and foldMapDefault
David Feuer [Thu, 5 Jan 2017 21:25:37 +0000 (16:25 -0500)] 
Coerce for fmapDefault and foldMapDefault

Define `fmapDefault = coerce traverse` and `foldMapDefault = coerce
traverse`.  This ensures that we won't get unnecessary allocation and
indirection when the arguments don't inline.

Fixes #13058

Reviewers: ekmett, RyanGlScott, austin, hvr, bgamari

Reviewed By: RyanGlScott

Subscribers: simonpj, RyanGlScott, thomie

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

GHC Trac Issues: #13058

2 years agoFix doctests in Data.Functor
Oleg Grenrus [Thu, 5 Jan 2017 21:25:29 +0000 (16:25 -0500)] 
Fix doctests in Data.Functor

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #11551

2 years agoRemove single top-level section in Foldable docs
Chris Martin [Thu, 5 Jan 2017 21:25:17 +0000 (16:25 -0500)] 
Remove single top-level section in Foldable docs

This fixes a mild annoyance in the haddock output for Data.Foldable.
The section outline had a single top-level heading, which doesn't serve
any purpose as far as I can tell.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoUse atomic counter for GHC.Event.Unique
alexbiehl [Tue, 3 Jan 2017 15:59:39 +0000 (10:59 -0500)] 
Use atomic counter for GHC.Event.Unique

Reviewers: hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, thomie

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

2 years agoAdd a CSE pass to Stg (#9291)
Joachim Breitner [Thu, 15 Dec 2016 18:57:43 +0000 (10:57 -0800)] 
Add a CSE pass to Stg (#9291)

This CSE pass only targets data constructor applications. This is
probably the best we can do, as function calls and primitive operations
might have side-effects.

Introduces the flag -fstg-cse, enabled by default with -O for now. It
might also be a good candiate for -O2.

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

2 years agoEnsure nested binders have Internal Names
Simon Peyton Jones [Wed, 4 Jan 2017 17:47:13 +0000 (17:47 +0000)] 
Ensure nested binders have Internal Names

This is a long-standing bug.  A nested (non-top-level) binder
in Core should not have an External Name, like M.x. But

- Lint was not checking this invariant

- The desugarer could generate programs that failed the
  invariant.  An example is in
  tests/deSugar/should_compile/T13043, which had
     let !_ = M.scState in ...
  This desugared to
     let ds = case M.scSate of M.scState { DEFAULT -> () }
     in case ds of () -> ...

  We were wrongly re-using that scrutinee as a case binder.
  And Trac #13043 showed that could ultimately lead to two
  top-level bindings with the same closure name.  Alas!

- The desugarer had one other place (in DsUtils.mkCoreAppDs)
  that could generate bogus code

This patch fixes all three bugs, and adds a regression test.

2 years agoMinor refactoring in CSE
Simon Peyton Jones [Wed, 4 Jan 2017 13:14:30 +0000 (13:14 +0000)] 
Minor refactoring in CSE

I noticed that CSE.addBinding was always returning one of its own
inputs, so I refactored to avoid doing so.

No change in behaviour.

2 years agoRemove a redundant test
Simon Peyton Jones [Wed, 4 Jan 2017 13:09:54 +0000 (13:09 +0000)] 
Remove a redundant test

postInlineUnconditionally was testing for isExportedId, but it was
/also/ testing for top-level-ness, which is redundant.  This patch
just removes the redundant test, and documents it.

2 years agoTypofixes in manual and comments [ci skip]
Gabor Greif [Wed, 4 Jan 2017 17:37:23 +0000 (18:37 +0100)] 
Typofixes in manual and comments [ci skip]

2 years agoTypo in manual [ci skip]
Gabor Greif [Tue, 3 Jan 2017 16:45:19 +0000 (17:45 +0100)] 
Typo in manual [ci skip]

2 years agoDon't use $ in the definition of (<**>) in GHC.Base
Matthew Pickering [Tue, 3 Jan 2017 05:22:03 +0000 (00:22 -0500)] 
Don't use $ in the definition of (<**>) in GHC.Base

($) is special as Richard explains in the note at the top of the page.

However, when adding the note he didn't remove this usage. Normally it
didn't cause any problems as the optimiser optimised it away. However if
one had the propensity to stick one's fingers into the depths of the
inliner, it caused horrible idInfo panics.

Reviewers: rwbarton, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13055

2 years agoAdd specialization rules for realToFrac on Complex
Takano Akio [Tue, 3 Jan 2017 05:20:24 +0000 (00:20 -0500)] 
Add specialization rules for realToFrac on Complex

This patch implements RULES that specialize realToFrac at these 2 types:

`(Real a) => a -> Complex Double`
`(Real a) => a -> Complex Float`

Test Plan: ./validate

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13040

2 years agoRefactor importdecls/topdecls parsing.
Edward Z. Yang [Mon, 2 Jan 2017 22:03:42 +0000 (17:03 -0500)] 
Refactor importdecls/topdecls parsing.

Previously, we had the following parser:

    xs : xs ';' x
       | xs ';'
       | x

This is a very clever construction that handles duplicate,
leading and trailing semicolons well, but it didn't work very
well with annotations, where we wanted to attach the annotation
for a semicolon to the *previous* x in the list.  This lead
to some very disgusting code in the parser.

This commit refactors the parser into this form:

    semis1 : semis1 ';'
           | ';'
    xs_semi : xs x semis1
            | {- empty -}
    xs : xs_semi x

Now, when we parse one or more semicolons after an x, we can
attach them immediately, eliminating some very grotty annotations
swizzling that was previously in the parser.

We now need to write the top-level parser for imports and then
declarations in a slightly special way now:

    top : semis top1
    top1 : importdecls_semi topdecls_semi
         | importdecls_semi topdecls
         | importdecls

This is because the *_semi parsers always require a semicolon,
but we're allowed to omit that last newline.  So we need
special cases to handle each of the possible cases where we
may run out of semicolons. I don't know if there is a better
way to structure this, but it is not much more complicated
than what we had before for top (and asymptotically better!)

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonmar, austin, alanz, bgamari

Reviewed By: alanz, bgamari

Subscribers: thomie, mpickering

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

2 years agoDon't suggest enabling TypeApplications when it's already enabled
Maciej Bielecki [Mon, 2 Jan 2017 22:03:00 +0000 (17:03 -0500)] 
Don't suggest enabling TypeApplications when it's already enabled

Previously when encountering EAsPat in an expression context,
TypeApplications was suggested even when already enabled. This patch
replaces the suggestion with more appropriate message.

Test Plan: validate

Reviewers: austin, bgamari, mpickering, goldfire, simonpj

Reviewed By: mpickering, goldfire, simonpj

Subscribers: simonpj, goldfire, mpickering, thomie

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

GHC Trac Issues: #12879

2 years agoUpdate .mailmap
Matthew Pickering [Mon, 2 Jan 2017 22:14:59 +0000 (22:14 +0000)] 
Update .mailmap

2 years agoDisallow users to write instances of KnownNat and KnownSym
sjorn3 [Mon, 2 Jan 2017 21:57:04 +0000 (21:57 +0000)] 
Disallow users to write instances of KnownNat and KnownSym

As noted in #12837, these classes are special and the user should
not be able to define their own instances.

Test Plan: Validate

Reviewers: adamgundry, goldfire, mpickering, austin, bgamari

Reviewed By: goldfire, mpickering

Subscribers: goldfire, mpickering, thomie

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

GHC Trac Issues: #12837

2 years agoRemove documentation about non-existent flag.
Edward Z. Yang [Mon, 2 Jan 2017 04:26:01 +0000 (20:26 -0800)] 
Remove documentation about non-existent flag.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoFix incorrect statement about plugin packages.
Edward Z. Yang [Sun, 1 Jan 2017 17:41:45 +0000 (09:41 -0800)] 
Fix incorrect statement about plugin packages.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoFix various issues with testsuite code on Windows
Tamar Christina [Wed, 28 Dec 2016 10:04:28 +0000 (10:04 +0000)] 
Fix various issues with testsuite code on Windows

Summary:
Previously we would make direct calls to `diff` using `os.system`.
On Windows `os.system` is implemented using the standard
idiom `CreateProcess .. WaitForSingleObject ..`.

This again runs afoul with the `_exec` behaviour on Windows. So we ran
into some trouble where sometimes `diff` would return before it's done.

On tests which run multiple ways, such as `8086` what happens is that
we think the diff is done and continue. The next way tries to set things
up again by removing any previous directory. This would then fail with
and error saying the directory can't be removed. Which is true, because
the previous diff code/child is still running.

We shouldn't make any external calls to anything using `os.system`.
Instead just use `runCmd` which uses `timeout`. This also ensures that if
we hit the cygwin bug where diff or any other utility hangs, we kill it and
continue and not hang the entire test and leave hanging processes.

Further more we also:
Ignore error lines from `removeFile` from tools in the testsuite. This is a rather large
hammer to work around the fact that `hsc2hs` often tries to remove it's own file too early.
When this is patched the workaround can be removed. See Trac #9775

We mark `prog003` as skip. Since this test randomly fails and passes. For stability it's disabled
but it is a genuine bug which we should find. It's something with interface files being
overwritten. See Trac #11317

when `rmtree` hits a readonly file, the `onerror` handler is raised afterwards but not
during the tree walk. It doesn't allow you to recover and continue as we thought.
Instead you have to explicitly start again. This is why sometimes even though we
call `cleanup` before `os.mkdirs`, it would sometimes fail with an error that the
folder already exists. So we now do a second walk.

A new verbosity level (4) will strip the silent flags from `MAKE` invocations so you can actually
see what's going on.

Test Plan: ./validate on build bots.

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: mpickering, thomie, #ghc_windows_task_force

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

GHC Trac Issues: #12661, #11317, #9775

2 years agoBump array submodule
Ben Gamari [Mon, 26 Dec 2016 18:14:38 +0000 (13:14 -0500)] 
Bump array submodule

Fixes overflow check from fix to #229.

2 years agoTestsuite: Skip failing tests on PowerPC 64-bit
Peter Trommler [Mon, 26 Dec 2016 15:04:54 +0000 (10:04 -0500)] 
Testsuite: Skip failing tests on PowerPC 64-bit

The Power ISA says the result of a division by zero is undefined.  So
ignore stdout on PowerPC 64-bit systems.

Disable ext-interp tests on 64-bit PowerPC.  We don't have support for
PowerPC 64-bit ELF in the RTS linker, which is needed for the external
interpreter.

Test Plan: ./validate

Reviewers: austin, simonmar, hvr, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agotestsuite: Fix T13025
Ben Gamari [Tue, 27 Dec 2016 17:08:24 +0000 (12:08 -0500)] 
testsuite: Fix T13025

It relied on `wc`, which produces slightly different format on OS X and Linux.
Instead use `grep -c` which appears to be supported on both platforms and
produces consistent output.

2 years agoExpand I/O CP in comments
Joachim Breitner [Tue, 27 Dec 2016 08:41:19 +0000 (09:41 +0100)] 
Expand I/O CP in comments

as suggested by @gracjan at
https://github.com/ghc/ghc/commit/efc4a1661f0fc1004a4b7b0914f3d3a08c2e791a#commitcomment-20284337

2 years agoCallArity: Use exprIsCheap to detect thunks
Joachim Breitner [Mon, 26 Dec 2016 09:16:55 +0000 (10:16 +0100)] 
CallArity: Use exprIsCheap to detect thunks

Originally, everything that is not in WHNF (`exprIsWHNF`) is considered
a thunk, not eta-expanded, to avoid losing any sharing. This is also how
the published papers on Call Arity describe it.

In practice, there are thunks that do a just little work, such as
pattern-matching on a variable, and the benefits of eta-expansion likely
oughtweigh the cost of doing that repeatedly. Therefore, this
implementation of Call Arity considers everything that is not cheap
(`exprIsCheap`) as a thunk.

Nofib reports -2.58% allocations for scs and -40.93% allocation for
wheel-sieve1; the latter has - 2.92% runtime.

2 years agoRemove redudant import from check-ppr
Matthew Pickering [Mon, 26 Dec 2016 16:26:49 +0000 (16:26 +0000)] 
Remove redudant import from check-ppr

2 years agocheck-ppr: Make --dump the default behavior
Ben Gamari [Mon, 26 Dec 2016 15:02:43 +0000 (10:02 -0500)] 
check-ppr: Make --dump the default behavior

2 years agorename: Add note describing #11216
Ben Gamari [Fri, 23 Dec 2016 23:09:40 +0000 (18:09 -0500)] 
rename: Add note describing #11216

2 years agoDefine MAP_ANONYMOUS on systems that only provide MAP_ANON
Gracjan Polak [Fri, 23 Dec 2016 19:37:08 +0000 (14:37 -0500)] 
Define MAP_ANONYMOUS on systems that only provide MAP_ANON

Reviewers: simonmar, erikd, austin, bgamari

Reviewed By: bgamari

Subscribers: gracjan, rwbarton, thomie

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

GHC Trac Issues: #13005

2 years agobase: Override Foldable.{toList,length} for NonEmpty
Artyom [Fri, 23 Dec 2016 19:36:55 +0000 (14:36 -0500)] 
base: Override Foldable.{toList,length} for NonEmpty

Previously the Foldable instance for NonEmpty used default
implementations for toList and length.

I assume that the existing implementations
(i.e. Data.List.NonEmpty.{toList,length}) are better than
the default ones, and frankly can't see a good reason why they
might be worse – but if they are, instead of this commit
we'd have to switch Data.List.NonEmpty.{toList,length}
to use Foldable.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: int-index, thomie

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

2 years agoFix test for T12877
Sylvain Henry [Fri, 23 Dec 2016 19:36:10 +0000 (14:36 -0500)] 
Fix test for T12877

Summary: See https://phabricator.haskell.org/rGHCd3b546b1a605

Reviewers: nomeata, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoUse python3 for linters
Matthew Pickering [Fri, 23 Dec 2016 19:35:55 +0000 (14:35 -0500)] 
Use python3 for linters

We now require python3 for the testsuite so rather than require two
versions of python it makes sense to use python3 for the linters as
well.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd caret diagnostics
Phil Ruffwind [Thu, 22 Dec 2016 22:06:51 +0000 (17:06 -0500)] 
Add caret diagnostics

This is controlled by -f[no-]diagnostics-show-caret.

Example of what it looks like:
```
    |
 42 |     x = 1 + ()
    |         ^^^^^^
```
This is appended to each diagnostic message.

Test Plan:
testsuite/tests/warnings/should_fail/CaretDiagnostics1
testsuite/tests/warnings/should_fail/CaretDiagnostics2

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: joehillen, mpickering, Phyx, simonpj, alanz, thomie

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

GHC Trac Issues: #8809