ghc.git
2 years agoCmmLayoutStack: Add unwind information on stack fixups
Ben Gamari [Wed, 8 Feb 2017 03:51:50 +0000 (22:51 -0500)] 
CmmLayoutStack: Add unwind information on stack fixups

Currently stack fixup blocks don't include unwinding information,
leaving a small window where our unwinding information is incorrect. Fix
this by adding unwinding information to emitted fixup blocks.

Reviewers: scpmw, simonmar, austin

Reviewed By: simonmar

Subscribers: thomie

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

2 years agoGeneralize CmmUnwind and pass unwind information through NCG
Ben Gamari [Wed, 8 Feb 2017 03:49:06 +0000 (22:49 -0500)] 
Generalize CmmUnwind and pass unwind information through NCG

As discussed in D1532, Trac Trac #11337, and Trac Trac #11338, the stack
unwinding information produced by GHC is currently quite approximate.
Essentially we assume that register values do not change at all within a
basic block. While this is somewhat true in normal Haskell code, blocks
containing foreign calls often break this assumption. This results in
unreliable call stacks, especially in the code containing foreign calls.
This is worse than it sounds as unreliable unwinding information can at
times result in segmentation faults.

This patch set attempts to improve this situation by tracking unwinding
information with finer granularity. By dispensing with the assumption of
one unwinding table per block, we allow the compiler to accurately
represent the areas surrounding foreign calls.

Towards this end we generalize the representation of unwind information
in the backend in three ways,

 * Multiple CmmUnwind nodes can occur per block

 * CmmUnwind nodes can now carry unwind information for multiple
   registers (while not strictly necessary; this makes emitting
   unwinding information a bit more convenient in the compiler)

 * The NCG backend is given an opportunity to modify the unwinding
   records since it may need to make adjustments due to, for instance,
   native calling convention requirements for foreign calls (see
   #11353).

This sets the stage for resolving #11337 and #11338.

Test Plan: Validate

Reviewers: scpmw, simonmar, austin, erikd

Subscribers: qnikst, thomie

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

2 years agoImprove -dsuppress-coercions
Simon Peyton Jones [Wed, 8 Feb 2017 11:31:32 +0000 (11:31 +0000)] 
Improve -dsuppress-coercions

The -dsuppress-coercions flag was being ignored when printing the
CastIt constructor in SimplUtils.SimplCont.  This fixes ths problem,
and improves what is printed when suppressing coercions, to show the
size of the suppressed coercion.

2 years agoImprove the simple optimiser
Simon Peyton Jones [Tue, 7 Feb 2017 00:32:43 +0000 (00:32 +0000)] 
Improve the simple optimiser

The previous version of the simple optimiser would leave
beta-redexes, which was bad for join points.  E.g.

  join j x = ....   -- a join point
  in (\x. j x) y

This would be ok if we beta-reduced the (\x) but not if
we don't.

This patch improves the simple optimiser, to follow the plan
described in "Secrets of the GHC inliner", and implemented in
the Mighty Simplifier.  It turns out not to be too hard to
use the same plan here, and we get slightly better code as
a result.

2 years agoMore typos in comments [skip ci]
Gabor Greif [Tue, 7 Feb 2017 10:55:16 +0000 (11:55 +0100)] 
More typos in comments [skip ci]

2 years agoUpdate hoopl submodule
Ben Gamari [Wed, 8 Feb 2017 02:58:46 +0000 (21:58 -0500)] 
Update hoopl submodule

This is in preparation for an upcoming bump of the containers submodule.

2 years agoPass -v0 to ghc-pkg to reduce noise in build ouput
Matthew Pickering [Wed, 8 Feb 2017 02:39:02 +0000 (21:39 -0500)] 
Pass -v0 to ghc-pkg to reduce noise in build ouput

By default ghc-pkg is quite noisy as it can't find interface files.

Test Plan:
Look at the build log stderr and see if there are lots of "cannot find
any of" errors.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, snowleopard

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

2 years agoFix comment (broken link to users_guide) in $(TOP)/
Takenobu Tani [Wed, 8 Feb 2017 02:37:07 +0000 (21:37 -0500)] 
Fix comment (broken link to users_guide) in $(TOP)/

There was a broken link to users_guide at a comment.

* compiler/types/InstEnv.hs
  - type-class-extensions.html -> glasgow_exts.html

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix comment of `section "Exceptions"`
Takenobu Tani [Wed, 8 Feb 2017 02:36:54 +0000 (21:36 -0500)] 
Fix comment of `section "Exceptions"`

I changed comment from `{- .. -}` to `--`.
Because Haddock comment for `section "Exceptions"` [1] was broken.

[1]:
https://downloads.haskell.org/~ghc/latest/docs/html/libraries/ghc-prim-0
.5.0.0/GHC-Prim.html

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix push_bang_into_newtype when the pattern match has no arguments
Matthew Pickering [Wed, 8 Feb 2017 02:35:32 +0000 (21:35 -0500)] 
Fix push_bang_into_newtype when the pattern match has no arguments

Correct behaviour of push_bang_into_newtype when the pattern match has
no arguments. A user can write

```
newtype T = T Int

f :: T -> ()
f !(T {}) = ()
```
in which case we have to push the bang inwards through the newtype in
order to achieve the desired strictness properties. This patch fixes
this special case where the pattern match has no arguments to push the
bang onto. We now make up a wildcard pattern which is wrapped in the
bang pattern.

```
f (T !_) = ()
```

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj, thomie

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

2 years agoUpdate Core formalize for Levity -> RuntimeRep
Ben Gamari [Wed, 8 Feb 2017 02:34:26 +0000 (21:34 -0500)] 
Update Core formalize for Levity -> RuntimeRep

Reviewers: austin

Subscribers: thomie

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

2 years agocpeApp: Make Int accumulator strict
Ben Gamari [Wed, 8 Feb 2017 02:33:16 +0000 (21:33 -0500)] 
cpeApp: Make Int accumulator strict

Test Plan: Validate

Reviewers: austin, dfeuer

Subscribers: dfeuer, thomie

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

2 years agotestsuite: Bump bytes allocated for T5837
Ben Gamari [Wed, 8 Feb 2017 02:30:15 +0000 (21:30 -0500)] 
testsuite: Bump bytes allocated for T5837

Simon decreased this earlier today but Harbormaster doesn't reproduce his
number. I've done two things here:

 1. increased the allocations number to the Harbormaster value
 2. increased the acceptance threshold from 5% to 7%, since Simon saw a 6.6%
    change in his environment.

2 years agotestsuite: Bump max_bytes_used for T4029
Ben Gamari [Wed, 8 Feb 2017 02:26:49 +0000 (21:26 -0500)] 
testsuite: Bump max_bytes_used for T4029

Unfortunately it's not clear what regressed this.

2 years agoClean up findPartiallyCompletedCycles
David Feuer [Wed, 8 Feb 2017 02:38:34 +0000 (21:38 -0500)] 
Clean up findPartiallyCompletedCycles

Rewrite `findPartiallyCompletedCycles` to use a list comprehension
rather than pattern matching on a list. Make it use `Data.Set`
rather than fussing with lists.

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoUse better map operations in CoreMonad
David Feuer [Wed, 8 Feb 2017 02:34:00 +0000 (21:34 -0500)] 
Use better map operations in CoreMonad

Use strict `unionWith` where apparently appropriate, and use
strict `insertWith` rather than lookup followed by insertion.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd Wredundant-constraints to list of flags excluded from -Wall
Siddhanathan Shanmugam [Tue, 7 Feb 2017 16:12:05 +0000 (08:12 -0800)] 
Add Wredundant-constraints to list of flags excluded from -Wall

In light of #10635

2 years agoDocs: Fix typo in glasgow_exts.rst
Daniel Gröber [Tue, 7 Feb 2017 16:07:10 +0000 (17:07 +0100)] 
Docs: Fix typo in glasgow_exts.rst

2 years agoAnother improvement to SetLevels
Simon Peyton Jones [Fri, 23 Dec 2016 14:17:42 +0000 (14:17 +0000)] 
Another improvement to SetLevels

In my recent commit
   commit 432f952ef64641be9f32152a0fbf2b8496d8fe9c
   Float unboxed expressions by boxing
I changed how float_me in lvlMFE worked.  That was right, but
it exposed another bug: an error expression wasn't getting floated
as it should from a case alternative.  And that led to a collection
of minor improvements

* I found a much better way to cast it, by using lvlFloatRhs for
  top-level bindinds as well as nested ones, which is
    (a) more consistent and
    (b) works correctly.

  See Note [Floating from a RHS]

* I also found some delicacy in the "floating to the top" stuff, so I
  greatly elaborated the Note [Floating to the top].

* I simplified the "bottoming-float" stuff; the change is in the treatment
  of bottoming lambdas (\x y. error blah), where we now float the
  (error blah) part instead of the whole lambda (which risks just making
  duplicate lambdas.  See Note [Bottoming floats], esp (2).

Perf effects are minor.

* perf/compiler/T13056 improved sligtly (about 2%) in compiler
  allocations. Also T9233 improved by 1%.  I'm not sure why.

* Some small nofib changes:
    - Generally some very small reductions in run-time
      allocation, except k-nucleotide, which halves for some
      reason.  (I did try to look but it's a big complicated
      function and it was far from obvious.  Had it been a loss
      I would have looked harder!

NB: there's a nearby patch "Do not inline bottoming things" that could
also be responsible for either or both.  I didn't think it was worth
more testing to distinguish.

--------------------------------------------------------------------------------
        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
           grep          +0.1%     -0.2%      0.00      0.00     +0.0%
         mandel          -0.1%     -1.4%      0.13      0.13     +0.0%
   k-nucleotide          +0.1%    -51.6%     -1.0%     -1.0%     +0.0%
--------------------------------------------------------------------------------
            Min          -0.3%    -51.6%     -9.4%     -9.1%     -4.0%
            Max          +0.2%     +0.0%    +31.8%    +32.7%     +0.0%
 Geometric Mean          -0.0%     -0.8%     +1.4%     +1.4%     -0.1%

2 years agoComments only
Simon Peyton Jones [Fri, 20 Jan 2017 15:12:17 +0000 (15:12 +0000)] 
Comments only

2 years agoDo not inline bottoming things
Simon Peyton Jones [Fri, 20 Jan 2017 15:12:42 +0000 (15:12 +0000)] 
Do not inline bottoming things

If a function seems small, worker/wrapper won't split it; instead
it turns it into an INLINE function.

But if it's a /bottoming/ function that's a bad idea.  We want
don't want to inline bottoming functions unless they are /really/
small (smaller than the call itself) and that's handled by a
different branch in certainlyWillInline.

So this patch adds a not-bottom test to the UnfIfGoodArgs case of
certainlyWillInline.

No big perf effect, but this will tend to keep error code out of
functions, and hence make them a bit more likely to inline.

I fell over this when fiddling with #13144

2 years agoTypos in comments [skip ci]
Gabor Greif [Tue, 7 Feb 2017 09:25:38 +0000 (10:25 +0100)] 
Typos in comments [skip ci]

2 years agoDerive <$
David Feuer [Tue, 7 Feb 2017 05:16:55 +0000 (00:16 -0500)] 
Derive <$

Using the default definition of `<$` for derived `Functor`
instance is very bad for recursive data types. Derive
the definition instead.

Fixes #13218

Reviewers: austin, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, thomie

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

2 years agoRemove unnecessary use of -DGENERICS flag
Ryan Scott [Mon, 6 Feb 2017 19:31:17 +0000 (14:31 -0500)] 
Remove unnecessary use of -DGENERICS flag

This flag was only needed for old versions of binary, and now that we've
upgraded to binary-0.8.4.1, it is no longer necessary.

2 years agoTypos in comments [skip ci]
Gabor Greif [Mon, 6 Feb 2017 16:09:18 +0000 (17:09 +0100)] 
Typos in comments [skip ci]

2 years agoTypos in comments [skip ci]
Gabor Greif [Mon, 6 Feb 2017 11:50:42 +0000 (12:50 +0100)] 
Typos in comments [skip ci]

2 years agoDo Worker/Wrapper for NOINLINE things
Eric Seidel [Mon, 6 Feb 2017 02:29:37 +0000 (21:29 -0500)] 
Do Worker/Wrapper for NOINLINE things

Disabling worker/wrapper for NOINLINE things can cause unnecessary
reboxing of values. Consider

    {-# NOINLINE f #-}
    f :: Int -> a
    f x = error (show x)

    g :: Bool -> Bool -> Int -> Int
    g True  True  p = f p
    g False True  p = p + 1
    g b     False p = g b True p

the strictness analysis will discover f and g are strict, but because f
has no wrapper, the worker for g will rebox p. So we get

    $wg x y p# =
      let p = I# p# in  -- Yikes! Reboxing!
      case x of
        False ->
          case y of
            False -> $wg False True p#
            True -> +# p# 1#
        True ->
          case y of
            False -> $wg True True p#
            True -> case f p of { }

    g x y p = case p of (I# p#) -> $wg x y p#

Now, in this case the reboxing will float into the True branch, an so
the allocation will only happen on the error path. But it won't float
inwards if there are multiple branches that call (f p), so the reboxing
will happen on every call of g. Disaster.

Solution: do worker/wrapper even on NOINLINE things; but move the
NOINLINE pragma to the worker.

Test Plan: make test TEST="13143"

Reviewers: simonpj, bgamari, dfeuer, austin

Reviewed By: simonpj, bgamari

Subscribers: dfeuer, thomie

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

2 years agotestsuite: Update expected values for T13035 and T12234
Ben Gamari [Mon, 6 Feb 2017 02:23:26 +0000 (21:23 -0500)] 
testsuite: Update expected values for T13035 and T12234

2 years agoFixes for OccurAnal bugs (#13221)
Luke Maurer [Mon, 6 Feb 2017 01:32:20 +0000 (20:32 -0500)] 
Fixes for OccurAnal bugs (#13221)

- OccurAnal: When checking tail calls, count rule's LHS args, not bndrs
Pretty obvious error in retrospect:
```
let $sj = \y ys -> ...
    {-# RULES "SC:j" forall y ys. j (y:ys) = $sj y ys #-}
    j = \xs -> ...
    in ...
```
A jump on the RHS of a rule for a join point is only okay if the rule's
LHS is
saturated - in this case, since the LHS is j (y:ys) and j takes one
argument,
both j and $sj can become join points. See Note [Rules and join points]
in
OccurAnal. By mistake, OccAnal was counting the rule's binders (y and
ys) rather
than the args in its LHS, so $sj wasn't being made a join point.

- Don't zap tail calls in unfoldings

This was causing T7796 to squeal about join points not being
rediscovered.

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix broken link of GHC.RTS.Flags
Takenobu Tani [Mon, 6 Feb 2017 01:29:37 +0000 (20:29 -0500)] 
Fix broken link of GHC.RTS.Flags

There ware broken link to GHC User's Guide.

* libraries/base/GHC/RTS/Flags.hsc
 - runtime-control.html -> runtime_control.html

Reviewers: bgamari, austin, hvr

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix comment (old file names '.hc' ) in libraries/
Takenobu Tani [Mon, 6 Feb 2017 01:27:57 +0000 (20:27 -0500)] 
Fix comment (old file names '.hc' ) in libraries/

There ware some old file names (.hc, ...) at comments.

* libraries/base/GHC/IO.hs
  - StgMiscClosures.hc -> StgStartup.cmm
  - Exceptions.hc -> Exception.cmm
  - Schedule.c -> RaiseAsync.c

A comment of `(un)?blockAsyncExceptionszh_fast` in IO.hs may be old.
Since I don't understand it, I have not modified it yet.

Reviewers: mpickering, bgamari, austin, hvr

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoDon't return empty initial uncovered set for an unsat context
Matthew Pickering [Mon, 6 Feb 2017 01:27:41 +0000 (20:27 -0500)] 
Don't return empty initial uncovered set for an unsat context

Previously when the checker encountered an unsatisfiable term of type
context it would return an empty initial uncovered set. This caused all
pattern matches in the context to be reported as redudant.

This is arguably correct behaviour as they will never be reached but it
is better to recover and provide accurate warnings for these cases to
avoid error cascades. It would perhaps be better to report an error to
the user about an inacessible branch but this is certainly better than
many confusing redundant match warnings.

Reviewers: gkaracha, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoDon't replace type family instances with the same LHS in GHCi (#7102)
Reid Barton [Mon, 6 Feb 2017 01:24:06 +0000 (20:24 -0500)] 
Don't replace type family instances with the same LHS in GHCi (#7102)

This fixes the easy part of #7102 by removing the logic that lets the
user replace a type family instance with a new one with the same LHS.
As discussed on that ticket, this is unsound in general. Better to have
the user redefine the type family from scratch.

The example from comment:7 involving loading modules into ghci is not
fixed yet; it actually doesn't rely on the instances having the same LHS.
This commit adds an expect_broken test for that example as well.

Test Plan: T7102a for the fix; T7102 is the test not fixed yet

Reviewers: dfeuer, austin, bgamari, goldfire

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

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

2 years agoUse proper primitives in Utils.Binary
alexbiehl [Mon, 6 Feb 2017 01:23:09 +0000 (20:23 -0500)] 
Use proper primitives in Utils.Binary

`Word{16,32,64}` are implemented using `getWord8`. This patch introduces
`getWord{16,32,64}` and `putWord{16,32,64}`. This is nicer and
probably a bit faster.

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd liftA2 to Applicative class
David Feuer [Mon, 6 Feb 2017 00:43:31 +0000 (19:43 -0500)] 
Add liftA2 to Applicative class

* Make `liftA2` a method of `Applicative`.

* Add explicit `liftA2` definitions to instances in `base`.

* Add explicit invocations in `base`.

Reviewers: ekmett, bgamari, RyanGlScott, austin, hvr

Reviewed By: RyanGlScott

Subscribers: ekmett, RyanGlScott, rwbarton, thomie

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

2 years agoExpose cseExpr from CSE
Joachim Breitner [Fri, 3 Feb 2017 01:28:29 +0000 (20:28 -0500)] 
Expose cseExpr from CSE

for the benefit of GHC API users who want to CSE single expressions.

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

2 years agoNew internal dynamic flag: Very aggressive inlining
Joachim Breitner [Fri, 3 Feb 2017 01:28:07 +0000 (20:28 -0500)] 
New internal dynamic flag: Very aggressive inlining

This flag overrides the inliner heuristics to inline something
independent of cost, size, expected gains or boringness of the context.

It still adheres to arity, simplifier phase control and loop breakers.

This is not exposed via a command line flag and added for the benefit of
GHC API users.

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

2 years agoFix comment (old file names) in mk/ and utils/
Takenobu Tani [Sat, 4 Feb 2017 20:16:10 +0000 (15:16 -0500)] 
Fix comment (old file names) in mk/ and utils/

There ware some old file names (.lhs, ...) at comments.

* mk/config.mk.in
  - compiler/hsSyn/HsExpr.lhs -> HsExpr.hs

* utils/ghc-pkg/Main.hs
  - compiler/main/Packages.lhs -> Packages.hs

* utils/genapply/Main.hs
  - CgRetConv.lhs -> * REMOVE THIS COMMENT (OLDER FILE THAN GHC6) *
  - Constants.lhs -> Constants.hs
  - compiler/codeGen/CgCallConv.lhs -> compiler/codeGen/StgCmmLayout.hs
  - Apply.hc -> Apply.cmm
  - HeapStackCheck.hc -> HeapStackCheck.cmm

Reviewers: mpickering, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoDon't panic when printing match with RecUpd context
Matthew Pickering [Sat, 4 Feb 2017 20:15:06 +0000 (15:15 -0500)] 
Don't panic when printing match with RecUpd context

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #12957

2 years agoImprove wrapTicks performance with lots of redundant source notes
Peter Wortmann [Sat, 4 Feb 2017 20:14:31 +0000 (15:14 -0500)] 
Improve wrapTicks performance with lots of redundant source notes

The old version had O(n^3) performance for n non-overlapping source
notes and let floats each, which is exactly what happens with -g if we
compile a list literal of length n.

The idea here is simply to establish early which source notes will
actually survive (e.g. use a left fold). The new code should be O(n) for
list literals.

Reviewers: austin, dfeuer, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #11095

2 years agoUpdate binary submodule to 0.8.4.1
Ben Gamari [Sat, 4 Feb 2017 20:00:59 +0000 (15:00 -0500)] 
Update binary submodule to 0.8.4.1

2 years agoFix minusNatural exception to be Underflow
Oleg Grenrus [Fri, 3 Feb 2017 11:52:25 +0000 (13:52 +0200)] 
Fix minusNatural exception to be Underflow

2 years agoMake split sections by default work again
Reid Barton [Sat, 4 Feb 2017 10:29:17 +0000 (10:29 +0000)] 
Make split sections by default work again

Commit 266a9dc4c changed = to := in one place in mk/config.mk.in.
This broke SupportsSplitSections because the variable LdIsGNULd
that it depends on is not defined until later in the file.

Test Plan: pushed to a wip/ branch for perf to build

Reviewers: DemiMarie, austin, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, thomie

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

GHC Trac Issues: #13230

2 years agoFix comment (old filename '.lhs') in libraries/
Takenobu Tani [Sat, 4 Feb 2017 10:25:21 +0000 (10:25 +0000)] 
Fix comment (old filename '.lhs') in libraries/

[skip ci]

There are some old file names (*.lhs) at comments.
(I'm fixing to read source code by newcomers.)

* libraries/base/GHC/Base.hs
  - compiler/deSugar/DsListComp.lhs
  - PrelRules.lhs x2
  - Base.lhs

* libraries/base/GHC/IO.hs
  - PrimOp.lhs
  - GHC.IO.lhs
  - GHC.Exception.lhs

* libraries/base/GHC/Real.hs
  - compiler/prelude/PrelRules.lhs

* libraries/ghc-prim/GHC/Magic.hs
  - MkId.lhs x2

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix comment (old file names) in compiler/
Takenobu Tani [Sat, 4 Feb 2017 10:24:55 +0000 (10:24 +0000)] 
Fix comment (old file names) in compiler/

[skip ci]

There ware some old file names (.lhs, ...) at comments.

* compiler/ghc.mk
  - prelude/PrimOp.lhs -> prelude/PrimOp.hs

* compiler/parser/cutils.h
  - PrimPacked.lhs -> compiler/utils/FastString.hs

Reviewers: bgamari, austin

Subscribers: thomie

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

2 years agoFix comment (old file names) in rts/
Takenobu Tani [Sat, 4 Feb 2017 10:24:49 +0000 (10:24 +0000)] 
Fix comment (old file names) in rts/

[skip ci]

There ware some old file names (.lhs, ...) at comments.

* rts/win32/ThrIOManager.c
  - Conc.lhs -> Conc.hs

* rts/PrimOps.cmm
  - ByteCodeLink.lhs -> ByteCodeLink.hs
  - StgMiscClosures.hc -> StgMiscClosures.cmm

* rts/AutoApply.h
  - AutoApply.hc -> AutoApply.cmm

* rts/HeapStackCheck.cmm
  - PrimOps.hc -> PrimOps.cmm

* rts/LdvProfile.h
  - Updates.hc -> Updates.cmm

* rts/Schedule.c
  - StgStartup.hc -> StgStartup.cmm

* rts/Weak.c
  - StgMiscClosures.hc -> StgMiscClosures.cmm

Reviewers: bgamari, austin, erikd, simonmar

Subscribers: thomie

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

2 years agoFix comment (old file names) in includes/
Takenobu Tani [Sat, 4 Feb 2017 10:24:42 +0000 (10:24 +0000)] 
Fix comment (old file names) in includes/

[skip ci]

There ware some old file names (.lhs, ...) at comments.

* includes/rts/Bytecodes.h
  - ghc/compiler/ghci/ByteCodeGen.lhs -> ByteCodeAsm.hs

* includes/rts/Constants.h
  - libraries/base/GHC/Conc.lhs -> libraries/base/GHC/Conc/Sync.hs

* includes/rts/storage/FunTypes.h
  - utils/genapply/GenApply.hs -> utils/genappl/Main.hs
  - compiler/codeGen/CgCallConv.lhs -> compiler/codeGen/StgCmmLayout.hs

* includes/stg/MiscClosures.h
  - compiler/codeGen/CgStackery.lhs -> compiler/codeGen/StgCmmArgRep.hs
  - HeapStackCheck.hc  -> HeapStackCheck.cmm

Reviewers: bgamari, austin, simonmar, erikd

Reviewed By: erikd

Subscribers: thomie

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

2 years agoAttempt to make lazy ST thread safe
David Feuer [Fri, 3 Feb 2017 22:24:17 +0000 (17:24 -0500)] 
Attempt to make lazy ST thread safe

Use `noDuplicate#` to prevent lazy `ST` thunks from
being evaluated in multiple GHC threads.

Some lazy `ST` functions added laziness that did not seem to be useful
(e.g.,
creating lazy pairs that will never be matched unless one of their
components
is demanded). Stripped that out.

Reviewers: ekmett, simonpj, bgamari, simonmar, austin, hvr

Subscribers: rwbarton, thomie

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

GHC Trac Issues: #11760

2 years agoUse tyCoVarsOfType for CTyEqCan in shouldSplitWD
Simon Peyton Jones [Fri, 3 Feb 2017 16:15:56 +0000 (16:15 +0000)] 
Use tyCoVarsOfType for CTyEqCan in shouldSplitWD

An ASSERT failure in rewritableTyVars made me realise
that there was an outright bug in shouldSplitWD.  See
the long Note [Splitting WD constraints].

2 years agoBump performance mark for T9020
Joachim Breitner [Fri, 3 Feb 2017 16:38:16 +0000 (11:38 -0500)] 
Bump performance mark for T9020

according to the graph at perf.haskell.org, it has regressed due to join
points, which moved it very very close to the +10% mark and hence made it
fail just sometimes.

2 years agoGet rid of ProbOneShot
Joachim Breitner [Thu, 2 Feb 2017 17:52:57 +0000 (12:52 -0500)] 
Get rid of ProbOneShot

This fixes #13227. It remains to be seen what the performance impacts
are. Pushing as a branch to get perf.haskell.org answer that for us.

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

2 years agoDitch static flags
Sylvain Henry [Thu, 2 Feb 2017 19:37:24 +0000 (14:37 -0500)] 
Ditch static flags

This patch converts the 4 lasting static flags (read from the command
line and unsafely stored in immutable global variables) into dynamic
flags. Most use cases have been converted into reading them from a DynFlags.

In cases for which we don't have easy access to a DynFlags, we read from
'unsafeGlobalDynFlags' that is set at the beginning of each 'runGhc'.
It's not perfect (not thread-safe) but it is still better as we can
set/unset these 4 flags before each run when using GHC API.

Updates haddock submodule.

Rebased and finished by: bgamari

Test Plan: validate

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

Reviewed By: simonmar

Subscribers: thomie

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

GHC Trac Issues: #8440

2 years agousers-guide: Explain behavior of verbose-core2core + dump-inlinings
Ben Gamari [Fri, 3 Feb 2017 01:17:08 +0000 (20:17 -0500)] 
users-guide: Explain behavior of verbose-core2core + dump-inlinings

2 years agoRemove INLINE pragma on loopbreaker
Matthew Pickering [Thu, 2 Feb 2017 21:00:39 +0000 (21:00 +0000)] 
Remove INLINE pragma on loopbreaker

2 years agoBump haskeline submodule
Ben Gamari [Thu, 2 Feb 2017 19:20:57 +0000 (14:20 -0500)] 
Bump haskeline submodule

2 years agoExhaustiveness check for EmptyCase (Trac #10746)
George Karachalias [Thu, 2 Feb 2017 18:51:33 +0000 (13:51 -0500)] 
Exhaustiveness check for EmptyCase (Trac #10746)

Empty case expressions have strict semantics so the problem boils down
to inhabitation checking for the type of the scrutinee. 3 main functions
added:

- pmTopNormaliseType_maybe for the normalisation of the scrutinee type

- inhabitationCandidates for generating the possible patterns of the
  appropriate type

- checkEmptyCase' to filter out the candidates that give rise to
  unsatisfiable constraints.

See Note [Checking EmptyCase Expressions] in Check
and Note [Type normalisation for EmptyCase] in FamInstEnv

Test Plan: validate

Reviewers: simonpj, goldfire, dfeuer, austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, thomie

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

GHC Trac Issues: #10746

2 years agoAdd a testcase for #13227
Joachim Breitner [Thu, 2 Feb 2017 17:04:43 +0000 (12:04 -0500)] 
Add a testcase for #13227

where an expected float-out is not happening.

2 years agoSpelling fixes
Gabor Greif [Wed, 1 Feb 2017 10:29:47 +0000 (11:29 +0100)] 
Spelling fixes

2 years agoAdd support for StaticPointers in GHCi
Ben Gamari [Thu, 2 Feb 2017 04:39:52 +0000 (23:39 -0500)] 
Add support for StaticPointers in GHCi

Here we add support to GHCi for StaticPointers. This process begins by
adding remote GHCi messages for adding entries to the static pointer
table. We then collect binders needing SPT entries after linking and
send the interpreter a message adding entries with the appropriate
fingerprints.

Test Plan: `make test TEST=StaticPtr`

Reviewers: facundominguez, mboes, simonpj, simonmar, goldfire, austin,
hvr, erikd

Reviewed By: simonpj, simonmar

Subscribers: RyanGlScott, simonpj, thomie

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

GHC Trac Issues: #12356

2 years agoMake interface loading for COMPLETE pragmas lazy
Matthew Pickering [Thu, 2 Feb 2017 03:54:31 +0000 (22:54 -0500)] 
Make interface loading for COMPLETE pragmas lazy

Without this additional laziness we will loop forever trying
to find the definitions of the conlikes referenced in the pragma.

Fixes #13188

Reviewers: austin, RyanGlScott, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13188

2 years agoIntroduce GHC.TypeNats module, change KnownNat evidence to be Natural
Oleg Grenrus [Thu, 2 Feb 2017 03:49:17 +0000 (22:49 -0500)] 
Introduce GHC.TypeNats module, change KnownNat evidence to be Natural

Reviewers: dfeuer, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13181

2 years agoDon't tick top-level string literals
Ben Gamari [Thu, 2 Feb 2017 03:48:32 +0000 (22:48 -0500)] 
Don't tick top-level string literals

This fixes a regression due to D2605 (see #8472) wherein top-level primitive
strings would fail to be noticed by CoreToStg as they were wrapped in a
tick. This resulted in a panic in CoreToStg due to inconsistent CAF information
(or a Core Lint failure, if enabled). Here we document the invariant that
unlifted expressions can only sit at top-level if of the form `Lit (MachStr
...)` with no ticks or other embellishments. Moreover, we fix instance of
this in `Simplify.prepareRhs` and `FloatOut.wrapTick` where this
invariant was being broken.

Test Plan: Validate with `-g`. Run testsuite with `WAY=ghci`.

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: simonpj, akio, scpmw, thomie

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

2 years agobase: Derive Enum, Bounded for VecCount, VecElem
Ben Gamari [Thu, 2 Feb 2017 03:48:01 +0000 (22:48 -0500)] 
base: Derive Enum, Bounded for VecCount, VecElem

Test Plan: Validate

Reviewers: RyanGlScott, austin, hvr

Reviewed By: RyanGlScott

Subscribers: goldfire, RyanGlScott, thomie

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

2 years agoFix documentation NOTE about can_fail
Vladislav Zavialov [Wed, 1 Feb 2017 11:07:36 +0000 (14:07 +0300)] 
Fix documentation NOTE about can_fail

In the note it is explained why it's fine to discard a can_fail primop,
but the table erroneously says it's not fine.

2 years agotestsuite: Update allocations for T12234
Ben Gamari [Wed, 1 Feb 2017 20:45:20 +0000 (15:45 -0500)] 
testsuite: Update allocations for T12234

This has been failing on Darwin since 748b79741652028827b6225c36b8ab55d22bdeb0.

2 years agoJoin points
Luke Maurer [Wed, 1 Feb 2017 16:56:01 +0000 (11:56 -0500)] 
Join points

This major patch implements Join Points, as described in
https://ghc.haskell.org/trac/ghc/wiki/SequentCore.  You have
to read that page, and especially the paper it links to, to
understand what's going on; but it is very cool.

It's Luke Maurer's work, but done in close collaboration with Simon PJ.

This Phab is a squash-merge of wip/join-points branch of
http://github.com/lukemaurer/ghc. There are many, many interdependent
changes.

Reviewers: goldfire, mpickering, bgamari, simonmar, dfeuer, austin

Subscribers: simonpj, dfeuer, mpickering, Mikolaj, thomie

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

2 years agoRemove very broad ignore. [ci skip]
Tamar Christina [Wed, 1 Feb 2017 10:20:03 +0000 (10:20 +0000)] 
Remove very broad ignore. [ci skip]

Summary:
`.gitignore` contains a very broad ignore entry for `foo*`.
This has bitten us before and should probably be removed.

Reviewers: bgamari, austin

Subscribers: simonpj, thomie

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

2 years agoUpdate output of failing 11223 tests
Tamar Christina [Wed, 1 Feb 2017 06:41:48 +0000 (06:41 +0000)] 
Update output of failing 11223 tests

Summary: make accept new test output

Test Plan: make test TEST="T11223_link_order_a_b_2_fail T11223_simple_duplicate_lib"

Reviewers: austin, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

2 years agoTypos in note header and test
Gabor Greif [Tue, 31 Jan 2017 11:41:29 +0000 (12:41 +0100)] 
Typos in note header and test

2 years agoExport callStackDoc
Ben Gamari [Tue, 31 Jan 2017 21:12:30 +0000 (16:12 -0500)] 
Export callStackDoc

It's generally a pretty useful thing to have around.

[skip ci]

Test Plan: Build it

Reviewers: austin, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

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

2 years agouser-guide: fix links and file names (fixes #13198)
Takenobu Tani [Tue, 31 Jan 2017 21:07:48 +0000 (16:07 -0500)] 
user-guide: fix links and file names (fixes #13198)

There are some incorrect links and file names in GHC user's guide.

  * docs/users_guide/glasgow_exts.rst
    - GHC/Base.lhs
    - GHC/List.lhs

  * docs/users_guide/ffi-chap.rst
    - :base-ref:`Foreign`
    - :base-ref:`Control.Concurrent`

I fixed them.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13198

2 years agoAbstract over the way eventlogs are flushed
alexbiehl [Tue, 31 Jan 2017 21:06:33 +0000 (16:06 -0500)] 
Abstract over the way eventlogs are flushed

Currently eventlog data is always written to a file `progname.eventlog`.
This patch introduces the `flushEventLog` field in `RtsConfig` which
allows to customize the writing of eventlog data.

One possible scenario is the ongoing live-profile-monitor effort by
@NCrashed which slurps all eventlog data through `fluchEventLog`.

`flushEventLog` takes a buffer with eventlog data and its size and
returns `false` (0) in case eventlog data could not be procesed.

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: simonmar, bgamari

Subscribers: qnikst, thomie, NCrashed

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

2 years agoFloatOut: Allow floating through breakpoint ticks
Ben Gamari [Tue, 31 Jan 2017 21:05:26 +0000 (16:05 -0500)] 
FloatOut: Allow floating through breakpoint ticks

I believe this is actually a completely valid thing to do, despite the
arguments put forth in #10052. All that was missing was logic in
SetLevels to correctly substitute the cloned binders into the
breakpoint's free variable list.

This is a prerequisite for enabling StaticPointer support in the
interpreter.

Test Plan: Validate

Reviewers: austin, scpmw

Subscribers: thomie

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

2 years agoREADME: Mention acceptability of pull requests
Ben Gamari [Tue, 31 Jan 2017 02:34:18 +0000 (21:34 -0500)] 
README: Mention acceptability of pull requests

2 years agousers guide: Fix markup of COMPLETE pragma examples
Ben Gamari [Tue, 31 Jan 2017 00:21:54 +0000 (19:21 -0500)] 
users guide: Fix markup of COMPLETE pragma examples

2 years agoMark reallyUnsafePtrEquality# as can_fail
David Feuer [Tue, 31 Jan 2017 23:44:14 +0000 (18:44 -0500)] 
Mark reallyUnsafePtrEquality# as can_fail

As described in the note, floating `reallyUnsafePtrEquality#`
out can make it much less precise. Marking it `can_fail` will
prevent it from floating out, which I believe is particularly
important in light of 5a9a1738023aeb742e537fb4a59c4aa8fecc1f8a,
and should also help prevent let/app invariant failures as seen
in #11444 and #13027.

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

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

GHC Trac Issues: #13027, #11444

2 years agoUse top-level instances to solve superclasses where possible
Daniel Haraj [Tue, 31 Jan 2017 22:28:55 +0000 (22:28 +0000)] 
Use top-level instances to solve superclasses where possible

This patch introduces a new flag `-fsolve-constant-dicts` which makes the
constraint solver solve super class constraints with available dictionaries if
possible. The flag is enabled by `-O1`.

The motivation of this patch is that the compiler can produce more efficient
code if the constraint solver used top-level instance declarations to solve
constraints that are currently solved givens and their superclasses. In
particular, as it currently stands, the compiler imposes a performance penalty
on the common use-case where superclasses are bundled together for user
convenience. The performance penalty applies to constraint synonyms as
well. This example illustrates the issue:

```
{-# LANGUAGE ConstraintKinds, MultiParamTypeClasses, FlexibleContexts #-}
module B where

class M a b where m :: a -> b

type C a b = (Num a, M a b)

f :: C Int b => b -> Int -> Int
f _ x = x + 1
```

Output without the patch, notice that we get the instance for `Num Int` by
using the class selector `p1`.

```
f :: forall b_arz. C Int b_arz => b_arz -> Int -> Int
f =
  \ (@ b_a1EB) ($d(%,%)_a1EC :: C Int b_a1EB) _ (eta1_B1 :: Int) ->
    + @ Int
      (GHC.Classes.$p1(%,%) @ (Num Int) @ (M Int b_a1EB) $d(%,%)_a1EC)
      eta1_B1
      B.f1
```

Output with the patch, nicely optimised code!

```
f :: forall b. C Int b => b -> Int -> Int
f =
  \ (@ b) _ _ (x_azg :: Int) ->
    case x_azg of { GHC.Types.I# x1_a1DP ->
    GHC.Types.I# (GHC.Prim.+# x1_a1DP 1#)
    }
```

Reviewers: simonpj, bgamari, austin

Reviewed By: simonpj

Subscribers: mpickering, rwbarton, thomie

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

GHC Trac Issues: #12791, #5835

2 years agoFix binary instance for SrcStrictness
alexbiehl [Tue, 31 Jan 2017 09:54:50 +0000 (10:54 +0100)] 
Fix binary instance for SrcStrictness

Summary: Found while revisiting the binary serialization for interface files.

Test Plan: Building and validating currently

Reviewers: austin, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, thomie

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

2 years agoTurn libraries/integer-gmp/gmp/tarball into a submodule
Reid Barton [Mon, 30 Jan 2017 19:18:07 +0000 (14:18 -0500)] 
Turn libraries/integer-gmp/gmp/tarball into a submodule

The submodule repository contains the latest version of the GMP source
distribution (6.1.2) with the doc/ subdirectory removed, as described
in gmp/ghc.mk. Rather than applying the old patch from gmp/tarball/patch
I moved its contents into gmp/gmpsrc.patch, canceling a patch related to
memory management there. Experimentally, the PIC-related patch for OS X
is still necessary.

The upgrade to GMP 6.1.2 fixes #7655.

Test Plan:
Built on OS X with in-tree gmp and tested that the command
`ghc -e 'length (show (2^(5*10^6) :: Integer))'` no longer segfaults.

Reviewers: mpickering, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, thomie

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

GHC Trac Issues: #7655

2 years agoFix minor typo in README.md
Takenobu Tani [Mon, 30 Jan 2017 16:59:58 +0000 (11:59 -0500)] 
Fix minor typo in README.md

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix links to building guides in MAKEHELP.md
Takenobu Tani [Mon, 30 Jan 2017 16:59:42 +0000 (11:59 -0500)] 
Fix links to building guides in MAKEHELP.md

MAKEHELP.md has an old link to 'Building/Hacking'.  I updated it to
suitable links for new contributors.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoSimplify minusInteger in integer-gmp slightly
Reid Barton [Mon, 30 Jan 2017 16:59:28 +0000 (11:59 -0500)] 
Simplify minusInteger in integer-gmp slightly

These two special cases were created in D2278 by mechanically
inlining negateInteger into plusInteger. They aren't needed
(the `minusInteger (S# x#) (S# y#)` case already handles all values
correctly), and they can never help by avoiding an allocation,
unlike the original special case in plusInteger, since we still
have to allocate the result.

Removing these special cases will save a couple comparisons and
conditional branches in the common case of subtracting two small
Integers.

Test Plan:
Existing test `plusMinusInteger` already tests
the values in question.

Reviewers: bgamari, goldfire, austin, hvr

Reviewed By: bgamari, hvr

Subscribers: thomie

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

2 years agoPrint COMPLETE pragmas in --show-iface
Matthew Pickering [Mon, 30 Jan 2017 16:59:11 +0000 (11:59 -0500)] 
Print COMPLETE pragmas in --show-iface

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoSlighly clean up symbol loading error.
Tamar Christina [Mon, 30 Jan 2017 16:58:19 +0000 (11:58 -0500)] 
Slighly clean up symbol loading error.

The symbol not found error that is triggered
during lazy-loading was a bit chaotic before.

This reformats it a bit to:

```
ghc-stage2.exe:  | E:\...\libLLVMSupport.a: unknown symbol `_ZN4llvm5APIntC1Ejyb'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm5APInt14AssignSlowCaseERKS0_'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm13ConstantRangeC1ENS_5APIntES1_'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm14FoldingSetImplC2Ej'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm15LLVMContextImplD1Ev'
ghc-stage2.exe:  | E:\...\libLLVMLTO.a: unknown symbol `_ZN4llvm11LLVMContextD1Ev'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZNK4llvm5Value10getContextEv'
ghc-stage2.exe: ^^ Could not load 'LLVMIsMultithreaded', dependency unresolved.
See top entry above.
```

I have also thought about also showing the demangled names, as it may
be useful for the end user.

`libgcc` seems to provide a method for this so we wouldn't need any
extra dependency.

Any thoughts on this or would it not be useful?

Reviewers: austin, erikd, simonmar, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, thomie, #ghc_windows_task_force

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

GHC Trac Issues: #13093, #13113

2 years agoFixes bug #11046
Iavor S. Diatchki [Mon, 30 Jan 2017 16:57:35 +0000 (11:57 -0500)] 
Fixes bug #11046

For some time now, type-level operators such as '+' have been treated as
type constructors, rahter than type variables.  This pathc fixes TH's
`lookupName` function to account for this behavior.

Reviewers: bgamari, austin, goldfire, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: Phyx, thomie

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

GHC Trac Issues: #11046

2 years agoAdd a flag to emit error messages as JSON
Matthew Pickering [Mon, 30 Jan 2017 16:53:17 +0000 (11:53 -0500)] 
Add a flag to emit error messages as JSON

This patch adds the flag `-ddump-json` which dumps all the compiler
output as a JSON array. This allows tooling to more easily parse GHC's
output to display to users.

The flag is currently experimental and will hopefully be refined for the
next release.  In particular I have avoided any changes which involve
significant refactoring and provided what is easy given the current
infrastructure.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: DanielG, gracjan, thomie

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

GHC Trac Issues: #13190

2 years agoCheck that a default type signature aligns with the non-default signature
Ryan Scott [Mon, 30 Jan 2017 16:51:22 +0000 (11:51 -0500)] 
Check that a default type signature aligns with the non-default signature

Before, GHC was extremely permissive about the form a default type
signature could take on in a class declaration. Notably, it would accept
garbage like this:

  class Monad m => MonadSupply m where
    fresh :: m Integer
    default fresh :: MonadTrans t => t m Integer
    fresh = lift fresh

And then give an extremely confusing error message when you actually
tried to declare an empty instance of MonadSupply. We now do extra
validity checking of default type signatures to ensure that they align
with their non-default type signature counterparts. That is, a default
type signature is allowed to differ from the non-default one only in its
context - they must otherwise be alpha-equivalent.

Fixes #12918.

Test Plan: ./validate

Reviewers: goldfire, simonpj, austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, dfeuer, thomie

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

GHC Trac Issues: #12918

2 years agoFix broken tests
Phil Ruffwind [Mon, 30 Jan 2017 16:49:58 +0000 (11:49 -0500)] 
Fix broken tests

1. DoParamM requires the FlexibleContexts pragma now.

2. topHandler02 and topHandler03 were broken as timeout.py failed to
   translate signals to exit codes.

3. topHandler03 does not produce a consistent stderr, as it depends on
   what the user has /bin/sh set to.  dash writes "Terminated" whereas
   bash and zsh produce nothing in non-interactive mode.

4. The remaining tests are broken due to changes in the error message
   formatting.

Test Plan: validate

Reviewers: thomie, dfeuer, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: Phyx, dfeuer

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

2 years agoFix deprecation warnings from containers
Erik de Castro Lopo [Mon, 30 Jan 2017 16:47:00 +0000 (11:47 -0500)] 
Fix deprecation warnings from containers

The functions that were causing warnings were deprecated in containers
0.5 and GHC is already using containers 0.5.9.1.

Test Plan: validate

Reviewers: rwbarton, bgamari, hsyl20, austin, dfeuer

Reviewed By: dfeuer

Subscribers: thomie

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

2 years agoFix mismatched tick in GHC.Generics documentation
Ryan Scott [Mon, 30 Jan 2017 14:31:47 +0000 (09:31 -0500)] 
Fix mismatched tick in GHC.Generics documentation

[ci skip]

A Generic derivation example in the documentation of GHC.Generics put a tick
(used for datatype promotion) in the wrong place.

Fixes #13206.

2 years agoUNREG: add a forward declaration for local literals
Sergei Trofimovich [Sun, 29 Jan 2017 21:11:40 +0000 (21:11 +0000)] 
UNREG: add a forward declaration for local literals

When toplevel literals don't have a way to be exported
from module GHC infers their labels as static.

Example from GHC.Arr:
    static char rdVA_bytes[] = " out of range ";

When this label is used in module internally
we also need to provide it's forward declaration.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
2 years agoUNREG: fix "_bytes" string literal forward declaration
Sergei Trofimovich [Sun, 29 Jan 2017 18:39:48 +0000 (18:39 +0000)] 
UNREG: fix "_bytes" string literal forward declaration

Typical UNREG build failure looks like that:

  ghc-unreg/includes/Stg.h:226:46: error:
     note: in definition of macro 'EI_'
     #define EI_(X)          extern StgWordArray (X) GNU_ATTRIBUTE(aligned (8))
                                                  ^
      |
  226 | #define EI_(X)          extern StgWordArray (X) GNU_ATTRIBUTE(aligned (8))
      |                                              ^

  /tmp/ghc10489_0/ghc_3.hc:1754:6: error:
     note: previous definition of 'ghczmprim_GHCziTypes_zdtcTyCon2_bytes' was here
     char ghczmprim_GHCziTypes_zdtcTyCon2_bytes[] = "TyCon";
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |
  1754 | char ghczmprim_GHCziTypes_zdtcTyCon2_bytes[] = "TyCon";
       |      ^

As we see here "_bytes" string literals are defined as 'char []'
array, not 'StgWord []'.

The change special-cases "_bytes" string literals to have
correct declaration type.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
2 years agoConvert pprTrace in isPredTy to a WARN
Ryan Scott [Sat, 28 Jan 2017 21:54:11 +0000 (16:54 -0500)] 
Convert pprTrace in isPredTy to a WARN

Summary:
There was a `pprTrace` in `isPredTy` that could fire under certain
scenarios, causing normal GHC users to see debugging output. This turns it into
a less chatty `WARN`, and expounds on the comment below it to add the scenario
in #13187 which triggered the `pprTrace`.

Reviewers: goldfire, austin, bgamari

Reviewed By: goldfire, bgamari

Subscribers: thomie

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

GHC Trac Issues: #13187

2 years agoDocument GHC.Profiling functions [ci skip]
Ömer Sinan Ağacan [Sat, 28 Jan 2017 11:59:30 +0000 (14:59 +0300)] 
Document GHC.Profiling functions [ci skip]

2 years agoAdd delete retry loop. [ci skip]
Tamar Christina [Sat, 28 Jan 2017 04:19:02 +0000 (04:19 +0000)] 
Add delete retry loop. [ci skip]

Summary:
On Windows we have to retry the delete a couple of times.
The reason for this is that a `FileDelete` command just marks a
file for deletion. The file is really only removed when the last
handle to the file is closed. Unfortunately there are a lot of
system services that can have a file temporarily opened using a shared
readonly lock, such as the built in AV and search indexer.

We can't really guarantee that these are all off, so what we can do is
whenever after a `rmtree` the folder still exists to try again and wait a bit.

Based on what I've seen from the tests on CI server, is that this is relatively rare.
So overall we won't be retrying a lot. If after a reasonable amount of time the folder is
still locked then abort the current test by throwing an exception, this so it won't fail
with an even more cryptic error.

The issue is that these services often open a file using `FILE_SHARE_DELETE` permissions.
So they can seemingly be removed, and for most intended purposes they are, but recreating
the file with the same name will fail as the FS will prevent data loss.

The MSDN docs for `DeleteFile` says:

```
The DeleteFile function marks a file for deletion on close.
Therefore, the file deletion does not occur until the last handle
to the file is closed. Subsequent calls to CreateFile to open the
file fail with ERROR_ACCESS_DENIED.
```

Retrying seems to be a common pattern, SQLite has it in their driver
http://www.sqlite.org/src/info/89f1848d7f

The only way to avoid this is to run each way of a test in it's own folder.
This would also have the added bonus of increased parallelism.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

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

GHC Trac Issues: #12661, #13162

2 years agoRemove Data.Tuple doc's claim to have tuple types
Chris Martin [Thu, 26 Jan 2017 23:14:36 +0000 (18:14 -0500)] 
Remove Data.Tuple doc's claim to have tuple types

"The tuple data types" seems like an inaccurate way to lead off the
description of this module, which doesn't actually export the tuple data
types. The latter part of the sentence, "associated functions",
accurately describes the entire module.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: dfeuer, thomie

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

2 years agoFix the right-shift operation for negative big integers (fixes #12136)
Daishi Nakajima [Thu, 26 Jan 2017 23:14:08 +0000 (18:14 -0500)] 
Fix the right-shift operation for negative big integers (fixes #12136)

In `x shiftR y`, any of the following conditions cause an abort:
- `x` is a negative big integer
- The size of `x` and `y` is a multiple of `GMP_NUMB_BITS`
- The bit of the absolute value of `x` is filled with `1`

For example:
Assuming `GMP_NUMB_BITS = 2`,  the processing of `-15 shiftR 2` is as
follows:

1. -15 = -1111 (twos complement: 10001)
2. right shift 2 (as a positive number) -> 0011
3. Due to the shift larger than GMP_NUMB_BITS, the size of the
destination is decreasing (2bit) -> 11
4. Add 1, and get carry: (1) 00
5. abort

I fixed it that the destination size does not decrease in such a case.

Test Plan: I tested the specific case being reported.

Reviewers: goldfire, austin, hvr, bgamari, rwbarton

Reviewed By: bgamari, rwbarton

Subscribers: mpickering, rwbarton, thomie

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

GHC Trac Issues: #12136

2 years agoFatal if we try to reinitialize the RTS
Simon Marlow [Thu, 26 Jan 2017 23:13:43 +0000 (18:13 -0500)] 
Fatal if we try to reinitialize the RTS

This isn't supported, and fatalling with an error is better than
segfaulting later.

Test Plan: validate

Reviewers: JonCoens, austin, erikd, niteria, bgamari

Reviewed By: niteria, bgamari

Subscribers: thomie

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

2 years agoBump hsc2hs submodule
Ben Gamari [Thu, 26 Jan 2017 23:12:15 +0000 (18:12 -0500)] 
Bump hsc2hs submodule

2 years agoBump nofib submodule
Ben Gamari [Thu, 26 Jan 2017 23:10:43 +0000 (18:10 -0500)] 
Bump nofib submodule