4 years agocompiler: de-lhs rename/
Austin Seipp [Wed, 3 Dec 2014 18:42:50 +0000 (12:42 -0600)] 
compiler: de-lhs rename/

Signed-off-by: Austin Seipp <>
4 years agocompiler: de-lhs prelude/
Austin Seipp [Wed, 3 Dec 2014 18:42:24 +0000 (12:42 -0600)] 
compiler: de-lhs prelude/

Signed-off-by: Austin Seipp <>
4 years agocompiler: de-lhs main/
Austin Seipp [Wed, 3 Dec 2014 18:41:58 +0000 (12:41 -0600)] 
compiler: de-lhs main/

Signed-off-by: Austin Seipp <>
4 years agoComments only
Simon Peyton Jones [Wed, 3 Dec 2014 13:38:55 +0000 (13:38 +0000)] 
Comments only

4 years agoMake annotations test case cleaning less aggressive
Joachim Breitner [Tue, 2 Dec 2014 22:56:52 +0000 (23:56 +0100)] 
Make annotations test case cleaning less aggressive

cf. a4ec0c92

4 years agoUpdate 32-bit performace numbers (has not been done for ages)
Simon Peyton Jones [Wed, 3 Dec 2014 07:58:22 +0000 (07:58 +0000)] 
Update 32-bit performace numbers (has not been done for ages)

4 years agoGenerate real (but empty) object files for signatures.
Edward Z. Yang [Tue, 2 Dec 2014 05:07:33 +0000 (21:07 -0800)] 
Generate real (but empty) object files for signatures.

It's not great, but it preserves a nice invariant that every Haskell
source file has an object file (we already have a hack in place ensure
this is the case for hs-boot files) and further ensures every package
has a library associated with it (which would not be the case if
the package had all signatures and we didn't make object files.)

Contains Cabal submodule update.

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

Reviewers: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

4 years agoDeclare official GitHub home of libraries/parallel
Herbert Valerio Riedel [Tue, 2 Dec 2014 21:35:36 +0000 (22:35 +0100)] 
Declare official GitHub home of libraries/parallel

Effective immediately, pushing to the `libraries/parallel` submodule
requires pushing via ssh://

4 years agoMake `read . show = id` for Data.Fixed (fix #9240)
Brian McKenna [Tue, 2 Dec 2014 16:53:38 +0000 (17:53 +0100)] 
Make `read . show = id` for Data.Fixed (fix #9240)

The QuickCheck property now succeeds:

    prop :: Fixed B7 -> Bool
    prop a = read (show a) == a

This changes the Show instance for Fixed to round up, rather than down
when calculating a digit. This needs to happen because Read also
rounds down:

    data B7

    instance HasResolution B7 where
      resolution _ = 128

    1 / 128 = 0.0078125

    read "0.007" = (0.000 :: Fixed B7)

Here is an example of the change to Show:

    showFixed False (0.009 :: Fixed B7)

    -- Broken: "0.007"
    -- Fixed:  "0.008"

And now Read can continue to round down:

    read "0.008" = (0.0078125 :: Fixed B7)

Reviewed By: hvr, ekmett

Differential Revision:

4 years agoMake Natural's (.|.) really an OR operation (#9818)
Herbert Valerio Riedel [Tue, 2 Dec 2014 16:51:36 +0000 (17:51 +0100)] 
Make Natural's (.|.) really an OR operation (#9818)

Currently it's an AND when at least one of the operands is big.

Reviewed By: hvr

Differential Revision:

4 years agoUnique-ify the names of top-level auxiliary bindings in derived instances (Trac ...
Simon Peyton Jones [Tue, 2 Dec 2014 15:13:32 +0000 (15:13 +0000)] 
Unique-ify the names of top-level auxiliary bindings in derived instances (Trac #7947)

The problem and its solution are explained in
   Note [Auxiliary binders]
in TcGenDeriv

4 years agoFix another bug in deriving( Data ) for data families; Trac #4896
Simon Peyton Jones [Tue, 2 Dec 2014 13:20:33 +0000 (13:20 +0000)] 
Fix another bug in deriving( Data ) for data families; Trac #4896

If we have

   data family D a
   data instance D (a,b,c) = ... deriving( Data )

then we want to generate

   instance ... => Data (D (a,b,c)) where
     dataCast1 x = gcast1 x

The "1" here comes from the kind of D.  But the kind of the
*representation* TyCon is

   data Drep a b c = ....

ie Drep :: * -> * -> * -> *

So we must look for the *family* TyCon in this (rather horrible)
dataCast1 / dataCast2 binding.

4 years agoMinor refactoring of Edward's recent orphans patch (Trac #2182)
Simon Peyton Jones [Tue, 2 Dec 2014 12:11:52 +0000 (12:11 +0000)] 
Minor refactoring of Edward's recent orphans patch (Trac #2182)

This patch is all small stuff
  - Move VisibleOrphanModules from Module to InstEnv (with the other orphan stuff)
  - Move Notes about orphans from IfaceSyn to InstEnv (ditto)
  - Make use of the record field names in InstEnvs

4 years agoTest Trac #4921
Simon Peyton Jones [Tue, 2 Dec 2014 12:08:57 +0000 (12:08 +0000)] 
Test Trac #4921

4 years agoRename Untouchables to TcLevel
Simon Peyton Jones [Tue, 2 Dec 2014 11:13:56 +0000 (11:13 +0000)] 
Rename Untouchables to TcLevel

This is a long-overdue renaming
   Untouchables  -->   TcLevel
It is renaming only; no change in functionality.

We really wanted to get this done before the 7.10 fork.

4 years agoRemove references to SynTyCon. Fixes #9812
Jan Stolarek [Tue, 2 Dec 2014 12:57:46 +0000 (13:57 +0100)] 
Remove references to SynTyCon. Fixes #9812

4 years agoComments and formatting in TyCon
Jan Stolarek [Tue, 2 Dec 2014 09:42:49 +0000 (10:42 +0100)] 
Comments and formatting in TyCon

4 years agoFix test suite race on T5462 (solves intermittent T5462Yes1/T5462Yes2/T5462No1 failure)
Edward Z. Yang [Tue, 2 Dec 2014 11:12:14 +0000 (03:12 -0800)] 
Fix test suite race on T5462 (solves intermittent T5462Yes1/T5462Yes2/T5462No1 failure)

Signed-off-by: Edward Z. Yang <>
4 years agoRevert "Make the linker API thread-safe"
Simon Peyton Jones [Tue, 2 Dec 2014 10:05:49 +0000 (10:05 +0000)] 
Revert "Make the linker API thread-safe"

This reverts commit b5e8b3b162b3ff15ae6caf1afc659565365f54a8.

I reverted it because one of these two patches
  9e6e4796437a7fc23e83605a45db9b2663570123 Add purgeObj()
  b5e8b3b162b3ff15ae6caf1afc659565365f54a8 Make the linker API thread-safe

causes a seg-fault on Windows.  The seg-fault happens immediately
the linker is invoked, in ghci or in Template Haskell.

I believe that it is the "linker API thread-safe" commit that causes
the seg-fault; it happens even if the "purgeObj" commit alone is
reverted.  But since the two patches mess with the same code, to
revert the "linker API" patch I had revert both.

4 years agoRevert "Add purgeObj() to remove the symbol table entries for an object"
Simon Peyton Jones [Mon, 1 Dec 2014 22:39:12 +0000 (22:39 +0000)] 
Revert "Add purgeObj() to remove the symbol table entries for an object"

This reverts commit 9e6e4796437a7fc23e83605a45db9b2663570123.

I reverted it because one of these two patches
  9e6e4796437a7fc23e83605a45db9b2663570123 Add purgeObj()
  b5e8b3b162b3ff15ae6caf1afc659565365f54a8 Make the linker API thread-safe

causes a seg-fault on Windows.  The seg-fault happens immediately
the linker is invoked, in ghci or in Template Haskell.

I believe that it is the "linker API thread-safe" commit that causes
the seg-fault; it happens even if the "purgeObj" commit alone is
reverted.  But since the two patches mess with the same code, to
revert the "linker API" patch I had revert both.

4 years agoUncomment the instance signatures, to activate the test
Simon Peyton Jones [Mon, 1 Dec 2014 22:29:18 +0000 (22:29 +0000)] 
Uncomment the instance signatures, to activate the test

4 years agoMention existence of 'Natural' in "Data.Word"
Herbert Valerio Riedel [Tue, 2 Dec 2014 07:38:38 +0000 (08:38 +0100)] 
Mention existence of 'Natural' in "Data.Word"

This replaces the note mentioning the lack of a `Natural`-type by a note
pointing to the new "Numeric.Natural" (#9818) module.

4 years agoFix malformed `configure` script
Herbert Valerio Riedel [Mon, 1 Dec 2014 20:30:10 +0000 (21:30 +0100)] 
Fix malformed `configure` script

Don't pass empty string `[]` as "action-if-not-given" to `AC_ARG_ENABLE()`
macro, as this would otherwise lead to an empty else-block in the resulting
bash `configure` script. This bug was introduced via cb0a503a.

This issue was pointed out by @christiaanb

Reviewed By: christiaanb

Differential Revision:

4 years agoFix parser for UNPACK pragmas
Simon Peyton Jones [Mon, 1 Dec 2014 17:07:48 +0000 (17:07 +0000)] 
Fix parser for UNPACK pragmas

   {-# NOUNPACK #-}
   {-# NOUNPACK #-} !
were being parsed the same way.  The former was wrong.

Thanks to Alan Zimmerman for pointing this out

4 years agoTest Trac #7908
Simon Peyton Jones [Mon, 1 Dec 2014 17:04:47 +0000 (17:04 +0000)] 
Test Trac #7908

Fixed by e6a2050ebb6da316aecec66a6795715fbab355ca
along with #9582, #9833

4 years agoRemove references to Parser.y.pp
Thomas Miedema [Mon, 1 Dec 2014 15:26:51 +0000 (09:26 -0600)] 
Remove references to Parser.y.pp

Commit 37d64a51348a803a1cf974d9e97ec9231215064a removed the preprocessing step
for Parser.y.

Reviewers: rodlogic, austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

4 years agoWibble to the "instance signatures" patch
Simon Peyton Jones [Mon, 1 Dec 2014 14:29:30 +0000 (14:29 +0000)] 
Wibble to the "instance signatures" patch

Sorry about this.  I somehow failed to include this one line in my patch.

4 years agoFix the handling of instance signatures (Trac #9582, #9833)
Simon Peyton Jones [Mon, 1 Dec 2014 11:43:20 +0000 (11:43 +0000)] 
Fix the handling of instance signatures (Trac #9582, #9833)

This finally solves the issue of instance-method signatures that are
more polymorphic than the instanted class method.

See Note [Instance method signatures] in TcInstDcls.

A very nice fix for the two Trac tickets above.

4 years agounlit compiler/types/ modules
Herbert Valerio Riedel [Mon, 1 Dec 2014 09:52:09 +0000 (10:52 +0100)] 
unlit compiler/types/ modules

Differential Revision:

4 years agounlit compiler/stranal/ modules
Herbert Valerio Riedel [Mon, 1 Dec 2014 07:45:16 +0000 (08:45 +0100)] 
unlit compiler/stranal/ modules

Reviewed By: austin

Differential Revision:

4 years agoRevert "Remove RAWCPP_FLAGS"
Herbert Valerio Riedel [Mon, 1 Dec 2014 07:37:09 +0000 (08:37 +0100)] 
Revert "Remove RAWCPP_FLAGS"

This reverts commit 460eebec65811c6a7bbe11645df322dda868e80d.

Thomas requested to revert the commit with the words:

> Please revert this commit, it is horribly wrong. I'll have a proper look
> later, but not supplying `-traditional` to the C preprocessor is the cause
> of #9828.

the reverted commit was related to #9094

4 years agoUnlit AsmCodeGen.lhs
Herbert Valerio Riedel [Sun, 30 Nov 2014 21:56:16 +0000 (22:56 +0100)] 
Unlit AsmCodeGen.lhs

Fwiw, this wasn't really a proper .lhs to begin with...

4 years agoUnlit compiler/cmm/ module(s)
Herbert Valerio Riedel [Sun, 30 Nov 2014 21:58:29 +0000 (15:58 -0600)] 
Unlit compiler/cmm/ module(s)

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter

Differential Revision:

4 years agoUpdate docs: instance visibility bug is no more.
Edward Z. Yang [Sun, 30 Nov 2014 19:45:08 +0000 (11:45 -0800)] 
Update docs: instance visibility bug is no more.

Signed-off-by: Edward Z. Yang <>
4 years agocompiler: fix trac issue #8815
Sivaram Balakrishnan [Sun, 30 Nov 2014 19:05:56 +0000 (13:05 -0600)] 
compiler: fix trac issue #8815

Summary: This patch changes the error message as suggested in trac issue #8815 comments.

Reviewers: jstolarek, austin

Reviewed By: jstolarek, austin

Subscribers: jstolarek, thomie, carter

Differential Revision:

GHC Trac Issues: #8815

4 years agocompiler: unlit profiling/ modules
Austin Seipp [Sun, 30 Nov 2014 19:05:45 +0000 (13:05 -0600)] 
compiler: unlit profiling/ modules

Summary: Signed-off-by: Austin Seipp <>

Test Plan: `./validate`

Reviewers: hvr

Subscribers: thomie, carter

Differential Revision:

4 years agoFix obscure problem with using the system linker (#8935)
Peter Trommler [Sun, 30 Nov 2014 18:00:39 +0000 (12:00 -0600)] 
Fix obscure problem with using the system linker (#8935)

In a statically linked GHCi symbol `environ` resolves to NULL when
called from a Haskell script.

When resolving symbols in a Haskell script we need to search the
executable program and its dependent (DT_NEEDED) shared libraries
first and then search the loaded libraries.

We want to be able to override functions in loaded libraries later.
Libraries must be opened with local scope (RTLD_LOCAL) and not global.
The latter adds all symbols to the executable program's symbols where
they are then searched in loading order. We want reverse loading order.

When libraries are loaded with local scope the dynamic linker
cannot use symbols in that library when resolving the dependencies
in another shared library. This changes the way files compiled to
object code must be linked into temporary shared libraries. We link
with the last temporary shared library created so far if it exists.
Since each temporary shared library is linked to the previous temporary
shared library the dynamic linker finds the latest definition of a
symbol by following the dependency chain.

See also Note [RTLD_LOCAL] for a summary of the problem and solution.

Cherry-picked commit 2f8b4c

Changed linker argument ordering

On some ELF systems GNU ld (and others?) default to
--as-needed and the order of libraries in the link

The last temporary shared library, must appear
before all other libraries. Switching the position
of extra_ld_inputs and lib_path_objs does that.

Fixes #8935 and #9186

Reviewers: austin, hvr, rwbarton, simonmar

Reviewed By: simonmar

Subscribers: thomie, carter, simonmar

Differential Revision:

GHC Trac Issues: #8935, #9186, #9480

4 years agoAdd bash completion and README
Lennart Kolmodin [Sun, 30 Nov 2014 17:59:59 +0000 (11:59 -0600)] 
Add bash completion and README

The bash completion is simple but works both for ghc and ghci.
The README explains to the user what they have to do to get
it working (hopefully nothing).

Test Plan: Follow the README, then enjoy the cli completion in your terminal!

Reviewers: austin

Subscribers: thomie, carter, jstolarek

Differential Revision:

GHC Trac Issues: #9005

4 years agoMore Tweaks for API Anotations
Alan Zimmerman [Sun, 30 Nov 2014 17:58:31 +0000 (11:58 -0600)] 
More Tweaks for API Anotations

Summary: Attaching semis to preceding AST element, not following

Test Plan: sh ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: cactus, thomie, carter

Differential Revision:

4 years agoShorten long lines in DynFlags, add details to ghci usage guide.
Lennart Kolmodin [Sun, 30 Nov 2014 17:58:17 +0000 (11:58 -0600)] 
Shorten long lines in DynFlags, add details to ghci usage guide.

Shorten long lines in DynFlags.
Describe --show-options in ghci usage guide.

Reviewers: jstolarek, austin

Reviewed By: jstolarek, austin

Subscribers: thomie, carter

Differential Revision:

GHC Trac Issues: #9259

4 years agoFilter instance visibility based on set of visible orphans, fixes #2182.
Edward Z. Yang [Tue, 18 Nov 2014 05:23:52 +0000 (21:23 -0800)] 
Filter instance visibility based on set of visible orphans, fixes #2182.

Amazingly, the fix for this very old bug is quite simple: when type-checking,
maintain a set of "visible orphan modules" based on the orphans list of
modules which we explicitly imported.  When we import an instance and it
is an orphan, we check if it is in the visible modules set, and if not,
ignore it.  A little bit of refactoring for when orphan-hood is calculated
happens so that we always know if an instance is an orphan or not.

For GHCi, we preinitialize the visible modules set based on the list of
interactive imports which are active.

Future work: Cache the visible orphan modules set for GHCi, rather than
recomputing it every type-checking round.  (But it's tricky what to do when you
/remove/ a module: you need a data structure a little more complicated than
just a set of modules.)

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

Reviewers: simonpj, austin

Subscribers: thomie, carter

Differential Revision:

GHC Trac Issues: #2182

4 years agoSpecial case interactive package key for mkQualPackage.
Edward Z. Yang [Tue, 18 Nov 2014 12:17:57 +0000 (04:17 -0800)] 
Special case interactive package key for mkQualPackage.

Signed-off-by: Edward Z. Yang <>
4 years agoReimplement `gcdExtInteger` (#9281)
Herbert Valerio Riedel [Sat, 29 Nov 2014 16:19:05 +0000 (17:19 +0100)] 
Reimplement `gcdExtInteger` (#9281)

`gcdExtInteger` has been available since `integer-gmp-0.5.1`
(added via 71e29584603cff38e7b83d3eb28b248362569d61)

4 years agoRe-implement `recipModInteger` (#9281)
Herbert Valerio Riedel [Sat, 29 Nov 2014 13:34:41 +0000 (14:34 +0100)] 
Re-implement `recipModInteger` (#9281)

This also exposes the following two type-specialised modular
exponentiation variants of `recipModInteger` useful for implementing a
`recipModNatural` operation.

  recipModBigNat :: BigNat -> BigNat -> BigNat
  recipModWord   :: Word#  -> Word#  -> Word#

`recipModInteger` has been available since `integer-gmp-0.5.1`
(added via 4d516855241b70eb687d95e3c121428de885e83e)

4 years agoImplement `GHC.Natural.powModNatural` (#9818)
Herbert Valerio Riedel [Sat, 29 Nov 2014 12:02:42 +0000 (13:02 +0100)] 
Implement `GHC.Natural.powModNatural` (#9818)

This makes use of the `powMod*` primitives provided by
`integer-gmp-1.0.0`. This is the `Natural`-version of the related
`GHC.Integer.GMP.Internals.powModInteger` operation.

The fallback implementation uses a square and multiply algorithm,
compared to which the optimized GMP-based implementation needs much less
allocations due to in-place mutation during the computation.

4 years agoRe-implement `powModInteger` (#9281)
Herbert Valerio Riedel [Sat, 29 Nov 2014 11:18:25 +0000 (12:18 +0100)] 
Re-implement `powModInteger`  (#9281)

This also exposes the following type-specialised modular exponentiation
variants of `powModInteger` useful for implementing a `powModNatural`

  powModBigNat     :: BigNat -> BigNat -> BigNat -> BigNat
  powModBigNatWord :: BigNat -> BigNat -> Word#  -> Word#
  powModWord       :: Word#  -> Word#  -> Word#  -> Word#

`powModInteger` has been available since `integer-gmp-0.5.1`
(added via 4d516855241b70eb687d95e3c121428de885e83e)

4 years agoMore static C initializer refactoring
Herbert Valerio Riedel [Sat, 29 Nov 2014 08:53:15 +0000 (09:53 +0100)] 
More static C initializer refactoring

A few instances were missed in 447f592697fef04d1e19a2045ec707cfcd1eb59f

Moreover, be more paranoid when testing for zero values, and try harder
to avoid passing denormalized zero `mpz_t`-values into GMP functions.

4 years agoFix testsuite failures after the PartialTypeSignatures merge
Thomas Winant [Sat, 29 Nov 2014 17:34:36 +0000 (11:34 -0600)] 
Fix testsuite failures after the PartialTypeSignatures merge

Properly detect insoluble wanteds

This used to be correct, but was recently incorrectly refactored.

Reviewers: austin, hvr

Reviewed By: austin, hvr

Subscribers: thomie, carter

Differential Revision:

4 years agoMinor refactoring of static C initializers
Herbert Valerio Riedel [Sat, 29 Nov 2014 08:30:46 +0000 (09:30 +0100)] 
Minor refactoring of static C initializers

4 years agoUpdate submodule 'haddock' to render 'pattern' as a keyword
Dr. ERDI Gergo [Sat, 29 Nov 2014 07:39:48 +0000 (15:39 +0800)] 
Update submodule 'haddock' to render 'pattern' as a keyword

4 years agoImplement Partial Type Signatures
Thomas Winant [Fri, 28 Nov 2014 22:08:10 +0000 (16:08 -0600)] 
Implement Partial Type Signatures

Add support for Partial Type Signatures, i.e. holes in types, see:

This requires an update to the Haddock submodule.

Test Plan: validate

Reviewers: austin, goldfire, simonpj

Reviewed By: simonpj

Subscribers: thomie, Iceland_jack, dominique.devriese, simonmar, carter, goldfire

Differential Revision:

GHC Trac Issues: #9478

4 years agoRename some of the functions in NameSet, to make the uniform with VarSet etc
Simon Peyton Jones [Fri, 28 Nov 2014 17:35:44 +0000 (17:35 +0000)] 
Rename some of the functions in NameSet, to make the uniform with VarSet etc

For ages NameSet has used different names,
  eg.   addOneToNameSet   rather than    extendNameSet
        nameSetToList     rather than    nameSetElems

etc.  Other set-like modules use uniform naming conventions.
This patch makes NameSet follow suit.

No change in behaviour; this is just renaming.

I'm doing this just before the fork so that merging is easier.

4 years agoKind variables in RHS of an associated type instances should be bound on LHS
Simon Peyton Jones [Fri, 28 Nov 2014 17:23:08 +0000 (17:23 +0000)] 
Kind variables in RHS of an associated type instances should be bound on LHS

This patche fixes Trac #9574.

The previous Note [Renaming associated types] in RnTypes appears to me to be wrong;
it confused class and instance declarations.

I have:

 * Treated kind and type variables uniformly. Both must be bound on the LHS
   of an associated type instance.  Eg
       instance C ('KProxy :: KProxy o) where
          type F 'KProxy = NatTr (Proxy :: o -> *)
   is illegal because 'o' is not bound on the LHS of the instance.

 * Moved the Note to RnSource and fixed it up

This improves the error message from T7938. However it made the code in
T6118 incorrect. We had:
  instance SingE (a :: Maybe k) where
    type Demote a = Maybe (Demote (Any :: k))
and that is now rejected, rightly I think.

4 years agoRe-activate `integerGmpInternals` test (#9281)
Herbert Valerio Riedel [Fri, 28 Nov 2014 16:13:33 +0000 (17:13 +0100)] 
Re-activate `integerGmpInternals` test (#9281)

The `integerGmpInternals` test was disabled in
c774b28f76ee4c220f7c1c9fd81585e0e3af0e8a as many of the primitives
tested in that test weren't available yet w/ `integer-gmp2`.

However, most operations have been reimplemented by now, with the
exception of

    recipModInteger  :: Integer -> Integer -> Integer
    gcdExtInteger    :: Integer -> Integer -> (Integer, Integer)
    powModSecInteger :: Integer -> Integer -> Integer -> Integer
    powModInteger    :: Integer -> Integer -> Integer -> Integer
    powInteger       :: Integer -> Word -> Integer

which are still missing, and will (time permitting) be reimplemented
over time.

4 years agoRe-implement `nextPrimeInteger` predicate (#9281)
Herbert Valerio Riedel [Fri, 28 Nov 2014 16:12:14 +0000 (17:12 +0100)] 
Re-implement `nextPrimeInteger` predicate (#9281)

This also adds `nextPrimeWord#` and `nextPrimeBigNat` predicates.

`nextPrimeInteger` has been available since `integer-gmp-0.5.1`
(added via f49735486533842cc84df70cafc8d565dffd75db).

4 years agoAdd purgeObj() to remove the symbol table entries for an object
Simon Marlow [Mon, 29 Sep 2014 11:49:21 +0000 (12:49 +0100)] 
Add purgeObj() to remove the symbol table entries for an object

This allows us to replace an object without actually unloading the old
object, which is necessary when we know we have references to the old
object so it can't be completely unloaded.  Using unloadObj() would
cause the GC (CheckUnload) to repeatedly and fruitlessly try to unload
the old object.

4 years agoMake the linker API thread-safe
Simon Marlow [Fri, 26 Sep 2014 19:08:43 +0000 (20:08 +0100)] 
Make the linker API thread-safe

We used to be able to rely on the client to use the API in a
single-threaded way, but now that the GC calls into the linker to
unload objects this isn't a safe assumption.

4 years agoRe-implement `testPrimeInteger` predicate (#9281)
Herbert Valerio Riedel [Fri, 28 Nov 2014 13:59:50 +0000 (14:59 +0100)] 
Re-implement `testPrimeInteger` predicate (#9281)

This also adds `testPrimeWord#` and `testPrimeBigNat` predicates.

`testPrimeInteger` has been available since `integer-gmp-0.5.1`
(added via f49735486533842cc84df70cafc8d565dffd75db).
The `nextPrimeInteger` function is still missing though.

4 years agoTidy up tracing somewhat
Simon Peyton Jones [Fri, 28 Nov 2014 11:29:40 +0000 (11:29 +0000)] 
Tidy up tracing somewhat

This is a knock-on from the -dump-to-file changes.
(I found that -ddump-cs-trace stuff wasn't coming out!)

4 years agoDon't discard a bang on a newtype pattern (Trac #9844)
Simon Peyton Jones [Fri, 28 Nov 2014 11:28:15 +0000 (11:28 +0000)] 
Don't discard a bang on a newtype pattern (Trac #9844)

We were wrongly simply dropping the bang, in tidy_bang_pat.

4 years agoImprove VERSION/GIT_COMMIT_ID handling for sdist
Herbert Valerio Riedel [Fri, 28 Nov 2014 09:57:18 +0000 (10:57 +0100)] 
Improve VERSION/GIT_COMMIT_ID handling for sdist

This makes `VERSION` updating a bit more robust (the file gets only
updated if its content would actually change), as well as moving the
dependency of `VERSION` and `GIT_COMMIT_ID` to the `sdist-ghc-prep`
target, as that's where it's actually needed.

This fixes the specialised target `make sdist-ghc` not properly
creating/updating the `VERSION` and `GIT_COMMIT_ID` files before
creating the ghc source-dist tarball, as well as avoiding stale
`VERSION` files.

4 years agocompiler: add new modules pulling in FunFlags
Sergei Trofimovich [Thu, 27 Nov 2014 22:08:32 +0000 (22:08 +0000)] 
compiler: add new modules pulling in FunFlags

And also sync type signature under '#ifndef GHCI'
Tested by setting
    GhcWithInterpreter = NO

Signed-off-by: Sergei Trofimovich <>
4 years agoEmbed Git commit id into `ghc --info` output
Herbert Valerio Riedel [Thu, 27 Nov 2014 09:50:51 +0000 (10:50 +0100)] 
Embed Git commit id into `ghc --info` output

Since we switched to a Git submodule based GHC Git repo, `ghc.git`'s
commit id uniquely identifies the state of the GHC source-tree. So
having that information embedded into the `ghc` executable provides
valuable information to track accurately (especially when created by
buildbots) from which source-tree-state a given `ghc` snapshot
(distribution) was generated.

So this commit adds a new field `"Project Git commit id"` to the
`ghc --info` meta-data containing the `./configure`-time Git commit id
as reported by `git rev-parse HEAD`.

This field can also be queried with `ghc --print-project-git-commit-id`.

For source distributions, the file `GIT_COMMIT_ID` is created (with some
sanity checking to detect stale commit ids, as that would render this
information rather useless)

Reviewed By: austin

Differential Revision:

4 years agoGet the right fixity-env in standalone deriving (Trac #9830)
Simon Peyton Jones [Thu, 27 Nov 2014 15:44:10 +0000 (15:44 +0000)] 
Get the right fixity-env in standalone deriving (Trac #9830)

4 years agoTest Trac #7243
Simon Peyton Jones [Thu, 27 Nov 2014 15:18:30 +0000 (15:18 +0000)] 
Test Trac #7243

4 years agoTrac #6022 is actually fine now
Simon Peyton Jones [Thu, 27 Nov 2014 14:32:38 +0000 (14:32 +0000)] 
Trac #6022 is actually fine now

4 years agoDon't require ConstraintKinds at usage sites (Trac #9838)
Simon Peyton Jones [Thu, 27 Nov 2014 14:25:04 +0000 (14:25 +0000)] 
Don't require ConstraintKinds at usage sites (Trac #9838)

4 years agoResume reporting incomplete pattern matches for record updates
Simon Peyton Jones [Thu, 27 Nov 2014 14:18:35 +0000 (14:18 +0000)] 
Resume reporting incomplete pattern matches for record updates

They were being inadvertently suppressed, even if you said -fwarn-incomplete-record-updates

See Trac #5728

4 years agoDon't require PatternSynonyms language extension to just use pattern synonyms
Dr. ERDI Gergo [Thu, 27 Nov 2014 11:21:04 +0000 (19:21 +0800)] 
Don't require PatternSynonyms language extension to just use pattern synonyms
(see #9838)

4 years agoChange loadSrcInterface to return a list of ModIface
Edward Z. Yang [Tue, 4 Nov 2014 10:13:37 +0000 (02:13 -0800)] 
Change loadSrcInterface to return a list of ModIface

This change is in preparation to support signature imports, which may pull in
multiple interface files.  At the moment, the list always contains only one
element, but in a later patch it may contain more.

I also adjusted some error reporting code so that it didn't take the full
iface, but just whether or not the iface in question was a boot module.

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

Reviewers: simonpj, austin

Subscribers: thomie, carter

Differential Revision:

4 years agoInline mkModuleToPkgConfAll into mkModuleToPkgConfGeneric.
Edward Z. Yang [Fri, 7 Nov 2014 21:44:49 +0000 (13:44 -0800)] 
Inline mkModuleToPkgConfAll into mkModuleToPkgConfGeneric.

Signed-off-by: Edward Z. Yang <>
4 years agoCabal submodule update: hole support and tests.
Edward Z. Yang [Tue, 18 Nov 2014 06:30:35 +0000 (22:30 -0800)] 
Cabal submodule update: hole support and tests.

Depends on D485

Summary: Signed-off-by: Edward Z. Yang <>

Test Plan: validate

Reviewers: simonpj, austin

Subscribers: thomie, carter

Differential Revision:

4 years fix test == bashism
Tuncer Ayaz [Wed, 26 Nov 2014 15:31:53 +0000 (16:31 +0100)] fix test == bashism

Signed-off-by: Austin Seipp <>
4 years agoUse {bit,popCount}Integer for `Bits Integer`
Herbert Valerio Riedel [Wed, 26 Nov 2014 17:07:05 +0000 (18:07 +0100)] 
Use {bit,popCount}Integer for `Bits Integer`

The primops are implemented in the `integer-gmp2` (#9281) backend and
are already used for the `Bits Natural` instance but aren't used yet for
the `Bits Integer` instace.  This commit fixes that.

4 years agoTest Trac #9834
Simon Peyton Jones [Wed, 26 Nov 2014 13:22:05 +0000 (13:22 +0000)] 
Test Trac #9834

4 years agoDefine `Data` instance for `Natural` type (#9818)
Herbert Valerio Riedel [Tue, 25 Nov 2014 22:23:08 +0000 (23:23 +0100)] 
Define `Data` instance for `Natural` type (#9818)

This follows the same style as the other integral `Data` instances
defined in the `Data.Data` module.

Reviewed By: ekmett

Differential Revision:

4 years agoInsert changelog entries for GHC 7.8.4
Herbert Valerio Riedel [Tue, 25 Nov 2014 21:47:38 +0000 (22:47 +0100)] 
Insert changelog entries for GHC 7.8.4

[skip ci]

4 years agoReplace `STRICT[12345]` macros by `BangPatterns`
Yuri de Wit [Tue, 25 Nov 2014 17:22:34 +0000 (18:22 +0100)] 
Replace `STRICT[12345]` macros by `BangPatterns`

This removes the macros `STRICT1()`, `STRICT2()`, `STRICT3()`,
`STRICT4()`, and `STRICT5()` CPP macros from `HsVersions.hs` and
replaces the few use sites by uses of `BangPatterns`.

Reviewed By: hvr

Differential Revision:

4 years agoUpdate `deepseq` to latest snapshot
Herbert Valerio Riedel [Tue, 25 Nov 2014 17:21:41 +0000 (18:21 +0100)] 
Update `deepseq` to latest snapshot

This pulls in several `NFData` instances since the last
submodule update.

4 years agoDocument +RTS -xq
Simon Marlow [Tue, 25 Nov 2014 13:33:51 +0000 (13:33 +0000)] 
Document +RTS -xq

4 years agoAdd +RTS -n<size>: divide the nursery into chunks
Simon Marlow [Fri, 21 Nov 2014 17:05:58 +0000 (17:05 +0000)] 
Add +RTS -n<size>: divide the nursery into chunks

See the documentation for details.

4 years agoMake clearNursery free
Simon Marlow [Tue, 7 Oct 2014 09:30:36 +0000 (10:30 +0100)] 
Make clearNursery free

clearNursery resets all the bd->free pointers of nursery blocks to
make the blocks empty.  In profiles we've seen clearNursery taking
significant amounts of time particularly with large -N and -A values.

This patch moves the work of clearNursery to the point at which we
actually need the new block, thereby introducing an invariant that
blocks to the right of the CurrentNursery pointer still need their
bd->free pointer reset.  This should make things faster overall,
because we don't need to clear blocks that we don't use.

Test Plan: validate

Reviewers: AndreasVoellmy, ezyang, austin

Subscribers: thomie, carter, ezyang, simonmar

Differential Revision:

4 years agoMark `Data.Typeable.Internal` as Trustworthy after consverstation with
David Terei [Mon, 24 Nov 2014 19:26:57 +0000 (14:26 -0500)] 
Mark `Data.Typeable.Internal` as Trustworthy after consverstation with
ekmett & hvr.

4 years agoChangelog entry and /Since/ for alloc-counter ops
Herbert Valerio Riedel [Mon, 24 Nov 2014 21:32:23 +0000 (22:32 +0100)] 
Changelog entry and /Since/ for alloc-counter ops

See b0534f78a73f972e279eed4447a5687bd6a8308e for more details

[skip ci]

4 years agoTest #8031 in th/T8031
Richard Eisenberg [Mon, 24 Nov 2014 20:24:03 +0000 (15:24 -0500)] 
Test #8031 in th/T8031

4 years agoTest #8044 in typecheck/should_fail/T8044
Richard Eisenberg [Mon, 24 Nov 2014 20:17:15 +0000 (15:17 -0500)] 
Test #8044 in typecheck/should_fail/T8044

4 years agoTest #7643 in typecheck/should_compile/T7643.
Richard Eisenberg [Mon, 24 Nov 2014 20:13:53 +0000 (15:13 -0500)] 
Test #7643 in typecheck/should_compile/T7643.

4 years agoAdd `--fwarn-trustworthy-safe` to `-Wall` again.
David Terei [Mon, 24 Nov 2014 08:34:18 +0000 (03:34 -0500)] 
Add `--fwarn-trustworthy-safe` to `-Wall` again.

This redoes part of 475dd93efa which was reversed in 452d6aa95b after
breaking validate on windows.

4 years agoMinor tweaks to API Annotation
Alan Zimmerman [Mon, 24 Nov 2014 15:43:45 +0000 (09:43 -0600)] 
Minor tweaks to API Annotation

Add missing Outputable instance for AnnotationComment

Update documentation

Adjust parser to capture annotations correctly

Test Plan: ./validate

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, carter

Differential Revision:

4 years agoaccessors to RTS flag values -- #5364
Ömer Sinan Ağacan [Sat, 22 Nov 2014 00:58:29 +0000 (18:58 -0600)] 
accessors to RTS flag values -- #5364

Summary: Implementation of #5364. Mostly boilerplate, reading FILE fields is missing.

Test Plan:
- Get some feedback on missing parts. (FILE fields)
- Get some feedback on module name.
- Get some feedback on other things.
- Get code reviewed.
- Make sure test suite is passing. (I haven't run it myself)

Reviewers: hvr, austin, ezyang

Reviewed By: ezyang

Subscribers: ekmett, simonmar, ezyang, carter, thomie

Differential Revision:

GHC Trac Issues: #5364


4 years agoUse the `patch` command detected by the top-level `configure`
Herbert Valerio Riedel [Mon, 24 Nov 2014 11:45:42 +0000 (12:45 +0100)] 
Use the `patch` command detected by the top-level `configure`

...instead of invoking `patch` directly in `integer-gmp2/gmp/`

4 years agoTry to improve Make dependency for `ghc-gmp.h`
Herbert Valerio Riedel [Mon, 24 Nov 2014 11:01:37 +0000 (12:01 +0100)] 
Try to improve Make dependency for `ghc-gmp.h`

This will hopefully workaround an issue where
`libraries/integer-gmp2/include/ghc-gmp.h` gets deleted
during cleanup but isn't regenerated.

This situation is caused by `./validate` cleaning the tree with

  $make maintainer-clean NO_CLEAN_GMP=YES

which doesn't doesn't clean the `gmp/` folder, and so the `include/ghc-gmp.h`
file wasn't recreated (as it was previously a side-effect of building
the intree GMP).

Reviewed By: luite

Differential Revision:

4 years agoUpdate in-tree GMP to version 5.0.4
Herbert Valerio Riedel [Sun, 23 Nov 2014 22:41:06 +0000 (23:41 +0100)] 
Update in-tree GMP to version 5.0.4

This is mostly a proof of concept for updating the in-tree GMP via patch files
(and therefore w/o introducing new blobs into the Git history).

NOTE: The updated GMP 5.0.4 version is only used by the integer-gmp2 backend.

4 years agoFix minor typo in 6d1c8ec79adf566d57d2c35aac
Herbert Valerio Riedel [Sun, 23 Nov 2014 21:46:47 +0000 (22:46 +0100)] 
Fix minor typo in 6d1c8ec79adf566d57d2c35aac

4 years agoPersist build-time GMP ver to `HsIntegerGmp.h`
Herbert Valerio Riedel [Sun, 23 Nov 2014 11:21:51 +0000 (12:21 +0100)] 
Persist build-time GMP ver to `HsIntegerGmp.h`

This creates the additional macro definitions in `HsIntegerGmp.h` which
are useful for 3rd party `integer-gmp`-addon libraries.

Here's an example for the definitions created for the in-tree GMP:

  #define GHC_GMP_INTREE     1
  #define GHC_GMP_VERSION_MJ 5
  #define GHC_GMP_VERSION_MI 0
  #define GHC_GMP_VERSION_PL 4
  #define GHC_GMP_VERSION   (5 * 10000 + 0 * 100 + 4)

And here's an example for a system-installed GMP:

  #define GHC_GMP_INTREE     0
  #define GHC_GMP_VERSION_MJ 6
  #define GHC_GMP_VERSION_MI 0
  #define GHC_GMP_VERSION_PL 0
  #define GHC_GMP_VERSION   (6 * 10000 + 0 * 100 + 0)

Part of #9281

Reviewed By: ekmett (via D522)

4 years agoInstall `ghc-gmp.h` C include header file (#9281)
Herbert Valerio Riedel [Sun, 23 Nov 2014 09:27:13 +0000 (10:27 +0100)] 
Install `ghc-gmp.h` C include header file (#9281)

This is mostly interesting when using the in-tree GMP, as there's
no way otherwise to access the in-tree `gmp.h` header file after installation.

In case `integer-gmp2` was build against a system-installed GMP library,
`ghc-gmp.h` simply contains `#include <gmp.h>` for convenience.

Reviewed By: ekmett

Differential Revision:

4 years agoAdd `Storable` instances for `Complex` and `Ratio`
Carter Tazio Schonwald [Sun, 23 Nov 2014 21:08:21 +0000 (22:08 +0100)] 
Add `Storable` instances for `Complex` and `Ratio`

The actual type-signatures of the new instances are:

  instance Storable a => Storable (Complex a)

  instance (Storable a, Integral a) => Storable (Ratio a)

See also

Addresses #9826

Reviewed By: ekmett

Differential Revision:

4 years agoDefine void using <$ (re #9827)
David Feuer [Sun, 23 Nov 2014 21:00:48 +0000 (22:00 +0100)] 
Define void using <$ (re #9827)

`() <$ x` is sometimes better than `fmap (const ()) x` and should
never be worse.

Reviewed By: ekmett

Differential Revision:

4 years agoCall `popCountBigNat` directly (#9818)
Herbert Valerio Riedel [Sat, 22 Nov 2014 14:09:46 +0000 (15:09 +0100)] 
Call `popCountBigNat` directly (#9818)

This calls the `popCountBigNat` primitive directly instead of going
through `Integer`'s `popCount`.

4 years agoImplement {gcd,lcm}/Natural optimisation (#9818)
Herbert Valerio Riedel [Sat, 22 Nov 2014 14:03:33 +0000 (15:03 +0100)] 
Implement {gcd,lcm}/Natural optimisation (#9818)

This provides the equivalent of the existing `{gcd,lcm}/Integer`
optimisations for the `Natural` type, when using the `integer-gmp2`