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

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

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

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

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

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

5 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

5 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

5 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

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

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

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

5 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).

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

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

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

5 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!)

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

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

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

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

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

5 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

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

5 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5 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

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

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

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

5 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


5 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/`

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

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

5 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

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

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

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

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

5 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`.

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

5 years agoFix `fromInteger` constructing invalid `Natural`
Herbert Valerio Riedel [Sat, 22 Nov 2014 13:56:53 +0000 (14:56 +0100)] 
Fix `fromInteger` constructing invalid `Natural`

This fixes a case where `isValidNatural . fromInteger` would be `False`.

Re #9818

5 years agoAdd `isValidNatural` predicate (#9818)
Herbert Valerio Riedel [Sat, 22 Nov 2014 13:52:04 +0000 (14:52 +0100)] 
Add `isValidNatural` predicate (#9818)

This predicate function encodes the internal `Natural` invariants, and
is useful for testsuites or code that directly constructs `Natural`

C.f. `integer-gmp2`'s `isValidBigNat#` and `isValidInteger#` predicates
for testing internal invariants.

5 years agoAdd gcd/Word RULE-based optimisation
Herbert Valerio Riedel [Sat, 22 Nov 2014 12:28:25 +0000 (13:28 +0100)] 
Add gcd/Word RULE-based optimisation

This makes use of the `gcdWord` primitive provided by
be7fb7e58c70cd9b0a933fb26cd5f2607d6dc4b2 which should make the
`Word`-variant of `gcd` as performant as the `Int`-variant.

5 years agoRemove reference to `MIN_VERSION_integer_gmp2`
Herbert Valerio Riedel [Sat, 22 Nov 2014 12:22:03 +0000 (13:22 +0100)] 
Remove reference to `MIN_VERSION_integer_gmp2`

This is slipped in by accident as part of
c774b28f76ee4c220f7c1c9fd81585e0e3af0e8a (re #9281)

5 years agointeger-gmp2: export `Word`-counterpart of gcdInt
Herbert Valerio Riedel [Sat, 22 Nov 2014 12:18:34 +0000 (13:18 +0100)] 
integer-gmp2: export `Word`-counterpart of gcdInt

It's trivial for `integer-gmp2` (#9281) to provide it, and it'll be
useful for a future 'Natural'-related commit, as well as providing a
`Word` optimised `gcd`-RULE.

5 years agoRevert "Test Trac #9318"
Herbert Valerio Riedel [Sat, 22 Nov 2014 09:15:29 +0000 (10:15 +0100)] 
Revert "Test Trac #9318"

This reverts commit 5760eb598e0dfa451407195f15072204c15233ed
because the very same test was already added via
5eebd990ea7a5bc1937657b101ae83475e20fc7a and is causing
`./validate` to fail due to "framework failure".

5 years agoRe-center bytes-allocated for `haddock.compiler`
Herbert Valerio Riedel [Sat, 22 Nov 2014 00:18:22 +0000 (01:18 +0100)] 
Re-center bytes-allocated for `haddock.compiler`

This should silence the

   perf/haddock  haddock.compiler [stat not good enough] (normal)


5 years agoImplement `Natural` number type (re #9818)
Herbert Valerio Riedel [Fri, 21 Nov 2014 23:15:42 +0000 (00:15 +0100)] 
Implement `Natural` number type (re #9818)

This implements a `Natural` type for representing unsigned arbitrary
precision integers.

When available, `integer-gmp>=1.0.0`'s `BigNat` type is used as
building-block to construct `Natural` as an algebraic data-type.
Otherwise, `Natural` falls back being a `newtype`-wrapper around
`Integer` (as is done in Edward Kmett's `nats` package).

The `GHC.Natural` module exposes an internal GHC-specific API, while
`Numeric.Natural` provides the official & portable API.

Reviewed By: austin, ekmett

Differential Revision:

5 years agoDeprecate Data.Version.versionTags (#2496)
Thomas Miedema [Fri, 21 Nov 2014 23:03:19 +0000 (00:03 +0100)] 
Deprecate Data.Version.versionTags (#2496)

The library submission was accepted:

The T5892ab testcases were changed to use `Data.Tree` instead of `Data.Version`

Reviewed By: ekmett

Differential Revision:

5 years agoAdd -fdefer-typed-holes flag which defers hole errors to runtime.
Merijn Verstraaten [Fri, 21 Nov 2014 21:32:38 +0000 (15:32 -0600)] 
Add -fdefer-typed-holes flag which defers hole errors to runtime.

As proposed by Richard on Trac. This patch adds a new flag -fdefer-typed-holes
and changes the semantics of the -fno-warn-typed-holes flag.

To summarise, by default GHC has typed holes enabled and produces a compile
error when it encounters a typed hole.

When -fdefer-type-errors OR -fdefer-typed-holes is enabled, hole errors are
converted to warnings and result in runtime errors when evaluated.

The warning flag -fwarn-typed-holes is on by default. Without -fdefer-type-errors
or -fdefer-typed-holes this flag is a no-op, since typed holes are an error
under these conditions. If either of the defer flags are enabled (converting
typed hole errors into warnings) the -fno-warn-typed-holes flag disables the
warnings. This means compilation silently succeeds and evaluating a hole will
produce a runtime error.

The rationale behind allowing typed holes warnings to be silenced is that tools
like Syntastic for vim highlight warnings and hole warnings may be undesirable.

Signed-off-by: Merijn Verstraaten <>
Test Plan: validate

Reviewers: austin, simonpj, thomie

Reviewed By: simonpj, thomie

Subscribers: Fuuzetsu, thomie, carter

Differential Revision:

GHC Trac Issues: #9497


5 years agoghc: allow --show-options and --interactive together
Lennart Kolmodin [Fri, 21 Nov 2014 21:31:54 +0000 (15:31 -0600)] 
ghc: allow --show-options and --interactive together

Previously 'ghc --show-options' showed all options that GHC can possibly
accept. With this patch, it'll only show the options that have effect in
non-interactive modes.
This change also adds support for using 'ghc --interactive --show-options'
which previously was disallowed. This command will show all options that have
effect in the interactive mode.
The CmdLineParser is updated to know about the GHC modes, and then each flag
is annotated with which mode it has effect.
This fixes #9259.

Test Plan:
Try out --show-options with --interactive on the command line. With and without
--interactive should give different results.
Run the test suite, mode001 has been updated to verify this new flag

Reviewers: austin, jstolarek

Reviewed By: austin, jstolarek

Subscribers: jstolarek, thomie, carter, simonmar

Differential Revision:

GHC Trac Issues: #9259

5 years agoAdd function for size-checked conversion of Integral types
Sean Leather [Fri, 21 Nov 2014 22:34:41 +0000 (23:34 +0100)] 
Add function for size-checked conversion of Integral types

The new function `Data.Bits.toIntegralSized` provides a similar
functionality to `fromIntegral` but adds validation that the
argument fits in the result type's size.

The implementation of `toIntegralSized` has been derived from `intCastMaybe`
(which is part of Herbert Valerio Riedel's `int-cast` package,

Addresses #9816

Reviewed By: ekmett, austin

Differential Revision:

5 years agoAdd displayException method to Exception (#9822)
Michael Snoyman [Fri, 21 Nov 2014 22:26:09 +0000 (23:26 +0100)] 
Add displayException method to Exception (#9822)

Defaults to using `show` to prevent any breakage of existing code.  Also
provide a custom implementation for `SomeException` which uses the
underlying exception's `displayException`.

Differential Revision:

5 years agollvmGen: Compatibility with LLVM 3.5 (re #9142)
Ben Gamari [Fri, 21 Nov 2014 20:05:25 +0000 (21:05 +0100)] 
llvmGen: Compatibility with LLVM 3.5 (re #9142)

Due to changes in LLVM 3.5 aliases now may only refer to definitions.
Previously to handle symbols defined outside of the current commpilation
unit GHC would emit both an `external` declaration, as well as an alias
pointing to it, e.g.,

    @stg_BCO_info = external global i8
    @stg_BCO_info$alias = alias private i8* @stg_BCO_info

Where references to `stg_BCO_info` will use the alias
`stg_BCO_info$alias`. This is not permitted under the new alias
behavior, resulting in errors resembling,

    Alias must point to a definition
    i8* @"stg_BCO_info$alias"

To fix this, we invert the naming relationship between aliases and
definitions. That is, now the symbol definition takes the name
`@stg_BCO_info$def` and references use the actual name, `@stg_BCO_info`.
This means the external symbols can be handled by simply emitting an
`external` declaration,

    @stg_BCO_info = external global i8

Whereas in the case of a forward declaration we emit,

    @stg_BCO_info = alias private i8* @stg_BCO_info$def

Reviewed By: austin

Differential Revision:

5 years agoBe consistent with placement of Safe Haskell mode at top of file
David Terei [Thu, 20 Nov 2014 02:29:51 +0000 (18:29 -0800)] 
Be consistent with placement of Safe Haskell mode at top of file

5 years agoImprove Safe Haskell bounds for changes to base over time
David Terei [Thu, 20 Nov 2014 02:02:30 +0000 (18:02 -0800)] 
Improve Safe Haskell bounds for changes to base over time

5 years agoUpdate Foreign.* for Safe Haskell now that they're safe by default
David Terei [Thu, 20 Nov 2014 02:00:11 +0000 (18:00 -0800)] 
Update Foreign.* for Safe Haskell now that they're safe by default

5 years agoUpdate Control.Monad.ST.* for Safe Haskell as now they're safe by default
David Terei [Thu, 20 Nov 2014 01:58:43 +0000 (17:58 -0800)] 
Update Control.Monad.ST.* for Safe Haskell as now they're safe by default

5 years agoAdd T7220a.stderr
Joachim Breitner [Fri, 21 Nov 2014 20:55:37 +0000 (21:55 +0100)] 
Add T7220a.stderr

which presumably was just forgotten when creating the testcase in
commit 7b1a856.

5 years agoAdd 'fillBytes' to Foreign.Marshal.Utils.
Alex Petrov [Fri, 21 Nov 2014 18:24:37 +0000 (19:24 +0100)] 
Add 'fillBytes' to Foreign.Marshal.Utils.

fillBytes uses 'memset' to fill a memory area with a given byte value.

Reviewed By: austin, hvr

Differential Revision:

5 years agoCapture original source for literals
Alan Zimmerman [Fri, 21 Nov 2014 19:24:30 +0000 (13:24 -0600)] 
Capture original source for literals

Make HsLit and OverLitVal have original source strings, for source to
source conversions using the GHC API

This is part of the ongoing AST Annotations work, as captured in and

The motivations for the literals is as follows

x,y :: Int
x = 0003
y = 0x04

s :: String
s = "\x20"

c :: Char
c = '\x20'

d :: Double
d = 0.00

blah = x
    charH = '\x41'#
    intH = 0004#
    wordH = 005##
    floatH = 3.20#
    doubleH = 04.16##
    x = 1

Test Plan: ./sh validate

Reviewers: simonpj, austin

Reviewed By: simonpj, austin

Subscribers: thomie, goldfire, carter, simonmar

Differential Revision:

GHC Trac Issues: #9628

5 years agoAdd Data.Void to base (re #9814)
Herbert Valerio Riedel [Fri, 21 Nov 2014 17:30:14 +0000 (18:30 +0100)] 
Add Data.Void to base (re #9814)

This adds the module `Data.Void` (formerly provided by Edward Kmett's `void`
package) to `base`.

The original Haskell98 compatible implementation has been modified to use
modern GHC features (among others this makes use of `EmptyCase` as
motivated by #2431), and `vacuousM` was dropped since it's redundant now
with the AMP in place.  Instances for classes not part of `base` had to be
dropped as well.

TODO: Documentation could be improved

Reviewed By: ekmett, austin

Differential Revision:

5 years agoExport more Packages functions
Luite Stegeman [Fri, 21 Nov 2014 17:33:00 +0000 (11:33 -0600)] 
Export more Packages functions

This patch exports functions for finding the active package
databases and their locations from the Packages module. This
allows GHC API clients to use other tools, like Cabal, to gather
package information that's not directly available from the
binary package db.

Reviewers: duncan, austin

Reviewed By: austin

Subscribers: thomie, carter

Differential Revision:

5 years agoFixes ghci :unset -X<ext> so that it doesn't fail to reverse option. (fixes trac...
Muhaimin Ahsan [Fri, 21 Nov 2014 17:31:44 +0000 (11:31 -0600)] 
Fixes ghci :unset -X<ext> so that it doesn't fail to reverse option. (fixes trac #9293)

Summary: ghci unset could not reverse language extensions.

Reviewers: hvr, thomie, austin

Reviewed By: hvr, thomie, austin

Subscribers: goldfire, hvr, thomie, carter

Differential Revision:

GHC Trac Issues: #9293

5 years agoAdd API Annotations
Alan Zimmerman [Fri, 21 Nov 2014 17:20:13 +0000 (11:20 -0600)] 
Add API Annotations

The final design and discussion is captured at

This is a proof of concept implementation of a completely
separate annotation structure, populated in the parser,and tied to the
AST by means of a virtual "node-key" comprising the surrounding
SrcSpan and a value derived from the specific constructor used for the

The key parts of the design are the following.

== The Annotations ==

In `hsSyn/ApiAnnotation.hs`

type ApiAnns = (Map.Map ApiAnnKey SrcSpan, Map.Map SrcSpan [Located Token])

type ApiAnnKey = (SrcSpan,AnnKeywordId)

-- ---------------------------------------------------------------------

-- | Retrieve an annotation based on the @SrcSpan@ of the annotated AST
-- element, and the known type of the annotation.
getAnnotation :: ApiAnns -> SrcSpan -> AnnKeywordId -> Maybe SrcSpan
getAnnotation (anns,_) span ann = Map.lookup (span,ann) anns

-- |Retrieve the comments allocated to the current @SrcSpan@
getAnnotationComments :: ApiAnns -> SrcSpan -> [Located Token]
getAnnotationComments (_,anns) span =
  case Map.lookup span anns of
    Just cs -> cs
    Nothing -> []

-- | Note: in general the names of these are taken from the
-- corresponding token, unless otherwise noted
data AnnKeywordId
         = AnnAs
         | AnnBang
         | AnnClass
         | AnnClose -- ^ } or ] or ) or #) etc
         | AnnComma
         | AnnDarrow
         | AnnData
         | AnnDcolon

== Capturing in the lexer/parser ==

The annotations are captured in the lexer / parser by extending PState to include a field

In `parser/Lexer.x`

data PState = PState {
        annotations :: [(ApiAnnKey,SrcSpan)]
        -- Annotations giving the locations of 'noise' tokens in the
        -- source, so that users of the GHC API can do source to
        -- source conversions.

The lexer exposes a helper function to add an annotation

addAnnotation :: SrcSpan -> Ann -> SrcSpan -> P ()
addAnnotation l a v = P $ \s -> POk s {
  annotations = ((AK l a), v) : annotations s
  } ()


The parser also has some helper functions of the form

type MaybeAnn = Maybe (SrcSpan -> P ())

gl = getLoc
gj x = Just (gl x)

ams :: Located a -> [MaybeAnn] -> P (Located a)
ams a@(L l _) bs = (mapM_ (\a -> a l) $ catMaybes bs) >> return a

This allows annotations to be captured in the parser by means of

ctypedoc :: { LHsType RdrName }
        : 'forall' tv_bndrs '.' ctypedoc {% hintExplicitForall (getLoc $1) >>
                                            ams (LL $ mkExplicitHsForAllTy $2 (noLoc []) $4)
                                                [mj AnnForall $1,mj AnnDot $3] }
        | context '=>' ctypedoc         {% ams (LL $ mkQualifiedHsForAllTy   $1 $3)
                                               [mj AnnDarrow $2] }
        | ipvar '::' type               {% ams (LL (HsIParamTy (unLoc $1) $3))
                                               [mj AnnDcolon $2] }
        | typedoc                       { $1 }

== Parse result ==

data HsParsedModule = HsParsedModule {
    hpm_module    :: Located (HsModule RdrName),
    hpm_src_files :: [FilePath],
       -- ^ extra source files (e.g. from #includes).  The lexer collects
       -- these from '# <file> <line>' pragmas, which the C preprocessor
       -- leaves behind.  These files and their timestamps are stored in
       -- the .hi file, so that we can force recompilation if any of
       -- them change (#3589)
    hpm_annotations :: ApiAnns

-- | The result of successful parsing.
data ParsedModule =
  ParsedModule { pm_mod_summary   :: ModSummary
               , pm_parsed_source :: ParsedSource
               , pm_extra_src_files :: [FilePath]
               , pm_annotations :: ApiAnns }

This diff depends on D426

Test Plan: sh ./validate

Reviewers: austin, simonpj, Mikolaj

Reviewed By: simonpj, Mikolaj

Subscribers: Mikolaj, goldfire, thomie, carter

Differential Revision:

GHC Trac Issues: #9628

5 years agoAST changes to prepare for API annotations, for #9628
Alan Zimmerman [Fri, 21 Nov 2014 17:20:06 +0000 (11:20 -0600)] 
AST changes to prepare for API annotations, for #9628

AST changes to prepare for API annotations

Add locations to parts of the AST so that API annotations can
then be added.

The outline of the whole process is captured here

This change updates the haddock submodule.

Test Plan: sh ./validate

Reviewers: austin, simonpj, Mikolaj

Reviewed By: simonpj, Mikolaj

Subscribers: thomie, goldfire, carter

Differential Revision:

GHC Trac Issues: #9628

5 years agoUpdate manual for pattern splices (#1476)
Richard Eisenberg [Fri, 21 Nov 2014 15:51:38 +0000 (10:51 -0500)] 
Update manual for pattern splices (#1476)

5 years agoFix #9824 by not warning about unused matches in pattern quotes.
Richard Eisenberg [Fri, 21 Nov 2014 15:33:37 +0000 (10:33 -0500)] 
Fix #9824 by not warning about unused matches in pattern quotes.

5 years agoTest #9824 in th/T9824
Richard Eisenberg [Fri, 21 Nov 2014 15:31:40 +0000 (10:31 -0500)] 
Test #9824 in th/T9824

5 years agoRelease notes for #1476, #7484.
Richard Eisenberg [Tue, 4 Nov 2014 17:20:25 +0000 (12:20 -0500)] 
Release notes for #1476, #7484.

5 years agoFix #1476 by making splice patterns work.
Richard Eisenberg [Tue, 4 Nov 2014 16:34:53 +0000 (11:34 -0500)] 
Fix #1476 by making splice patterns work.

Unfortunately, splice patterns in brackets still do not work
because we don't run splices in brackets. Without running a pattern
splice, we can't know what variables it binds, so we're stuck.

This is still a substantial improvement, and it may be the best
we can do. Still must document new behavior.

5 years agoTest that nested pattern splices don't scope (#1476).
Richard Eisenberg [Tue, 4 Nov 2014 18:06:56 +0000 (13:06 -0500)] 
Test that nested pattern splices don't scope (#1476).

Test case: th/T1476b.

5 years agoTest #1476 in th/T1476
Richard Eisenberg [Tue, 4 Nov 2014 01:26:14 +0000 (20:26 -0500)] 
Test #1476 in th/T1476

5 years agoFix #7484, checking for good binder names in Convert.
Richard Eisenberg [Mon, 3 Nov 2014 20:34:53 +0000 (15:34 -0500)] 
Fix #7484, checking for good binder names in Convert.

This commit also refactors a bunch of lexeme-oriented code into
a new module Lexeme, and includes a submodule update for haddock.

5 years agoTest #7484 in th/T7484
Richard Eisenberg [Mon, 3 Nov 2014 20:33:51 +0000 (15:33 -0500)] 
Test #7484 in th/T7484

5 years agoComments only
Simon Peyton Jones [Fri, 21 Nov 2014 13:29:42 +0000 (13:29 +0000)] 
Comments only

5 years agoTest Trac #8149
Simon Peyton Jones [Fri, 21 Nov 2014 13:03:08 +0000 (13:03 +0000)] 
Test Trac #8149

5 years agoFix Trac #9815
Simon Peyton Jones [Fri, 21 Nov 2014 13:02:45 +0000 (13:02 +0000)] 
Fix Trac #9815

Dot-dot record-wildcard notation is simply illegal for constructors
without any named fields, but that was neither documented nor checked.
This patch does so

- Make the check in RnPat
- Add test T9815
- Fix CmmLayoutStack which was using the illegal form (!)
- Document in user manual

5 years agoWibbles (usually improvements) to error messages
Simon Peyton Jones [Fri, 21 Nov 2014 11:33:16 +0000 (11:33 +0000)] 
Wibbles (usually improvements) to error messages

5 years agoTest T2239 actually succeeds without impredicativity, because of the new co/contra...
Simon Peyton Jones [Fri, 21 Nov 2014 11:31:25 +0000 (11:31 +0000)] 
Test T2239 actually succeeds without impredicativity, because of the new co/contra subsumption check

5 years agoFix up tests for Trac #7220; the old test really was ambiguous
Simon Peyton Jones [Fri, 21 Nov 2014 11:29:47 +0000 (11:29 +0000)] 
Fix up tests for Trac #7220; the old test really was ambiguous

5 years agoTest Trac #9569
Simon Peyton Jones [Fri, 21 Nov 2014 11:22:52 +0000 (11:22 +0000)] 
Test Trac #9569