3 years agoMove mkDefaultMethodIds, mkRecSelBinds from TcTyClsDecls to TcTyDecls
Ben Gamari [Wed, 28 Oct 2015 17:28:57 +0000 (18:28 +0100)] 
Move mkDefaultMethodIds, mkRecSelBinds from TcTyClsDecls to TcTyDecls

3 years agoRevert "Build system: don't create mk/"
Thomas Miedema [Tue, 27 Oct 2015 15:46:01 +0000 (16:46 +0100)] 
Revert "Build system: don't create mk/"

This reverts commit aecf4a5f96d0d3ffcf4cb2c67a20a610d7c64486.

It turns out the Simons are relying on 'mk/', see

The workflow they are using is:
  * run ./validate
  * find a bug in the compiler
  * try to fix the bug, running 'make 1' (or 'make 2') repeatedly. Because
    of 'mk/', this uses the same build settings as validate.
  * continue ./validate (--no-clean)

I suggested two alternatives:

  A. run 'make 1 Validating=YES' instead of 'make 1'

     Problem: when running `./validate --fast` or `./validate --hpc`
     instead of a normal `./validate`, validate sets ValidateSpeed and
     ValdateHpc in mk/ You would for example have to run
     'make 1 Validating=YES ValidateSpeed=FAST' instead of 'make 1' to get the
     same build settings as `./validate --fast`, which is entirely too long and
     error prone.

  B. uncomment `#BuildFlavour=validate` in mk/, and include

      * any other settings you have in will also get used.
      * the distinction between 'mk/' and 'mk/' becomes less
      * it is easy to forget to include 'mk/'.
      * the build system again doesn't have access to the ValidateSpeed and
        ValdateHpc settings set by validate.

Neither of these two options is entirely satisfactory.

Reviewers: austin, bgamari

Differential Revision:

3 years agoRecord pattern synonyms
Matthew Pickering [Mon, 19 Oct 2015 20:17:29 +0000 (21:17 +0100)] 
Record pattern synonyms

This patch implements an extension to pattern synonyms which allows user
to specify pattern synonyms using record syntax. Doing so generates
appropriate selectors and update functions.

=== Interaction with Duplicate Record Fields ===

The implementation given here isn't quite as general as it could be with
respect to the recently-introduced `DuplicateRecordFields` extension.

Consider the following module:

    {-# LANGUAGE DuplicateRecordFields #-}
    {-# LANGUAGE PatternSynonyms #-}

    module Main where

    pattern S{a, b} = (a, b)
    pattern T{a}    = Just a

    main = do
      print S{ a = "fst", b = "snd" }
      print T{ a = "a" }

In principle, this ought to work, because there is no ambiguity. But at
the moment it leads to a "multiple declarations of a" error. The problem
is that pattern synonym record selectors don't do the same name mangling
as normal datatypes when DuplicateRecordFields is enabled. They could,
but this would require some work to track the field label and selector
name separately.

In particular, we currently represent datatype selectors in the third
component of AvailTC, but pattern synonym selectors are just represented
as Avails (because they don't have a corresponding type constructor).
Moreover, the GlobalRdrElt for a selector currently requires it to have
a parent tycon.

(example due to Adam Gundry)

=== Updating Explicitly Bidirectional Pattern Synonyms ===

Consider the following

pattern Silly{a} <- [a] where
  Silly a = [a, a]

f1 = a [5] -- 5

f2 = [5] {a = 6} -- currently [6,6]

=== Fixing Polymorphic Updates ===

They were fixed by adding these two lines in `dsExpr`. This might break
record updates but will be easy to fix.

+ ; let req_wrap = mkWpTyApps (mkTyVarTys univ_tvs)

- , pat_wrap = idHsWrapper }
+, pat_wrap = req_wrap }

=== Mixed selectors error ===

Note [Mixed Record Field Updates]

Consider the following pattern synonym.

    data MyRec = MyRec { foo :: Int, qux :: String }

    pattern HisRec{f1, f2} = MyRec{foo = f1, qux=f2}

This allows updates such as the following

    updater :: MyRec -> MyRec
    updater a = a {f1 = 1 }

It would also make sense to allow the following update (which we

    updater a = a {f1 = 1, qux = "two" } ==? MyRec 1 "two"

This leads to confusing behaviour when the selectors in fact refer the
same field.

    updater a = a {f1 = 1, foo = 2} ==? ???

For this reason, we reject a mixture of pattern synonym and normal
record selectors in the same update block. Although of course we still
allow the following.

    updater a = (a {f1 = 1}) {foo = 2}

    > updater (MyRec 0 "str")
    MyRec 2 "str"

3 years agoRevert "Build system: don't add ALL_HC_OPTS when linking"
Ben Gamari [Thu, 29 Oct 2015 10:45:45 +0000 (06:45 -0400)] 
Revert "Build system: don't add ALL_HC_OPTS when linking"

This reverts commit 9fc2d777f53110040f48ab27643a16888fa377f5.

This appears to cause interface file issues during rebuilds. Punting
back to @thomie for further investigation.

3 years agoTestsuite: report and error out on unfound tests
Thomas Miedema [Wed, 28 Oct 2015 11:28:59 +0000 (12:28 +0100)] 
Testsuite: report and error out on unfound tests

Users are sometimes confused why their test doesn't run. It is usually
because of a misspelled testname, for example using 'TEST=1234' instead
of 'TEST=T1234'. After this patch it is hopefully more clear what the
problem is, showing:

    ERROR: tests not found: ['1234']

Instead of:

    0 total tests, which gave rise to
    0 test cases, of which
    0 were skipped

Reviewed by: austin, bgamari

Differential Revision:

3 years agoBackpack documentation updates for component IDs [no-ci]
Edward Z. Yang [Thu, 29 Oct 2015 07:16:28 +0000 (00:16 -0700)] 
Backpack documentation updates for component IDs [no-ci]

Signed-off-by: Edward Z. Yang <>
3 years agoFix rts/T9579 tests on OS X
Erik de Castro Lopo [Thu, 29 Oct 2015 00:25:42 +0000 (11:25 +1100)] 
Fix rts/T9579 tests on OS X

Sed on OS X does not understand 's/[0-9]\+ bytes/NUM bytes/g' but
sed on Linux and OS X do understand 's/[0-9]* bytes/NUM bytes/g'.

Test Plan: Run all rts/T9579 tests on Linux and Mac

Reviewers: thomie, austin, bgamari

Differential Revision:

3 years agorts/Linker.c: Drop support for legacy OS X dyn loading
Erik de Castro Lopo [Thu, 29 Oct 2015 01:59:30 +0000 (12:59 +1100)] 
rts/Linker.c: Drop support for legacy OS X dyn loading

Drop support for old OS X (OS X 10.2 and earlier) dynamic linking.
10.3 was released in 2003.

Test Plan: Validate on OS X and Linux.

Reviewers: bgamari, thomie, austin

Reviewed By: thomie, austin

Differential Revision:

3 years agoUpdate `deepseq` submodule
Herbert Valerio Riedel [Wed, 28 Oct 2015 20:42:09 +0000 (21:42 +0100)] 
Update `deepseq` submodule

This is done now to prepare for #11026

3 years agoUpdate haskeline/terminfo submodules
Herbert Valerio Riedel [Wed, 28 Oct 2015 20:15:54 +0000 (21:15 +0100)] 
Update haskeline/terminfo submodules

This is needed to prepare for #11026 as these updates
relax the upper bounds on `base` to allow for `base-`

This update contains no code-changes to terminfo/haskeline yet

3 years agoPattern synonyms: swap provided/required
Simon Peyton Jones [Wed, 28 Oct 2015 09:41:27 +0000 (09:41 +0000)] 
Pattern synonyms: swap provided/required

This patch swaps the order of provided and required constraints in
a pattern signature, so it now goes

      pattern P :: req => prov => t1 -> ... tn -> res_ty

See the long discussion in Trac #10928.

I think I have found all the places, but I could have missed something
particularly in comments.

There is a Haddock changes; so a submodule update.

3 years agoBuild system: don't add ALL_HC_OPTS when linking
Thomas Miedema [Mon, 26 Oct 2015 19:54:58 +0000 (20:54 +0100)] 
Build system: don't add ALL_HC_OPTS when linking

The current scheme in rules/ is something like this:
  MOST_DIR_HC_OPTS = MOST_HC_OPTS + -odir,-hidir,-stubdir

Notice that both ALL_HC_OPTS and GHC_LD_OPTS include MOST_HC_OPTS, and
currently both got added when linking. Adding MOST_HC_OPTS twice results
in overly long and hard to decipher command lines (and build logs). This
commit fixes that.

Afaik, -odir,-hidir,-stubdir,-hisuf,-osuf,-hcsuf,-spit-objs,-dynamic-too
are all not needed when linking, so this change should be safe to make.
GHC_LD_OPTS is for linking, ALL_HC_OPTS is for compiling.

ALL_HC_OPTS was added to the linking commands in
37a6a52facd1c3999ce4472c50b0030568be1e04, to make sure
-no-user-package-conf would be in the options list. It still is after
this change.

Reviewers: austin, bgamari

Differential Revision:

3 years agoPrelNames: Fix duplicate unique
Ben Gamari [Tue, 27 Oct 2015 21:10:58 +0000 (22:10 +0100)] 
PrelNames: Fix duplicate unique

Previously unboundKey and fromIntegerClassOpKey were sharing a Unique
Reassign unboundKey to `mkPreludeMiscIdUnique 158`

3 years agoTestsuite: accept output for T10999 (#10999)
Thomas Miedema [Tue, 27 Oct 2015 20:32:52 +0000 (21:32 +0100)] 
Testsuite: accept output for T10999 (#10999)

3 years agoMake T10970a non-dependent on GCC version.
Edward Z. Yang [Tue, 27 Oct 2015 17:42:51 +0000 (10:42 -0700)] 
Make T10970a non-dependent on GCC version.

Signed-off-by: Edward Z. Yang <>
3 years agoFix the DYNAMIC_GHC_PROGRAMS=NO build on Mac/Windows
Reid Barton [Tue, 27 Oct 2015 17:26:54 +0000 (12:26 -0500)] 
Fix the DYNAMIC_GHC_PROGRAMS=NO build on Mac/Windows

LEADING_UNDERSCORE is defined in a header file, so we need to #include
that file where we use LEADING_UNDERSCORE.

Reviewed By: austin

Differential Revision:

3 years agoMake worker-wrapper optional
Christiaan Baaij [Tue, 27 Oct 2015 15:21:27 +0000 (10:21 -0500)] 
Make worker-wrapper optional

Add -fworker-wrapper flag which enables the worker-wrapper transformation. It
is implied by -O.

The expected users of this flag, which includes myself, are GHC API users.  In
my Haskell-to-Hardware compiler, which uses the GHC API, I have seen no
benifits of the worker-wrapper transformation. It does however induce longer
compilation times.

Further discussion can be seen here:

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #11020

3 years agoDynFlags: Yet one more fix
Ben Gamari [Tue, 27 Oct 2015 15:17:46 +0000 (16:17 +0100)] 
DynFlags: Yet one more fix

3 years agoSort field labels before fingerprint hashing
Bartosz Nitka [Tue, 27 Oct 2015 15:19:48 +0000 (10:19 -0500)] 
Sort field labels before fingerprint hashing

`fsEnvElts :: FastStringEnv a -> [a]` returns a list of `[a]` in the order of
`Unique`s which is arbitrary. In this case it gives a list of record fields in
arbitrary order, from which we then extract the field labels to contribute to
the record fingerprint. The arbitrary ordering of field labels introduces
unnecessary nondeterminism in interface files as demonstrated by the test case.

We sort `FastString` here. It's safe, because the only way that the `Unique`
associated with the `FastString` is used in comparison is for equality. If the
`Unique`s are different it fallbacks to comparing the actual `ByteString`.

Reviewed By: ezyang, thomie, bgamari, austin

Differential Revision:

GHC Trac Issues: #4012

3 years agoDynFlags: Fix more merge errors
Ben Gamari [Tue, 27 Oct 2015 14:59:00 +0000 (15:59 +0100)] 
DynFlags: Fix more merge errors

3 years agoFix "Use correct documentation flag for freverse-errors"
Ben Gamari [Tue, 27 Oct 2015 14:53:20 +0000 (15:53 +0100)] 
Fix "Use correct documentation flag for freverse-errors"

This fixes commit d1d8704cb3d003315177fad1394fce49f98fb1a2,
which somehow was mangled during merge.

3 years agoMake it possible to have different UniqSupply strategies
Bartosz Nitka [Tue, 27 Oct 2015 14:17:32 +0000 (15:17 +0100)] 
Make it possible to have different UniqSupply strategies

To get reproducible/deterministic builds, the way that the Uniques are
assigned shouldn't matter. This allows to test for that.

It add 2 new flags:

* `-dinitial-unique`
* `-dunique-increment`

And by varying these you can get interesting effects:

* `-dinitial-unique=0 -dunique-increment 1` - current sequential

* `-dinitial-unique=16777215 -dunique-increment -1` - UniqSupply that
  generates in decreasing order

* `-dinitial-unique=1 -dunique-increment PRIME` - where PRIME big enough
  to overflow often - nonsequential order

I haven't proven the usefullness of the last one yet and it's the reason
why we have to mask the bits with `0xFFFFFF` in `genSym`, so I can
remove it if it becomes contentious.

Test Plan: validate on harbormaster

Reviewers: simonmar, austin, ezyang, bgamari

Reviewed By: austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoUse correct documentation flag for freverse-errors
Siddhanathan Shanmugam [Tue, 27 Oct 2015 14:08:41 +0000 (15:08 +0100)] 
Use correct documentation flag for freverse-errors

Reviewers: austin, thomie, bgamari

Reviewed By: bgamari

Differential Revision:

GHC Trac Issues: #10848

3 years agomanpage: Mark as orphan document
Ben Gamari [Tue, 27 Oct 2015 12:16:47 +0000 (13:16 +0100)] 
manpage: Mark as orphan document

This silences warnings from Sphinx of the form,

    docs/users_guide/ghc.rst:: WARNING: document isn't included in any toctree

3 years agoZonk properly when checkig pattern synonyms
Simon Peyton Jones [Tue, 27 Oct 2015 13:27:42 +0000 (13:27 +0000)] 
Zonk properly when checkig pattern synonyms

Fixes Trac #10997

Merge to stable branch

3 years agoComments only
Simon Peyton Jones [Thu, 22 Oct 2015 15:05:46 +0000 (16:05 +0100)] 
Comments only

3 years agoAdd regression tests for #10045, #10999
Simon Peyton Jones [Thu, 22 Oct 2015 15:04:39 +0000 (16:04 +0100)] 
Add regression tests for #10045, #10999

3 years agoBuild system: comments only [skip ci]
Thomas Miedema [Mon, 26 Oct 2015 08:29:12 +0000 (09:29 +0100)] 
Build system: comments only [skip ci]

3 years agoImplement MIN_VERSION and VERSION macros natively in GHC.
Edward Z. Yang [Mon, 26 Oct 2015 19:48:36 +0000 (20:48 +0100)] 
Implement MIN_VERSION and VERSION macros natively in GHC.

Test Plan: validate

Reviewers: austin, thomie, bgamari

Reviewed By: thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10970

3 years agoAdd flag to reverse errors in GHC/GHCi
Siddhanathan Shanmugam [Mon, 26 Oct 2015 19:42:43 +0000 (20:42 +0100)] 
Add flag to reverse errors in GHC/GHCi

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10848

3 years agoRemove cygwin32_HOST_OS #ifdefs
Erik de Castro Lopo [Mon, 26 Oct 2015 19:42:30 +0000 (20:42 +0100)] 
Remove cygwin32_HOST_OS #ifdefs

Build system support for Cygwin was removed in b6be81b841.

Test Plan:
 - Validate on x86_64/linux
 - Cross-compile rts/RtsSymbols.c and rts/Linker.c to Windows using the
   i686-w64-mingw32-gcc and x86_64-w64-mingw32-gcc cross compilers.

Reviewers: hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoFix a typo in the User's Guide ReST intro
Bartosz Nitka [Mon, 26 Oct 2015 19:42:18 +0000 (20:42 +0100)] 
Fix a typo in the User's Guide ReST intro

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agobase: Add Haddocks to GHC.RTS.Flags
Ben Gamari [Mon, 26 Oct 2015 18:10:50 +0000 (19:10 +0100)] 
base: Add Haddocks to GHC.RTS.Flags

3 years agoRemove redundant typedef
Gabor Greif [Mon, 26 Oct 2015 10:09:04 +0000 (11:09 +0100)] 
Remove redundant typedef

$ git grep -n "typedef struct LibDwSession_ "
rts/Libdw.c:63:typedef struct LibDwSession_ LibDwSession;
rts/Libdw.h:22:typedef struct LibDwSession_ LibDwSession;

This trips up (e.g.) GCC v4.4.7.

3 years agoAdd testcase for #10370
Ben Gamari [Mon, 26 Oct 2015 08:42:44 +0000 (09:42 +0100)] 
Add testcase for #10370

Test Plan: Validate.

Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10370

3 years agoProvide a utility to check API Annotations
Alan Zimmerman [Sun, 25 Oct 2015 19:19:38 +0000 (20:19 +0100)] 
Provide a utility to check API Annotations

It is difficult for GHC developers to know if they have broken the API

This patch provides a utility that can be used as a test to show up
errors in the API Annotations.

It is based on the current tests for ghc-api/annotations which can parse
a file using the just-built GHC API, and check that no annotations are
disconnected from the ParsedSource in the output.

In addition, it should be able to dump the annotations to a file, so a
new feature developer can check that all changes to the parser do
provide annotations.

Trac ticket: #10917

Test Plan: ./validate

Reviewers: hvr, thomie, austin, bgamari

Reviewed By: bgamari

Differential Revision:

GHC Trac Issues: #10917

3 years agorts/RtsSymbols.c: Fix Windows build
Erik de Castro Lopo [Sun, 25 Oct 2015 00:43:17 +0000 (11:43 +1100)] 
rts/RtsSymbols.c: Fix Windows build

Test Plan:
 - Build whole of GHC on Linux.
 - Cross-compile rts/RtsSymbols.c and rts/Linker.c to Windows using the
   i686-w64-mingw32-gcc and x86_64-w64-mingw32-gcc cross compilers.

Reviewers: bgamari, awson, austin

Subscribers: thomie

Differential Revision:

3 years agorts/Linker.c: Convert #if/#else to if/else
Erik de Castro Lopo [Sat, 24 Oct 2015 00:56:16 +0000 (11:56 +1100)] 
rts/Linker.c: Convert #if/#else to if/else

Test Plan: validate

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision:

4 years agorts/Linker.c: Split RTS symbols out into separate file
Erik de Castro Lopo [Sat, 24 Oct 2015 16:27:06 +0000 (18:27 +0200)] 
rts/Linker.c:  Split RTS symbols out into separate file

Pull the RtsSymbolVal typedef and rtsSyms[] array out into a separate
header and C file. No change in functionality.

Test Plan: validate

Reviewers: simonmar, austin, bgamari

Subscribers: Phyx, thomie

Differential Revision:

4 years agoUpdate example GHCi startup
Gabor Greif [Sat, 24 Oct 2015 11:19:09 +0000 (13:19 +0200)] 
Update example GHCi startup

4 years agouse Proxy instead of undefined -- we already dropped support for 7.6
Ömer Sinan Ağacan [Sat, 24 Oct 2015 10:05:41 +0000 (12:05 +0200)] 
use Proxy instead of undefined -- we already dropped support for 7.6

Reviewers: austin, goldfire, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years Fix autotool warnings
Erik de Castro Lopo [Sat, 24 Oct 2015 09:53:06 +0000 (11:53 +0200)] Fix autotool warnings

Test Plan: perl boot and check for warnings

Reviewers: niteria, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agotypo in comments: s/selectg/select/
Sergei Trofimovich [Sat, 24 Oct 2015 09:38:37 +0000 (10:38 +0100)] 
typo in comments: s/selectg/select/

Signed-off-by: Sergei Trofimovich <>
4 years agoSupport more sphinx-build versions in configure script
Bartosz Nitka [Sat, 24 Oct 2015 00:12:16 +0000 (02:12 +0200)] 
Support more sphinx-build versions in configure script

`sphinx-build` on CentOS
(`python-sphinx10-doc-1.0.8-1.el6.centos.noarch`) responds with this on
$ sphinx-1.0-build --version
Sphinx v1.0.8
Usage: /usr/bin/sphinx-1.0-build [options] sourcedir outdir
Options: -b <builder> -- builder to use; default is html
         -a        -- write all files; default is to only write new and
changed files
* without -a and without filenames, write new and changed files.
* with -a, write all files.
* with filenames, write these.

This should make it work for the old and the new format.

Test Plan:
$ echo "Sphinx (sphinx-build) 1.0.1" | sed 's/Sphinx\(
(sphinx-build)\)\? v\?\([0-9]\.[0-9]\.[0-9]\)/\2/'
$ echo "Sphinx v1.0.1" | sed 's/Sphinx\( (sphinx-build)\)\?

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, erikd

Differential Revision:

4 years agoFix broken .arclint
Bartosz Nitka [Fri, 23 Oct 2015 22:54:10 +0000 (00:54 +0200)] 
Fix broken .arclint

Test Plan: the linter works now

Reviewers: ezyang, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agogitignore: Ignore sphinx doctrees directories
Ben Gamari [Fri, 23 Oct 2015 10:06:59 +0000 (12:06 +0200)] 
gitignore: Ignore sphinx doctrees directories

4 years agoVerify minimum required version of sphinx-build
Ben Gamari [Fri, 23 Oct 2015 10:27:35 +0000 (12:27 +0200)] 
Verify minimum required version of sphinx-build

CentOS 6.6 includes sphinx-build 0.6.6 which is woefully inadequate to
build the users guide. In particular it fails as it lacks
`sphinx.ext.extlinks`, which was introduced in 1.0.0. Looking at the
changelog it appears that 1.0.0 ought to work.

4 years agobase: Note platform dependence of registerFd
Ben Gamari [Fri, 23 Oct 2015 15:09:31 +0000 (17:09 +0200)] 
base: Note platform dependence of registerFd

Just a documentation change. Fixes #10736.

4 years agoarclint: ReST doesn't need ArcanistMergeConflictLinter
Ben Gamari [Fri, 23 Oct 2015 15:25:59 +0000 (17:25 +0200)] 
arclint: ReST doesn't need ArcanistMergeConflictLinter

The section heading syntax trips up this linter. Fixes #10979.

4 years agoAdd testcase for #10426
Ben Gamari [Fri, 23 Oct 2015 15:42:11 +0000 (17:42 +0200)] 
Add testcase for #10426

4 years agoQuote GHC_PKG in Makefile.
Edward Z. Yang [Thu, 22 Oct 2015 20:10:43 +0000 (13:10 -0700)] 
Quote GHC_PKG in Makefile.

Signed-off-by: Edward Z. Yang <>
4 years agoQuote GHC path in configure so we can deal with multiple spaces.
Edward Z. Yang [Thu, 22 Oct 2015 07:01:41 +0000 (00:01 -0700)] 
Quote GHC path in configure so we can deal with multiple spaces.

Signed-off-by: Edward Z. Yang <>
4 years agoSuggest chmod 755 instead of 644
Ben Gamari [Thu, 22 Oct 2015 15:35:18 +0000 (17:35 +0200)] 
Suggest chmod 755 instead of 644

Previous suggestion would clear executable bit, meaning directory
couldn't be entered. Fixes #11003.

Test Plan: Read message.

Reviewers: austin, thomie, dfeuer

Reviewed By: thomie, dfeuer

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11003

4 years agoMake stronglyConnCompFromEdgedVertices deterministic
Bartosz Nitka [Thu, 22 Oct 2015 13:30:56 +0000 (15:30 +0200)] 
Make stronglyConnCompFromEdgedVertices deterministic

This makes it so the result of computing SCC's depends on the order
the nodes were passed to it, but not on the order on the user provided
key type.
The key type is usually `Unique` which is known to be nondeterministic.

Test Plan:
`text` and `aeson` become deterministic after this

Compare compile time for `text`:
$ cabal get text && cd text* && cabal sandbox init && cabal install
--dependencies-only && time cabal build
real    0m59.459s
user    0m57.862s
sys     0m1.185s
$ cabal clean && time cabal build
real    1m0.037s
user    0m58.350s
sys     0m1.199s
$ cabal clean && time cabal build
real    0m57.634s
user    0m56.118s
sys     0m1.202s
$ cabal get text && cd text* && cabal sandbox init && cabal install
--dependencies-only && time cabal build
real    0m59.867s
user    0m58.176s
sys     0m1.188s
$ cabal clean && time cabal build
real    1m0.157s
user    0m58.622s
sys     0m1.177s
$ cabal clean && time cabal build
real    1m0.950s
user    0m59.397s
sys     0m1.083s

Reviewers: ezyang, simonmar, austin, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

4 years agoAdd missing stderr file
Ben Gamari [Thu, 22 Oct 2015 13:29:10 +0000 (15:29 +0200)] 
Add missing stderr file

4 years agorts/Schedule.c: remove unused variable
Ömer Sinan Ağacan [Thu, 22 Oct 2015 11:41:48 +0000 (13:41 +0200)] 
rts/Schedule.c: remove unused variable

Differential Revision:

4 years agoSuggest enabling PatternSynonyms (#10943)
Moritz Kiefer [Thu, 22 Oct 2015 11:40:41 +0000 (13:40 +0200)] 
Suggest enabling PatternSynonyms (#10943)

Suggest enabling PatternSynonyms if we find an invalid
signature that looks like a pattern synonym.

Reviewed By: austin, thomie

Differential Revision:

4 years agoAdd another test for #10549
Ben Gamari [Thu, 22 Oct 2015 11:34:30 +0000 (13:34 +0200)] 
Add another test for #10549

4 years agoStop the pipeline when it doesn't need to be run.
Edward Z. Yang [Tue, 20 Oct 2015 06:53:33 +0000 (23:53 -0700)] 
Stop the pipeline when it doesn't need to be run.

Signed-off-by: Edward Z. Yang <>
4 years agoRemove old trace statement
Richard Eisenberg [Wed, 21 Oct 2015 18:08:12 +0000 (14:08 -0400)] 
Remove old trace statement

4 years agoFix breakage in the GHCi debugger
Simon Marlow [Wed, 21 Oct 2015 13:30:06 +0000 (14:30 +0100)] 
Fix breakage in the GHCi debugger

There was a broken offset calculation that only worked when the
sections of the binary were in a particular order, and this
broke (sometimes) after we started mapping the sections separately in
the linker (see D975).

Test Plan: ghci debugger tests now work with DYNAMIC_GHC_PROGRAMS=NO

Reviewers: austin, hvr, bgamari, erikd

Reviewed By: bgamari

Subscribers: Phyx, thomie, trommler

Differential Revision:

GHC Trac Issues: #10994

4 years agoFix caching of pagesize
Simon Marlow [Wed, 21 Oct 2015 09:42:57 +0000 (10:42 +0100)] 
Fix caching of pagesize

Summary: Spotted by @erikd

Test Plan: validate

Reviewers: austin, bgamari, erikd

Subscribers: thomie, erikd

Differential Revision:

4 years agoTestsuite: add test for #10997
Thomas Miedema [Wed, 21 Oct 2015 12:31:39 +0000 (14:31 +0200)] 
Testsuite: add test for #10997

4 years agoExtended default rules now specialize Foldable, Traversable to [] (#10971)
David Kraeutmann [Tue, 20 Oct 2015 20:39:51 +0000 (22:39 +0200)] 
Extended default rules now specialize Foldable, Traversable to [] (#10971)

Default rules deliberately accept any kind.

Reviewed By: simonpj, thomie, goldfire

Differential Revision:

4 years agoReject top-level typed TH splices. Fixes #10945
Jan Stolarek [Tue, 20 Oct 2015 12:09:13 +0000 (14:09 +0200)] 
Reject top-level typed TH splices. Fixes #10945

When TemplateHaskell language extension is enabled it is valid to have
top-level expressions.  Each such expression is treated as a contents
of a splice.  The problem arises with typed splices.  They are not valid
at the top level and therefore we should interpret them not as a splice
but as a top-level expression (aka. implicit splice).  So saying:


is equivalent of:

$( $$foo )

This patch makes sure that this is indeed the case.  Until now we
incorrectly treated typed splices as explicit splices.

4 years agoTestsuite Windows: don't use forward slashes in topdir path
Thomas Miedema [Mon, 19 Oct 2015 15:23:44 +0000 (17:23 +0200)] 
Testsuite Windows: don't use forward slashes in topdir path

Changing backwards slashes to forward slashes apparently confuses
msys2/mingw magic path handling. I don't quite understand why, but this
fixes it.

Test Plan: on Windows, make sure PATH does not contain
'inplace/mingw/bin' (let the testsuite driver add it), then run: make
TEST='ghcilink003 ghcilink006'. Before this patch, it would fail.

Reviewed by: Phyx, bgamari, austin

Differential Revision:

4 years agoSystools.hs: Improve detection of GCC and Clang
Erik de Castro Lopo [Sat, 17 Oct 2015 08:33:38 +0000 (19:33 +1100)] 
Systools.hs: Improve detection of GCC and Clang

Test Plan: Build on Debian using `--with-gcc=clang`

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10981

4 years agobase: Have the argument of mask restore the state.
Facundo Domínguez [Mon, 19 Oct 2015 16:16:55 +0000 (18:16 +0200)] 
base: Have the argument of mask restore the state.

The implementation of `mask` and `uninterruptibleMask` assumed so far
that the restore argument would be called in a context with the same
masking state as that set by `mask` or `uninterruptibleMask`.

This patch has the restore argument restore the masking, whatever the
current masking state is.

Test Plan: validate

Reviewers: simonmar, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, qnikst

Differential Revision:

GHC Trac Issues: #10149

4 years agoDriver: `ghci -e` should behave like `ghc -e` (#9360)
Thomas Miedema [Sat, 17 Oct 2015 10:15:32 +0000 (12:15 +0200)] 
Driver: `ghci -e` should behave like `ghc -e` (#9360)

Patch by lukyanov.

Reviewed by: bgamari

Differential Revision:

4 years agofix RTS linker compilation failure on Solaris
Karel Gardas [Sun, 18 Oct 2015 20:41:40 +0000 (22:41 +0200)] 
fix RTS linker compilation failure on Solaris

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision:

4 years agotemplate-haskell: set explicit return=pure
Herbert Valerio Riedel [Sun, 18 Oct 2015 09:53:23 +0000 (11:53 +0200)] 
template-haskell: set explicit return=pure

This fixups a thinko in c6781a5064049e0a7c17c1f2239567a3c44955af

4 years agoMRP-refactor `GHCi` Applicative/Monad instance
Herbert Valerio Riedel [Sun, 18 Oct 2015 07:37:43 +0000 (09:37 +0200)] 
MRP-refactor `GHCi` Applicative/Monad instance

As GHCi is compiled by stage1+ GHC only, we can
drop the explicit `return` definition rightaway.

4 years agotemplate-haskell: MRP-refactor Applicative/Monad instances
Herbert Valerio Riedel [Sun, 18 Oct 2015 07:20:30 +0000 (09:20 +0200)] 
template-haskell: MRP-refactor Applicative/Monad instances

As `template-haskell` is compiled by stage1+ GHC only, we can
drop the explicit `return` definition rightaway.

4 years agoghc-pkg: Express return-method in terms of pure
Herbert Valerio Riedel [Sun, 18 Oct 2015 07:18:33 +0000 (09:18 +0200)] 
ghc-pkg: Express return-method in terms of pure

4 years agoSignals: Always install SIGUSR2 handler
Ben Gamari [Sat, 17 Oct 2015 22:07:15 +0000 (00:07 +0200)] 
Signals: Always install SIGUSR2 handler

Even if libdw isn't available.

4 years agoCmmParse: Clarify description of calling convention
Ben Gamari [Fri, 2 Oct 2015 21:49:35 +0000 (23:49 +0200)] 
CmmParse: Clarify description of calling convention

4 years agoMake Monad/Applicative instances MRP-friendly
Herbert Valerio Riedel [Sat, 17 Oct 2015 14:47:51 +0000 (16:47 +0200)] 
Make Monad/Applicative instances MRP-friendly

This patch refactors pure/(*>) and return/(>>) in MRP-friendly way, i.e.
such that the explicit definitions for `return` and `(>>)` match the
MRP-style default-implementation, i.e.

  return = pure


  (>>) = (*>)

This way, e.g. all `return = pure` definitions can easily be grepped and
removed in GHC 8.1;

Test Plan: Harbormaster

Reviewers: goldfire, alanz, bgamari, quchen, austin

Reviewed By: quchen, austin

Subscribers: thomie

Differential Revision:

4 years agoSignals: Print backtrace on SIGUSR2
Ben Gamari [Sat, 17 Oct 2015 14:45:26 +0000 (16:45 +0200)] 
Signals: Print backtrace on SIGUSR2

This uses the backtrace support introduced in D1196 to provide
backtraces from Haskell processes when SIGUSR2 is thrown.

Test Plan: Need to add a test.

Reviewers: scpmw, simonmar, Tarrasch, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

4 years agoLibdw: Add libdw-based stack unwinding
Ben Gamari [Sat, 17 Oct 2015 14:44:01 +0000 (16:44 +0200)] 
Libdw: Add libdw-based stack unwinding

This adds basic support to the RTS for DWARF-assisted unwinding of the
Haskell and C stack via libdw. This only adds the infrastructure;
consumers of this functionality will be introduced in future diffs.

Currently we are carrying the initial register collection code in
Libdw.c but this will eventually make its way upstream to libdw.

Test Plan: See future patches

Reviewers: Tarrasch, scpmw, austin, simonmar

Reviewed By: austin, simonmar

Subscribers: simonmar, thomie, erikd

Differential Revision:

GHC Trac Issues: #10656

4 years agoMove Control.Monad.IO.Class to base from transformers
RyanGlScott [Sat, 17 Oct 2015 14:43:22 +0000 (16:43 +0200)] 
Move Control.Monad.IO.Class to base from transformers

See Trac #10773

Remove Control.Monad.IO.Class from `transformers`. Updates
`transformers` submodule.

See Trac #10773

Test Plan: ./validate

Reviewers: ekmett, hvr, bgamari, austin

Reviewed By: hvr, bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10773

4 years agoSilence the linker on Windows so tests pass
Tamar Christina [Sat, 17 Oct 2015 13:19:56 +0000 (15:19 +0200)] 
Silence the linker on Windows so tests pass

Silence the unconditional debugBelch statements recently added to HEAD
which on Windows cause debug information to always be printed.

Differential Revision:

4 years agoBuild system: fix `make -j1` (#10973)
Thomas Miedema [Fri, 16 Oct 2015 18:28:05 +0000 (20:28 +0200)] 
Build system: fix `make -j1` (#10973)

There are multiple hacks all over the build system to account for the
fact that the ghc package uses different build subdirectories
(stage1/stage2) than the other packages (dist/dist-install).

One such hack filtered on 'ghc%', with the intention of filtering the
ghc package only. After renaming bin-package-db to ghc-boot
(d2f9972a35ce05ceb8a78893e433ef1df06f73ef, Phab:D1313, #10796), ghc-boot
also got caught in the hack, which broke the build when running without

This patch replaces the before mentioned hack by a different one, such
that filtering on 'ghc%' is no longer necessary. See Note [inconsistent

Reviewed by: austin

Differential Revision:

4 years agobase: MINIMAL pragmas for Arrow/ArrowChoice
Austin Seipp [Fri, 16 Oct 2015 20:56:18 +0000 (15:56 -0500)] 
base: MINIMAL pragmas for Arrow/ArrowChoice

Summary: This was left off in the previous commits.

Signed-off-by: Austin Seipp <>
Reviewed By: ekmett

Differential Revision:

4 years agobase: changelog entries for Arrow/ArrowChoice
Austin Seipp [Fri, 16 Oct 2015 19:27:52 +0000 (14:27 -0500)] 
base: changelog entries for Arrow/ArrowChoice

Signed-off-by: Austin Seipp <>
4 years agoAllow left ∨ (+++) as minimal definition of ArrowChoice instance
M Farkas-Dyck [Wed, 23 Sep 2015 17:35:34 +0000 (10:35 -0700)] 
Allow left ∨ (+++) as minimal definition of ArrowChoice instance

See #10911.

Reviewers: ekmett

Signed-off-by: Austin Seipp <>
4 years agoAdd typed holes support in Template Haskell.
Jan Stolarek [Tue, 8 Sep 2015 17:19:44 +0000 (19:19 +0200)] 
Add typed holes support in Template Haskell.

Fixes #10267. Typed holes in typed Template Haskell currently don't work.
See #10945 and #10946.

4 years agoImplement DuplicateRecordFields
Adam Gundry [Fri, 16 Oct 2015 15:08:31 +0000 (16:08 +0100)] 
Implement DuplicateRecordFields

This implements DuplicateRecordFields, the first part of the
OverloadedRecordFields extension, as described at

This includes fairly wide-ranging changes in order to allow multiple
records within the same module to use the same field names.  Note that
it does *not* allow record selector functions to be used if they are
ambiguous, and it does not have any form of type-based disambiguation
for selectors (but it does for updates). Subsequent parts will make
overloading selectors possible using orthogonal extensions, as
described on the wiki pages.  This part touches quite a lot of the
codebase, and requires changes to several GHC API datatypes in order
to distinguish between field labels (which may be overloaded) and
selector function names (which are always unique).

The Haddock submodule has been adapted to compile with the GHC API
changes, but it will need further work to properly support modules
that use the DuplicateRecordFields extension.

Test Plan: New tests added in testsuite/tests/overloadedrecflds; these
will be extended once the other parts are implemented.

Reviewers: goldfire, bgamari, simonpj, austin

Subscribers: sjcjoosten, haggholm, mpickering, bgamari, tibbe, thomie,

Differential Revision:

4 years agoRemove dead function patSynTyDetails
Simon Peyton Jones [Fri, 16 Oct 2015 11:08:35 +0000 (12:08 +0100)] 
Remove dead function patSynTyDetails

And that allows us to remove the nasty import of HsBinds,
which has no business in this module.

4 years agorts/Linker.c : Fix armhf build (#10977)
Erik de Castro Lopo [Fri, 16 Oct 2015 06:00:43 +0000 (17:00 +1100)] 
rts/Linker.c : Fix armhf build (#10977)

Test Plan: Validate on x86_64, PowerPC and Arm

Reviewers: simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10977

4 years agoFix windows build after D975
Tamar Christina [Fri, 16 Oct 2015 07:46:59 +0000 (09:46 +0200)] 
Fix windows build after D975

Add a missing #ifdef

Reviewed By: simonmar

Differential Revision:

4 years agoELF/x86_64: map object file sections separately into the low 2GB
Simon Marlow [Thu, 15 Oct 2015 15:17:06 +0000 (16:17 +0100)] 
ELF/x86_64: map object file sections separately into the low 2GB

On 64-bit ELF we need to link object files into the low 2GB due to the
small memory model.  Previously we would map the entire object file
using MAP_32BIT, but the object file can consist of 75% or more
symbols, which only need to be present during linking, so this is
wasteful.  In our particular application, we're already running out of
space here.

This patch changes the way we load object files on ELF platforms so
that the object is first mapped above the 2GB boundary, parsed, and
then the important sections are re-mapped into the low 2GB area.

Test Plan:
(also needs testing on OS X & Windows, preferably 32 & 64 bit)

Reviewers: Phyx, trommler, bgamari, austin

Subscribers: hsyl20, thomie, bgamari

Differential Revision:

4 years agoMinor stylistic update.
Edward Z. Yang [Thu, 15 Oct 2015 04:07:03 +0000 (21:07 -0700)] 
Minor stylistic update.

Signed-off-by: Edward Z. Yang <>
4 years agoRename PACKAGE_KEY and LIB_NAME in build system.
Edward Z. Yang [Sun, 11 Oct 2015 20:41:20 +0000 (13:41 -0700)] 
Rename PACKAGE_KEY and LIB_NAME in build system.

Signed-off-by: Edward Z. Yang <>
4 years agoRename package key to unit ID, and installed package ID to component ID.
Edward Z. Yang [Sun, 11 Oct 2015 18:03:10 +0000 (11:03 -0700)] 
Rename package key to unit ID, and installed package ID to component ID.

Comes with Haddock submodule update.

Signed-off-by: Edward Z. Yang <>
4 years agoUpdate Cabal to HEAD, IPID renamed to Component ID.
Edward Z. Yang [Tue, 25 Aug 2015 18:24:28 +0000 (11:24 -0700)] 
Update Cabal to HEAD, IPID renamed to Component ID.

This commit contains a Cabal submodule update which unifies installed
package IDs and package keys under a single notion, a Component ID.
We update GHC to keep follow this unification.  However, this commit
does NOT rename installed package ID to component ID and package key to
unit ID; the plan is to do that in a companion commit.

    - Compiler info now has "Requires unified installed package IDs"

    - 'exposed' is now expected to contain unit keys, not IPIDs.

    - Shadowing is no more.  We now just have a very simple strategy
      to deal with duplicate unit keys in combined package databases:
      if their ABIs are the same, use the latest one; otherwise error.
      Package databases maintain the invariant that there can only
      be one entry of a unit ID.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin, bgamari, hvr, goldfire

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10714

4 years agoUser should use -package-id flag if value in question is IPID.
Edward Z. Yang [Sun, 11 Oct 2015 18:21:31 +0000 (11:21 -0700)] 
User should use -package-id flag if value in question is IPID.

Signed-off-by: Edward Z. Yang <>
4 years agoFix GHCi on Arm (#10375).
Erik de Castro Lopo [Sun, 11 Oct 2015 05:48:11 +0000 (16:48 +1100)] 
Fix GHCi on Arm (#10375).

Arm has two instruction sets, Arm and Thumb, and an execution mode for each.
Executing Arm code in Thumb mode or vice-versa will likely result in an
Illegal instruction exception.

Furthermore, Haskell code compiled via LLVM was generating Arm instructions
while C code compiled via GCC was generating Thumb code by default. When
these two object code types were being linked by the system linker, all was
fine, because the system linker knows how to jump and call from one
instruction set to the other.

The first problem was with GHCi's object code loader which did not know
about Thumb vs Arm. When loading an object file `StgCRun` would jump
into the loaded object which could change the mode causing a crash after
it returned. This was fixed by forcing all C code to generate Arm
instructions by passing `-marm` to GCC.

The second problem was the `mkJumpToAddr` function which was generating
Thumb instructions. Changing that to generate Arm instructions instead
results in a working GHCi on Arm.

Test Plan: validate on x86_64 and arm

Reviewers: bgamari, austin, hvr

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10375

4 years agotravis: use LLVM 3.7
Austin Seipp [Wed, 14 Oct 2015 00:14:01 +0000 (19:14 -0500)] 
travis: use LLVM 3.7

Signed-off-by: Austin Seipp <>
4 years agoSwitch to LLVM version 3.7
Erik de Castro Lopo [Fri, 9 Oct 2015 23:54:24 +0000 (10:54 +1100)] 
Switch to LLVM version 3.7

Before this commit, GHC only supported LLVM 3.6. Now it only supports
LLVM 3.7 which was released in August 2015. LLVM version 3.6 and earlier
do not work on AArch64/Arm64, but 3.7 does.

* Add CC_Ghc constructor to LlvmCallConvention.
* Replace `maxSupportLlvmVersion`/`minSupportLlvmVersion` with
  a single `supportedLlvmVersion` variable.
* Get `supportedLlvmVersion` from version specified in
* Drop llvmVersion field from DynFlags (no longer needed because only
  one version is supported).

Test Plan: Validate on x86_64 and arm

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10953

4 years agoAllow arr ∧ (first ∨ (***)) as minimal definition of Arrow instance
M Farkas-Dyck [Mon, 30 Mar 2015 03:57:46 +0000 (22:57 -0500)] 
Allow arr ∧ (first ∨ (***)) as minimal definition of Arrow instance

See #10216.

Signed-off-by: Austin Seipp <>