ghc.git
4 years agoSimon's major commit to re-engineer the constraint solver wip/new-flatten-skolems-Oct14
Simon Peyton Jones [Mon, 3 Nov 2014 17:23:11 +0000 (17:23 +0000)] 
Simon's major commit to re-engineer the constraint solver

The driving change is this:

* The canonical CFunEqCan constraints now have the form
       [G] F xis ~ fsk
       [W] F xis ~ fmv
  where fsk is a flatten-skolem, and fmv is a flatten-meta-variable
  Think of them as the name of the type-function application

See Note [The flattening story] in TcFlatten.  A flatten-meta-variable
is distinguishable by its MetaInfo of FlatMetaTv

This in turn led to an enormous cascade of other changes, which simplify
and modularise the constraint solver.  In particular:

* Basic data types
    * I got rid of inert_solved_funeqs altogether. It serves no useful
      role that inert_flat_cache does not solve.

    * I added wl_implics to the WorkList, as a convenient place to
      accumulate newly-emitted implications; see Note [Residual
      implications] in TcSMonad.

    * I eliminated tcs_ty_binds altogether. These were the bindings
      for unification variables that we have now solved by
      unification.  We kept them in a finite map and did the
      side-effecting unification later.  But in cannonicalisation we
      had to look up in the side-effected mutable tyvars anyway, so
      nothing was being gained.

      Our original idea was that the solver would be pure, and would
      be a no-op if you discarded its results, but this was already
      not-true for implications since we update their evidence
      bindings in an imperative way.  So rather than the uneasy
      compromise, it's now clearly imperative!

* I split out the flatten/unflatten code into a new module, TcFlatten

* I simplified and articulated explicitly the (rather hazy) invariants
  for the inert substitution inert_eqs.  See Note [eqCanRewrite] and
  See Note [Applying the inert substitution] in TcFlatten

* Unflattening is now done (by TcFlatten.unflatten) after solveFlats,
  before solving nested implications.  This turned out to simplify a
  lot of code. Previously, unflattening was done as part of zonking, at
  the very very end.

    * Eager unflattening allowed me to remove the unpleasant ic_fsks
      field of an Implication (hurrah)

    * Eager unflattening made the TcSimplify.floatEqualities function
      much simpler (just float equalities looking like a ~ ty, where a
      is an untouchable meta-tyvar).

    * Likewise the idea of "pushing wanteds in as givens" could be
      completely eliminated.

* I radically simplified the code that determines when there are
  'given' equalities, and hence whether we can float 'wanted' equalies
  out.  See TcSMonad.getNoGivenEqs, and Note [When does an implication
  have given equalities?].

  This allowed me to get rid of the unpleasant inert_no_eqs flag in InertCans.

* As part of this given-equality stuff, I fixed Trac #9211. See Note
  [Let-bound skolems] in TcSMonad

* Orientation of tyvar/tyvar equalities (a ~ b) was partly done during
  canonicalisation, but then repeated in the spontaneous-solve stage
  (trySpontaneousSolveTwoWay). Now it is done exclusively during
  canonicalisation, which keeps all the code in one place.  See
  Note [Canonical orientation for tyvar/tyvar equality constraints]
  in TcCanonical

4 years agoCompiler performance is much worse in for loopy givens
Simon Peyton Jones [Mon, 3 Nov 2014 10:37:59 +0000 (10:37 +0000)] 
Compiler performance is much worse in for loopy givens

This is a deliberate choice, to simplify code, invariants, and I think
performance in typical cases.  The "loopy givens" case is situations like

   [G]  a ~ TF (a, Int)

where TF is a type function with TF (a,b) = (TF a, TF b).

See Note [An alternative story for the inert substitution] in TcFlatten.

4 years agoMake this test a bit simpler
Simon Peyton Jones [Fri, 31 Oct 2014 12:28:42 +0000 (12:28 +0000)] 
Make this test a bit simpler

There were two unrelated functions, and the `-ddump-rule-firings` output
was coming in a non-deterministic order as a result. So now there is just
one function.

4 years agoAdd flattening-notes
Simon Peyton Jones [Thu, 30 Oct 2014 12:11:27 +0000 (12:11 +0000)] 
Add flattening-notes

4 years agoTestsuite error message changes
Simon Peyton Jones [Thu, 30 Oct 2014 11:41:17 +0000 (11:41 +0000)] 
Testsuite error message changes

4 years agoComments only
Simon Peyton Jones [Fri, 31 Oct 2014 12:32:36 +0000 (12:32 +0000)] 
Comments only

4 years agoFix the superclass-cycle detection code (Trac #9739)
Simon Peyton Jones [Fri, 31 Oct 2014 12:31:59 +0000 (12:31 +0000)] 
Fix the superclass-cycle detection code (Trac #9739)

We were falling into an infinite loop when doing the ambiguity
check on a class method, even though we had previously detected
a superclass cycle.  There was code to deal with this, but it
wasn't right.

4 years agoTest Trac #9739
Simon Peyton Jones [Fri, 31 Oct 2014 11:11:50 +0000 (11:11 +0000)] 
Test Trac #9739

4 years agoAdd comments explaining ProbOneShot
Simon Peyton Jones [Fri, 31 Oct 2014 11:13:37 +0000 (11:13 +0000)] 
Add comments explaining ProbOneShot

4 years agoTest Trac #9747
Simon Peyton Jones [Fri, 31 Oct 2014 08:53:52 +0000 (08:53 +0000)] 
Test Trac #9747

4 years agoImprove error message for a handwritten Typeable instance
Simon Peyton Jones [Thu, 30 Oct 2014 16:33:34 +0000 (16:33 +0000)] 
Improve error message for a handwritten Typeable instance

4 years agoTest Trac #9708
Simon Peyton Jones [Thu, 30 Oct 2014 11:39:39 +0000 (11:39 +0000)] 
Test Trac #9708

4 years agoTest Trac #9211
Simon Peyton Jones [Thu, 30 Oct 2014 11:37:39 +0000 (11:37 +0000)] 
Test Trac #9211

4 years agoDefine ctEvLoc and ctEvCoercion, and use them
Simon Peyton Jones [Thu, 30 Oct 2014 09:08:23 +0000 (09:08 +0000)] 
Define ctEvLoc and ctEvCoercion, and use them

4 years agoMinor refactoring (no change in functionality)
Simon Peyton Jones [Wed, 29 Oct 2014 17:51:41 +0000 (17:51 +0000)] 
Minor refactoring (no change in functionality)

4 years agoDon't filter out allegedly-irrelevant bindings with -dppr-debug
Simon Peyton Jones [Wed, 29 Oct 2014 17:50:44 +0000 (17:50 +0000)] 
Don't filter out allegedly-irrelevant bindings with -dppr-debug

4 years agoOnly report "could not deduce s~t from ..." for givens that include equalities
Simon Peyton Jones [Wed, 29 Oct 2014 17:49:34 +0000 (17:49 +0000)] 
Only report "could not deduce s~t from ..." for givens that include equalities

This just simplifies the error message in cases where there are no useful
equalities in the context

4 years agoWhen reporting the context of given constraints, stop when you find one
Simon Peyton Jones [Wed, 29 Oct 2014 17:45:34 +0000 (17:45 +0000)] 
When reporting the context of given constraints, stop when you find one
that binds a variable mentioned in the wanted

There is really no point in reporting ones further out; they can't be useful

4 years agoTypechecker debug tracing only
Simon Peyton Jones [Wed, 29 Oct 2014 17:22:57 +0000 (17:22 +0000)] 
Typechecker debug tracing only

4 years agoNormalise the type of an inferred let-binding
Simon Peyton Jones [Wed, 29 Oct 2014 17:21:05 +0000 (17:21 +0000)] 
Normalise the type of an inferred let-binding

With the new constraint solver, we don't guarantee to fully-normalise
all constraints (if doing so is not necessary to solve them). So we
may end up with an inferred type like
      f :: [F Int] -> Bool
which could be simplifed to
      f :: [Char] -> Bool
if there is a suitable family instance declaration.  This patch
does this normalisation, in TcBinds.mkExport

4 years agoGet the Untouchables level right in simplifyInfer
Simon Peyton Jones [Wed, 29 Oct 2014 17:18:33 +0000 (17:18 +0000)] 
Get the Untouchables level right in simplifyInfer

Previously we could get constraints in which the untouchables-level did not
strictly increase, which is one of the main invariants!

This patch also simplifies and modularises the tricky case of generalising
an inferred let-binding

4 years agoRefactor the treatment of lexically-scoped type variables for instance declarations
Simon Peyton Jones [Wed, 29 Oct 2014 16:54:47 +0000 (16:54 +0000)] 
Refactor the treatment of lexically-scoped type variables for instance declarations

Previously the univerally-quantified variables of the DFun were also (bizarrely)
used as the lexically-scoped variables of the instance declaration.  So, for example,
the DFun's type could not be alpha-renamed.  This was an odd restriction, which has
bitten me several times.

This patch does the Right Thing, by adding an ib_tyvars field to the
InstBindings record, which captures the lexically scoped variables.
Easy, robust, nice.  (I think this record probably didn't exist originally,
hence the hack.)

4 years agoRefactor skolemising, and newClsInst
Simon Peyton Jones [Wed, 29 Oct 2014 16:26:53 +0000 (16:26 +0000)] 
Refactor skolemising, and newClsInst

This makes newClsInst (was mkInstance) look more like newFamInst, and simplifies
the plumbing of the overlap flag, and ensures that freshening (required by
the InstEnv stuff) happens in one place.

On the way I also tided up the rather ragged family of tcInstSkolTyVars and
friends.  The result at least has more uniform naming.

4 years agoRename setRole_maybe to downgradeRole_maybe
Simon Peyton Jones [Wed, 29 Oct 2014 16:35:19 +0000 (16:35 +0000)] 
Rename setRole_maybe to downgradeRole_maybe

This change is just for naming uniformity with the existing downgradeRole

4 years agoSimplify the API for tcInstTyVars, and make it more consistent with other similar...
Simon Peyton Jones [Wed, 29 Oct 2014 16:34:05 +0000 (16:34 +0000)] 
Simplify the API for tcInstTyVars, and make it more consistent with other similar functions

4 years agoFix reduceTyFamApp_maybe
Simon Peyton Jones [Wed, 29 Oct 2014 16:30:05 +0000 (16:30 +0000)] 
Fix reduceTyFamApp_maybe

This function previously would expand *data* families even when it was asked
for a *Nominal* coercion.  This patch fixes it, and adds comments.

4 years agoWhite space only
Simon Peyton Jones [Wed, 29 Oct 2014 16:27:50 +0000 (16:27 +0000)] 
White space only

4 years agoAdd the unfolding and inline-pragma for DFuns in DsBinds, not TcInstDcls
Simon Peyton Jones [Wed, 29 Oct 2014 15:36:28 +0000 (15:36 +0000)] 
Add the unfolding and inline-pragma for DFuns in DsBinds, not TcInstDcls

This is a straight refactoring that puts the generation of unfolding
info in one place, which is a lot tidier

4 years agoSimplify the generation of superclass constraints in tcInstDecl2
Simon Peyton Jones [Wed, 29 Oct 2014 15:34:14 +0000 (15:34 +0000)] 
Simplify the generation of superclass constraints in tcInstDecl2

The simplified function is tcSuperClasses;
no need for an implication constraint here

4 years agoSome refactoring around endPass and debug dumping
Simon Peyton Jones [Wed, 29 Oct 2014 15:23:14 +0000 (15:23 +0000)] 
Some refactoring around endPass and debug dumping

I forget all the details, but I spent some time trying to
understand the current setup, and tried to simplify it a bit

4 years agoImprove pretty-printing of type variables
Simon Peyton Jones [Wed, 29 Oct 2014 15:15:38 +0000 (15:15 +0000)] 
Improve pretty-printing of type variables

In particular, print a bit of debug info in debug-style and dump-style
Otherwise distinct type variables look the same

4 years agoTidy up pretty-printing of SrcLoc and SrcSpan
Simon Peyton Jones [Wed, 29 Oct 2014 15:13:41 +0000 (15:13 +0000)] 
Tidy up pretty-printing of SrcLoc and SrcSpan

4 years agoComments only
Jan Stolarek [Thu, 30 Oct 2014 10:51:10 +0000 (11:51 +0100)] 
Comments only

4 years agoAdded mingw32-specific expected stdout files for tests/driver/sigof{01,02,03}
Gintautas Miliauskas [Thu, 30 Oct 2014 04:15:25 +0000 (23:15 -0500)] 
Added mingw32-specific expected stdout files for tests/driver/sigof{01,02,03}

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter, simonmar

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

4 years agoAdd __GLASGOW_HASKELL_TH__=YES/NO to CPP definitions
Joachim Breitner [Thu, 30 Oct 2014 04:15:07 +0000 (23:15 -0500)] 
Add __GLASGOW_HASKELL_TH__=YES/NO to CPP definitions

Test Plan: None really.

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter, simonmar

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

GHC Trac Issues: #9734

4 years agoDo not use a relative path for echo in tests/ghci/prog013.
Gintautas Miliauskas [Thu, 30 Oct 2014 04:14:38 +0000 (23:14 -0500)] 
Do not use a relative path for echo in tests/ghci/prog013.

Trying to run /usr/bin/echo fails when running tests on Windows,
but using plain "echo" works fine. I think it's fine to assume
the environment is not doing anything particularly funny...

Summary:
...with
echo...

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter, simonmar, #ghc_windows_task_force

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

4 years agoUpdated stale ghcpkg05.stderr-mingw32.
Gintautas Miliauskas [Thu, 30 Oct 2014 04:14:28 +0000 (23:14 -0500)] 
Updated stale ghcpkg05.stderr-mingw32.

Looks like the mingw32-specific test was accidentally forgotten after
changing the code and the expected outputs for non OS-specific tests.

Reviewers: austin

Reviewed By: austin

Subscribers: #ghc_windows_task_force, thomie, carter, simonmar

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

4 years agoExtra CRs are now filtered out from the source file for :list.
Gintautas Miliauskas [Thu, 30 Oct 2014 04:14:17 +0000 (23:14 -0500)] 
Extra CRs are now filtered out from the source file for :list.

Fixes #9367.

Reviewers: austin

Reviewed By: austin

Subscribers: #ghc_windows_task_force, thomie, carter, simonmar

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

GHC Trac Issues: #9367

4 years agoAvoid setting -Werror=unused-but-set-variable on Windows.
Gintautas Miliauskas [Thu, 30 Oct 2014 04:13:51 +0000 (23:13 -0500)] 
Avoid setting -Werror=unused-but-set-variable on Windows.

Summary:
The option is not needed (it was only intended to override Debian's default)
and causes an error if the host ghc's mingw is too old (which the script
does not detect).

Fixes T9727

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter, simonmar

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

GHC Trac Issues: #9727

4 years agoUse snwprintf instead of swprintf in rts/Linker.c.
Gintautas Miliauskas [Thu, 30 Oct 2014 04:13:31 +0000 (23:13 -0500)] 
Use snwprintf instead of swprintf in rts/Linker.c.

Summary:
swprintf has different signatures in mingw32, where it does not include the
buffer size, and in mingw-w64, where it does. That of course breaks the code
as mingw-w64 treats the pointer to the format string as a size_t.

snwprintf is available in both environments and is consistent, so use that
instead.

Reviewers: simonmar, austin

Reviewed By: austin

Subscribers: #ghc_windows_task_force, thomie, carter, simonmar

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

GHC Trac Issues: #9726

4 years agoFix #9236 Error on read from closed handle
David Feuer [Thu, 30 Oct 2014 04:13:07 +0000 (23:13 -0500)] 
Fix #9236 Error on read from closed handle

Summary:
Fixes #9236. My testing indicates that this does *not* lead to problems with
broken pipes and such, but further testing is required. It found
a bug in haddock; I've submitted a pull request upstream.

Reviewers: ekmett, austin

Reviewed By: ekmett, austin

Subscribers: rwbarton, thomie, carter, simonmar

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

GHC Trac Issues: #9236

4 years agoConvert GHCi sources from .lhs to .hs
Rodlogic [Thu, 30 Oct 2014 04:12:54 +0000 (23:12 -0500)] 
Convert GHCi sources from .lhs to .hs

Summary: Signed-off-by: Rodlogic <admin@rodlogic.net>

Test Plan: Does it compile?

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: thomie, carter, simonmar

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

4 years agohsc2hs: Update submodule
Austin Seipp [Thu, 30 Oct 2014 04:04:59 +0000 (23:04 -0500)] 
hsc2hs: Update submodule

This makes sure the --cross-compile mode can handle negative enum
values.

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

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoFixed unused variable warning on mingw32/i686 in rts/Linker.c
Gintautas Miliauskas [Wed, 29 Oct 2014 23:16:12 +0000 (18:16 -0500)] 
Fixed unused variable warning on mingw32/i686 in rts/Linker.c

The warning was breaking validate.sh runs due to -Wall.

Reviewers: austin

Reviewed By: austin

Subscribers: #ghc_windows_task_force, thomie, carter, simonmar

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

4 years agoReally fix fft2 regression. #9740
David Feuer [Wed, 29 Oct 2014 14:47:57 +0000 (15:47 +0100)] 
Really fix fft2 regression. #9740

Rewrite `take` more aggressively for fusion. Add some more explicit
strictness to `unsafeTake` and `unsafeDrop` that seems to help code size and
allocation just a drop in some nofib tests. They were not previously
strict in their numerical arguments, but always called in contexts where
those had been forced; it didn't make a difference in simple test cases,
but made a small difference for nofib. See #9740.

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

4 years agoUpdate Haddock submodule for collapsible section support
Herbert Valerio Riedel [Wed, 29 Oct 2014 09:08:26 +0000 (10:08 +0100)] 
Update Haddock submodule for collapsible section support

This also updates a few occurences of recently added "Example"
headings to make use of this new feature for testing

4 years agoReorder GHC.List; fix performance regressions
David Feuer [Wed, 29 Oct 2014 07:15:08 +0000 (08:15 +0100)] 
Reorder GHC.List; fix performance regressions

Rearrange some oddly placed code.

Modify `take` to make the fold unconditionally strict in the passed
`Int`. This clears up the `fft2` regression.
This fixes #9740. Differential Revision: https://phabricator.haskell.org/D390

4 years agobase: Refactor/clean-up *List modules
David Feuer [Tue, 28 Oct 2014 14:26:39 +0000 (15:26 +0100)] 
base: Refactor/clean-up *List modules

This gets rid of all hand-unboxing in `GHC.List` and moves `Foldable`
requirements from `Data.OldList` into `GHC.List` (preparatory work for
addressing #9716).  Specifically, this moves the definition of
`maximum`, `minimum`, `foldl'`, `foldl1`, `foldl1'`, `sum`, and
`product` into `GHC.List` (which now needs to import `GHC.Num`)

Make `take`, `drop`, `length`, and `!!` generally saner (see also #9510)

Performance overall seems minimally affected. Some things go up; some
things go down; nothing moves horribly much. The code is much easier to
read.

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

4 years agoMake iterateFB inlineable
Joachim Breitner [Tue, 28 Oct 2014 14:28:59 +0000 (15:28 +0100)] 
Make iterateFB inlineable

When investigating a case of unexpected Call Arity failure I noticed
that iterateFB would not inline as far as desired, as it is recursive.

This patch makes it non-recursive (with a local go), which seem so do
great good.

4 years agotestlib: Get rid of two_normalisers
Joachim Breitner [Tue, 28 Oct 2014 10:21:49 +0000 (11:21 +0100)] 
testlib: Get rid of two_normalisers

And make normalise_fun polyvariadic. After all, this is untyped code, so
lets make use of it :-)

4 years agoAdd n-ary version of `two_normalisers` to testsuite lib
Herbert Valerio Riedel [Tue, 28 Oct 2014 09:42:34 +0000 (10:42 +0100)] 
Add n-ary version of `two_normalisers` to testsuite lib

This is more readable than nesting `two_normalisers()`-invocations

4 years agoNormalise package key hash to make tests less fragile.
Edward Z. Yang [Tue, 28 Oct 2014 00:52:39 +0000 (17:52 -0700)] 
Normalise package key hash to make tests less fragile.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
4 years agoTypo in comment
Gabor Greif [Mon, 27 Oct 2014 23:17:13 +0000 (00:17 +0100)] 
Typo in comment

4 years agoImprove performance of isSuffixOf (#9676)
David Feuer [Mon, 27 Oct 2014 21:12:07 +0000 (22:12 +0100)] 
Improve performance of isSuffixOf (#9676)

The new implementation avoids reversing the "haystack" list, which can be
very expensive.

Reviewed By: ekmett

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

4 years agoDeactivate T3064 `max_bytes_used`-check
Herbert Valerio Riedel [Mon, 27 Oct 2014 18:37:16 +0000 (19:37 +0100)] 
Deactivate T3064 `max_bytes_used`-check

Summary:
T3064 is deactivated for now because it's currently too volatile
and causes too much noise in Phabricator's CI

C.f. 4805abf413c02a2ed1af4fbeca2476590e984e37

Reviewers: austin

Subscribers: thomie, carter, ezyang, simonmar

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

4 years agoUn-wire `Integer` type (re #9714)
Herbert Valerio Riedel [Mon, 27 Oct 2014 15:44:36 +0000 (16:44 +0100)] 
Un-wire `Integer` type (re #9714)

Integer is currently a wired-in type for integer-gmp. This requires
replicating its inner structure in `TysWiredIn`, which makes it much
harder to change Integer to a more complex representation (as
e.g. needed for implementing #9281)

This commit stops `Integer` being a wired-in type, and makes it
known-key type instead, thereby simplifying code notably.

Reviewed By: austin

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

4 years agoOptimise atomicModifyIORef' implementation (#8345)
David Feuer [Mon, 27 Oct 2014 09:21:20 +0000 (10:21 +0100)] 
Optimise atomicModifyIORef' implementation (#8345)

This forces the new value before installing it in the IORef.

This optimisation was originally suggested by Patrick Palka
and "exhibits a speedup of 1.7x (vanilla RTS) / 1.4x (threaded RTS)"
according to #8345

Reviewed By: austin, simonmar

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

4 years agoAdd new `Data.Bifunctor` module (re #9682)
Herbert Valerio Riedel [Sun, 26 Oct 2014 07:49:38 +0000 (08:49 +0100)] 
Add new `Data.Bifunctor` module (re #9682)

This adds the module `Data.Bifunctor` providing the
`Bifunctor(bimap,first,second)` class and a couple of instances

This module and the class were previously exported by the `bifunctors`
package.  In contrast to the original module all `INLINE` pragmas have
been removed.

Reviewed By: ekmett, austin, dolio

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

4 years agotestsuite: Fix outdated output for T5979/safePkg01
Austin Seipp [Sun, 26 Oct 2014 05:45:56 +0000 (00:45 -0500)] 
testsuite: Fix outdated output for T5979/safePkg01

Looks like it was broken in aa4799534225.

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago`M-x delete-trailing-whitespace` & `M-x untabify`
Herbert Valerio Riedel [Sat, 25 Oct 2014 14:11:21 +0000 (16:11 +0200)] 
`M-x delete-trailing-whitespace` & `M-x untabify`

This removes all remaining tabs from `base`'s source code

4 years agoPass in CXX to libffi's configure script.
Gintautas Miliauskas [Sat, 25 Oct 2014 00:27:05 +0000 (19:27 -0500)] 
Pass in CXX to libffi's configure script.

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter, ezyang, simonmar

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

GHC Trac Issues: #9720

4 years agofix a typo in comments: normaliseFfiType
Yuras Shumovich [Sat, 25 Oct 2014 00:26:55 +0000 (19:26 -0500)] 
fix a typo in comments: normaliseFfiType

Summary:
The function is defined in TcForeign module, but misspelled comment
makes it hard to find

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter, ezyang, simonmar

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

4 years agoFix windows build failure.
Austin Seipp [Fri, 24 Oct 2014 22:57:50 +0000 (17:57 -0500)] 
Fix windows build failure.

Authored-by: Simon Marlow <marlowsd@gmail.com>
Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoImplementation of hsig (module signatures), per #9252
Edward Z. Yang [Thu, 7 Aug 2014 17:32:12 +0000 (18:32 +0100)] 
Implementation of hsig (module signatures), per #9252

Summary:
Module signatures, like hs-boot files, are Haskell modules which omit
value definitions and contain only signatures.  This patchset implements
one particular aspect of module signature, namely compiling them against
a concrete implementation.  It works like this: when we compile an hsig
file, we must be told (via the -sig-of flag) what module this signature
is implementing.  The signature is compiled into an interface file which
reexports precisely the entities mentioned in the signature file.  We also
verify that the interface is compatible with the implementation.

This feature is useful in a few situations:

    1. Like explicit import lists, signatures can be used to reduce
    sensitivity to upstream changes.  However, a signature can be defined
    once and then reused by many modules.

    2. Signatures can be used to quickly check if a new upstream version
    is compatible, by typechecking just the signatures and not the actual
    modules.

    3. A signature can be used to mediate separate modular development,
    where the signature is used as a placeholder for functionality which
    is loaded in later.  (This is only half useful at the moment, since
    typechecking against signatures without implementations is not implemented
    in this patchset.)

Unlike hs-boot files, hsig files impose no performance overhead.

This patchset punts on the type class instances (and type families) problem:
instances simply leak from the implementation to the signature.  You can
explicitly specify what instances you expect to have, and those will be checked,
but you may get more instances than you asked for.  Our eventual plan is
to allow hiding instances, but to consider all transitively reachable instances
when considering overlap and soundness.

ToDo: signature merging: when a module is provided by multiple signatures
for the same base implementation, we should not consider this ambiguous.

ToDo: at the moment, signatures do not constitute use-sites, so if you
write a signature for a deprecated function, you won't get a warning
when you compile the signature.

Future work: The ability to feed in shaping information so that we can take
advantage of more type equalities than might be immediately evident.

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

Reviewers: simonpj, simonmar, hvr, austin

Subscribers: simonmar, relrod, ezyang, carter, goldfire

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

GHC Trac Issues: #9252

4 years agoCheck in up-to-date PDF copies of Backpack docs. [skip ci]
Edward Z. Yang [Fri, 24 Oct 2014 01:20:25 +0000 (18:20 -0700)] 
Check in up-to-date PDF copies of Backpack docs. [skip ci]

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
4 years agoMore updates to Backpack manual [skip ci]
Edward Z. Yang [Fri, 24 Oct 2014 01:19:46 +0000 (18:19 -0700)] 
More updates to Backpack manual [skip ci]

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
4 years agoFix a rare parallel GC bug
Simon Marlow [Thu, 23 Oct 2014 10:12:16 +0000 (11:12 +0100)] 
Fix a rare parallel GC bug

When there's a conflict between two threads evacuating the same TSO,
in some cases we would update the incall->tso pointer to point to the
wrong copy of the TSO.  This would get fixed during the next GC, but
if the thread completed in the meantime, it would likely crash.  We're
seeing this about once per day on a heavily loaded machine (it varies
a lot though).

4 years agoAdd forgotten import to T9692
Joachim Breitner [Wed, 22 Oct 2014 13:02:42 +0000 (15:02 +0200)] 
Add forgotten import to T9692

(sorry)

4 years agoFlush stdout in T9692
Joachim Breitner [Wed, 22 Oct 2014 08:49:35 +0000 (10:49 +0200)] 
Flush stdout in T9692

4 years agobase: Mark WCsubst.c as generated for Phabricator
Austin Seipp [Tue, 21 Oct 2014 21:50:23 +0000 (16:50 -0500)] 
base: Mark WCsubst.c as generated for Phabricator

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agorts: Detabify Interpreter.c
Austin Seipp [Tue, 21 Oct 2014 21:45:57 +0000 (16:45 -0500)] 
rts: Detabify Interpreter.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Schedule.c
Austin Seipp [Tue, 21 Oct 2014 21:45:19 +0000 (16:45 -0500)] 
[skip ci] rts: Detabify Schedule.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify ProfHeap.c
Austin Seipp [Tue, 21 Oct 2014 21:44:41 +0000 (16:44 -0500)] 
[skip ci] rts: Detabify ProfHeap.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify RetainerProfile.c
Austin Seipp [Tue, 21 Oct 2014 21:44:19 +0000 (16:44 -0500)] 
[skip ci] rts: Detabify RetainerProfile.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify sm/Compact.h
Austin Seipp [Tue, 21 Oct 2014 21:43:04 +0000 (16:43 -0500)] 
[skip ci] rts: Detabify sm/Compact.h

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify sm/Compact.c
Austin Seipp [Tue, 21 Oct 2014 21:42:49 +0000 (16:42 -0500)] 
[skip ci] rts: Detabify sm/Compact.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify sm/Sanity.c
Austin Seipp [Tue, 21 Oct 2014 21:42:24 +0000 (16:42 -0500)] 
[skip ci] rts: Detabify sm/Sanity.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify sm/GC.c
Austin Seipp [Tue, 21 Oct 2014 21:42:10 +0000 (16:42 -0500)] 
[skip ci] rts: Detabify sm/GC.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify RaiseAsync.c
Austin Seipp [Tue, 21 Oct 2014 21:41:02 +0000 (16:41 -0500)] 
[skip ci] rts: Detabify RaiseAsync.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Capability.c
Austin Seipp [Tue, 21 Oct 2014 21:40:40 +0000 (16:40 -0500)] 
[skip ci] rts: Detabify Capability.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify HeapStackCheck.cmm
Austin Seipp [Tue, 21 Oct 2014 21:39:44 +0000 (16:39 -0500)] 
[skip ci] rts: Detabify HeapStackCheck.cmm

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Exception.cmm
Austin Seipp [Tue, 21 Oct 2014 21:39:15 +0000 (16:39 -0500)] 
[skip ci] rts: Detabify Exception.cmm

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Proftimer.c
Austin Seipp [Tue, 21 Oct 2014 21:38:27 +0000 (16:38 -0500)] 
[skip ci] rts: Detabify Proftimer.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify LdvProfile.h
Austin Seipp [Tue, 21 Oct 2014 21:38:06 +0000 (16:38 -0500)] 
[skip ci] rts: Detabify LdvProfile.h

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Schedule.h
Austin Seipp [Tue, 21 Oct 2014 21:37:53 +0000 (16:37 -0500)] 
[skip ci] rts: Detabify Schedule.h

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Stats.c
Austin Seipp [Tue, 21 Oct 2014 21:37:09 +0000 (16:37 -0500)] 
[skip ci] rts: Detabify Stats.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify sm/Scav.c
Austin Seipp [Tue, 21 Oct 2014 21:36:30 +0000 (16:36 -0500)] 
[skip ci] rts: Detabify sm/Scav.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify sm/Evac.c
Austin Seipp [Tue, 21 Oct 2014 21:35:59 +0000 (16:35 -0500)] 
[skip ci] rts: Detabify sm/Evac.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Threads.c
Austin Seipp [Tue, 21 Oct 2014 21:34:07 +0000 (16:34 -0500)] 
[skip ci] rts: Detabify Threads.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Profiling.c
Austin Seipp [Tue, 21 Oct 2014 21:33:46 +0000 (16:33 -0500)] 
[skip ci] rts: Detabify Profiling.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify CheckUnload.c
Austin Seipp [Tue, 21 Oct 2014 21:33:29 +0000 (16:33 -0500)] 
[skip ci] rts: Detabify CheckUnload.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify Capability.h
Austin Seipp [Tue, 21 Oct 2014 21:32:58 +0000 (16:32 -0500)] 
[skip ci] rts: Detabify Capability.h

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify RaiseAsync.h
Austin Seipp [Tue, 21 Oct 2014 21:32:20 +0000 (16:32 -0500)] 
[skip ci] rts: Detabify RaiseAsync.h

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years ago[skip ci] rts: Detabify RtsMessages.c
Austin Seipp [Tue, 21 Oct 2014 21:31:22 +0000 (16:31 -0500)] 
[skip ci] rts: Detabify RtsMessages.c

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoEnabled warn on tabs by default (fixes #9230)
Mateusz Lenik [Tue, 21 Oct 2014 20:34:00 +0000 (15:34 -0500)] 
Enabled warn on tabs by default (fixes #9230)

Summary:
This revision enables -fwarn-tabs by default and add a suppression
flag, so that GHC compilation won't fail when some files contain tab
characters.

Test Plan: Additional test case, T9230, was added to cover that change.

Reviewers: austin

Reviewed By: austin

Subscribers: simonmar, ezyang, carter, thomie, mlen

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

GHC Trac Issues: #9230

Conflicts:
testsuite/driver/testlib.py

4 years agoFixes the ARM build
Moritz Angermann [Tue, 21 Oct 2014 20:33:18 +0000 (15:33 -0500)] 
Fixes the ARM build

Summary:
CodeGen.Platform.hs was changed with the following diff:

   -#endif
    globalRegMaybe _                        = Nothing
   +#elif MACHREGS_NO_REGS
   +globalRegMaybe _ = Nothing
   +#else
   +globalRegMaybe = panic "globalRegMaybe not defined for this platform"
   +#endif

which causes globalRegMaybe ot panic for arch ARM.

This patch ensures globalRegMaybe is not called on ARM.

Signed-off-by: Moritz Angermann <moritz@lichtzwerge.de>
Test Plan: Building arm cross-compiler (e.g. --target=arm-apple-darwin10)

Reviewers: hvr, ezyang, simonmar, rwbarton, austin

Reviewed By: austin

Subscribers: dterei, bgamari, simonmar, ezyang, carter

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

GHC Trac Issues: #9593

4 years agoAdd release note about Unicode 7.0
Austin Seipp [Tue, 21 Oct 2014 20:31:57 +0000 (15:31 -0500)] 
Add release note about Unicode 7.0

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoAdd doctest examples for Data.Bool.
Michael Orlitzky [Tue, 21 Oct 2014 20:02:29 +0000 (15:02 -0500)] 
Add doctest examples for Data.Bool.

Summary:
Add examples for `Data.Bool`, and rework the existing documentation of
the `bool` function slightly: the `a`,`b` in its explanation were changed
to `x`,`y` to avoid ambiguity with the type variable 'a'.

The examples have been tested, and two trailing spaces were removed.

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter, ezyang, simonmar

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

4 years agoFix typo in -XConstraintKinds docs
Ricky Elrod [Tue, 21 Oct 2014 20:02:21 +0000 (15:02 -0500)] 
Fix typo in -XConstraintKinds docs

Summary:
Fix a minor typo that seems to have existed for a long time.

Signed-off-by: Ricky Elrod <ricky@elrod.me>
Test Plan: My eyes.

Reviewers: austin, #ghc

Reviewed By: austin, #ghc

Subscribers: thomie, carter, ezyang, simonmar

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

4 years agoAdd doctest examples for Data.Functor.
Michael Orlitzky [Tue, 21 Oct 2014 20:02:11 +0000 (15:02 -0500)] 
Add doctest examples for Data.Functor.

Summary:
Add doctest examples for the three standalone functions defined in
Data.Functor:

  * Data.Functor.$>
  * Data.Functor.<$>
  * Data.Functor.void

This is part of a larger plan to add examples for the functions in
base, and to eventually enable automatic testing of them.

Reviewers: austin, hvr, ekmett

Reviewed By: austin

Subscribers: hvr, ekmett, thomie, carter, ezyang, simonmar

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