4 years agoInsert an empty line between two STG definitions in dump output.
Ömer Sinan Ağacan [Fri, 30 Oct 2015 18:54:10 +0000 (19:54 +0100)] 
Insert an empty line between two STG definitions in dump output.

(Simplifier and desugarer do this already)

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agoLinker: Clean up USE_MMAP usage
Erik de Castro Lopo [Fri, 30 Oct 2015 18:54:04 +0000 (19:54 +0100)] 
Linker: Clean up USE_MMAP usage

Test Plan: Validate on powerpc/linux, x86_64/linux and x86_64/darwin

Reviewers: austin, bgamari, thomie

Reviewed By: thomie

Subscribers: Phyx, thomie

Differential Revision:

4 years agoCmmParse: Expose popcnt operations
Ben Gamari [Fri, 30 Oct 2015 18:53:52 +0000 (19:53 +0100)] 
CmmParse: Expose popcnt operations

Make various population count operations available via C-- syntax
under the names %popcnt{8,16,32,64}. Fixes #11037.

Reviewers: simonmar, austin, ekmett

Reviewed By: austin, ekmett

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11037

4 years agoFix segfault due to reading non-existent memory
Simon Marlow [Fri, 30 Oct 2015 18:53:44 +0000 (19:53 +0100)] 
Fix segfault due to reading non-existent memory

It was possible to read non-existent memory, if we try to read the
srt_offset field of an info table when there is no SRT, and the info
table is right at the start of the text section.

This actually happened to me, I'm not sure why it never happened

Test Plan: validate

Reviewers: rwbarton, ezyang, austin, bgamari

Reviewed By: austin, bgamari

Subscribers: thomie

Differential Revision:

4 years agoBuild system: cabalise deriveConstants + genprimopcode
Thomas Miedema [Mon, 26 Oct 2015 12:30:07 +0000 (13:30 +0100)] 
Build system: cabalise deriveConstants + genprimopcode

This is needed for #10374 (but doesn't fix it yet).

Also rename DeriveConstants.hs to Main.hs, because the build
system has trouble with Main modules not called Main.hs.

Differential Revision:

4 years agoBuild system: cleanup a few .cabal files
Thomas Miedema [Tue, 27 Oct 2015 13:01:48 +0000 (14:01 +0100)] 
Build system: cleanup a few .cabal files

4 years agoBuild system: rename runghc.hs to Main.hs
Thomas Miedema [Tue, 27 Oct 2015 12:25:15 +0000 (13:25 +0100)] 
Build system: rename runghc.hs to Main.hs

The build system has trouble with Main modules not called Main.hs. This
change allows a hack in utils/runghc/ to be removed.

4 years agoDisambiguate record selectors by type signature
Adam Gundry [Fri, 30 Oct 2015 14:14:21 +0000 (14:14 +0000)] 
Disambiguate record selectors by type signature

This makes DuplicateRecordFields more liberal in when it will
accept ambiguous record selectors, making use of type information in a
similar way to updates. See Note [Disambiguating record fields] for more
details. I've also refactored how record updates are disambiguated.

Test Plan: New and amended tests in overloadedrecflds

Reviewers: simonpj, goldfire, bgamari, austin

Subscribers: thomie

Differential Revision:

4 years agointegerConstantFolding: when(compiler_debugged(), expect_broken(#11006))
Thomas Miedema [Fri, 30 Oct 2015 12:22:04 +0000 (13:22 +0100)] 
integerConstantFolding: when(compiler_debugged(), expect_broken(#11006))

4 years agoKill redundant import
Simon Peyton Jones [Fri, 30 Oct 2015 09:45:16 +0000 (09:45 +0000)] 
Kill redundant import

I don't really understand this.  GHC.hs had:

  module GHC( ...,  module HsSyn, ... ) where
    import HsSyn
    import qualified HsSyn -- hack as we want to reexport the whole module

GHC now reports the 'import qualified' line as redundant; and it certainly
is, because 'import HsSyn' brings everything into scope qualified *and*
unqualified.   I have no idea why the "hack" was necessary before, but
following my refactoring of tcg_used_gres (previous commit), it's reported
as redundant, so I've deleted it.

I'm making it a separate commit because it seems a bit mysterious and I
wanted to draw attention to it.

4 years agoRecord usage information using GlobalRdrElt
Simon Peyton Jones [Fri, 30 Oct 2015 09:41:47 +0000 (09:41 +0000)] 
Record usage information using GlobalRdrElt

This patch implements an improvment that I've wanted to do for ages, but
never gotten around to.

Unused imports are computed based on how imported entities occur (qualified,
unqualified).   This info was accumulated in tcg_used_rdrnames :: Set RdrName.
But that was a huge pain, and it got worse when we introduced duplicate
record fields.

The Right Thing is to record tcg_used_gres :: [GlobalRdrElt], which records
the GRE *after* filtering with pickGREs.  See Note [GRE filtering] in RdrName.
This is much, much bette.  This patch deletes quite a bit of code, and is
conceptually much easier to follow.

Hooray.  There should be no change in functionality.

4 years agoFix unused-import stuff in a better way
Simon Peyton Jones [Wed, 28 Oct 2015 17:16:55 +0000 (17:16 +0000)] 
Fix unused-import stuff in a better way

The fix for Trac #10890 in commit 1818b48, namely
   Fix incorrect import warnings when methods with identical names are imported
was wrong, as demonstrated by the new test T10890_2.  It suppressed
far too many warnings!

This patch fixes the original problem in a different way, by making
RdrName.greUsedRdrName a bit cleverer.

But this too is not really the Right Thing.  I think the Right Thing is
to store the /GRE/ in the tcg_used_rdrnames, not the /RdrName/.  That
would be a lot simpler and more direct.

But one step at a time.

4 years agoSwap prov/req in variable naming in Parser.y
Simon Peyton Jones [Wed, 28 Oct 2015 12:21:50 +0000 (12:21 +0000)] 
Swap prov/req in variable naming in Parser.y

This is a follow on to the patch for Trac #10928.
It's a local renaming of variables only; no change in behaviour.

4 years agoLinker: Fix type in m32_free_internal
Erik de Castro Lopo [Fri, 30 Oct 2015 04:07:21 +0000 (15:07 +1100)] 
Linker: Fix type in m32_free_internal

The code:

    uint64_t c = __sync_sub_and_fetch((uint64_t*)addr, 1);

was causing GCC to emit atomic instructions for 64 bit values which
are not available on PowerPC. However, since PowerPC only has a 32
bit address space, use of a 64 bit value is superflous.

Switching the type from `uint64_t` to `uintptr_t` should simply do
the correct thing on all 32 and 64 bit architectures.

Reviewers: austin, bgamari, simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11036

4 years agox86 codegen: don't generate location comments
Sergei Trofimovich [Thu, 29 Oct 2015 23:03:42 +0000 (23:03 +0000)] 
x86 codegen: don't generate location comments

The following source snippet 'module A where x */* y = 42'
when being compiled with '-g' option emits syntactically
invalid comment for GNU as:

        .align 8
        .loc 1 3 1 /* */* */

Fixed by not emitting comments at all. We already suppress
all asm comments in 'X86/Ppr.hs'.

Signed-off-by: Sergei Trofimovich <>
Test Plan: added test and check it works

Reviewers: scpmw, simonmar, austin, bgamari

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10667

4 years agoRevert "Generate Typeable info at definition sites"
Ben Gamari [Thu, 29 Oct 2015 16:41:34 +0000 (17:41 +0100)] 
Revert "Generate Typeable info at definition sites"

This reverts commit bef2f03e4d56d88a7e9752a7afd6a0a35616da6c.

This merge was botched

Also reverts haddock submodule.

4 years agoGenerate Typeable info at definition sites
Ben Gamari [Wed, 26 Aug 2015 16:24:34 +0000 (18:24 +0200)] 
Generate Typeable info at definition sites

This patch implements the idea floated in Trac #9858, namely that we
should generate type-representation information at the data type
declaration site, rather than when solving a Typeable constraint.

However, this turned out quite a bit harder than I expected. I still
think it's the right thing to do, and it's done now, but it was quite
a struggle.

See particularly

 * Note [Grand plan for Typeable] in TcTypeable (which is a new module)
 * Note [The overall promotion story] in DataCon (clarifies existing stuff)

The most painful bit was that to generate Typeable instances (ie
TyConRepName bindings) for every TyCon is tricky for types in ghc-prim

 * We need to have enough data types around to *define* a TyCon
 * Many of these types are wired-in

Also, to minimise the code generated for each data type, I wanted to
generate pure data, not CAFs with unpackCString# stuff floating about.

Three perf/compiler tests start to allocate quite a bit more. This isn't
surprising, because they all allocate zillions of data types, with
practically no other code, esp. T1969

 * T3294:   GHC allocates 110% more (filed #11030 to track this)
 * T1969:   GHC allocates 30% more
 * T4801:   GHC allocates 14% more
 * T5321FD: GHC allocates 13% more
 * T783:    GHC allocates 12% more
 * T9675:   GHC allocates 12% more
 * T5642:   GHC allocates 10% more
 * T9961:   GHC allocates 6% more

 * T9203:   Program allocates 54% less

I'm treating this as acceptable. The payoff comes in Typeable-heavy

Remaining to do

 * I think that "TyCon" and "Module" are over-generic names to use for
   the runtime type representations used in GHC.Typeable. Better might be
   "TrTyCon" and "TrModule". But I have not yet done this

 * Add more info the the "TyCon" e.g. source location where it was

 * Use the new "Module" type to help with Trac Trac #10068

 * It would be possible to generate TyConRepName (ie Typeable
   instances) selectively rather than all the time. We'd need to persist
   the information in interface files. Lacking a motivating reason I have
   not done this, but it would not be difficult.

As is so often the case, I ended up refactoring more than I intended.
In particular

 * In TyCon, a type *family* (whether type or data) is repesented by a
     * a algebraic data type (including data/newtype instances) is
       represented by AlgTyCon This wasn't true before; a data family
       was represented as an AlgTyCon. There are some corresponding
       changes in IfaceSyn.

     * Also get rid of the (unhelpfully named) tyConParent.

 * In TyCon define 'Promoted', isomorphic to Maybe, used when things are
   optionally promoted; and use it elsewhere in GHC.

 * Cleanup handling of knownKeyNames

 * Each TyCon, including promoted TyCons, contains its TyConRepName, if
   it has one. This is, in effect, the name of its Typeable instance.

Requires update of the haddock submodule.

Differential Revision:

4 years agoDynFlags: Add (another) missing hunk from D1360
Ben Gamari [Thu, 29 Oct 2015 14:42:39 +0000 (15:42 +0100)] 
DynFlags: Add (another) missing hunk from D1360

What a disaster this merge was.

4 years agoTcTyDecls: Remove redundant import of Applicative
Ben Gamari [Thu, 29 Oct 2015 15:12:17 +0000 (11:12 -0400)] 
TcTyDecls: Remove redundant import of Applicative

4 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

4 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:

4 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"

4 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.

4 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:

4 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 <>
4 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:

4 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:

4 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

4 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

4 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.

4 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:

4 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`

4 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)

4 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 <>
4 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:

4 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

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

4 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

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

4 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.

4 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

4 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

4 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

4 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

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

4 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

4 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]

4 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

4 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

4 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:

4 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:

4 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

4 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.

4 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

4 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

4 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:

4 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: