4 years agoComments and white space; plus structurally avoiding the previously "egregious bug"
Simon Peyton Jones [Thu, 12 Feb 2015 14:12:43 +0000 (14:12 +0000)] 
Comments and white space; plus structurally avoiding the previously "egregious bug"

4 years agoPropagate ReturnTvs in matchExpectedFunTys
Richard Eisenberg [Wed, 11 Feb 2015 18:40:21 +0000 (13:40 -0500)] 
Propagate ReturnTvs in matchExpectedFunTys

This really should have done a while ago, with the ReturnTv factoring.
It's surprising that I can't tickle the bug!

Please merge to ghc-7.10.

4 years agoFix egregious typo in checkTauTvUpdate.
Richard Eisenberg [Wed, 11 Feb 2015 18:13:53 +0000 (13:13 -0500)] 
Fix egregious typo in checkTauTvUpdate.

The old code used an unzonked type in an occurs-check, which
would sometimes lead to an infinite loop.

Please merge to ghc-7.10.

4 years agoFix #10079 by recurring after flattening exposes a TyConApp.
Richard Eisenberg [Wed, 11 Feb 2015 18:06:15 +0000 (13:06 -0500)] 
Fix #10079 by recurring after flattening exposes a TyConApp.

Previously, try_decompose_nom_app was smart enough to recur if
flattening exposed a TyConApp, but try_decompose_repr_app was
not. Now, if neither type in try_decompose_repr_app is an AppTy,

Seems all straightforward enough to avoid a Note.

4 years agonameIsLocalOrFrom should include interactive modules
Simon Peyton Jones [Wed, 11 Feb 2015 10:55:10 +0000 (10:55 +0000)] 
nameIsLocalOrFrom should include interactive modules

The provoking cause was Trac #10019, but it revealed that nameIsLocalOrFrom
should really include all interactive modules (ones from the 'interactive'
package).  Previously we had some ad-hoc 'isInteractiveModule' tests with
some (but not all) the calls to nameIsLocalOrFrom.

See the new comments with Name.nameIsLocalOrFrom.

4 years agoDo not share T9878.hs between test T9878 and T9878b
Simon Peyton Jones [Wed, 11 Feb 2015 10:30:05 +0000 (10:30 +0000)] 
Do not share T9878.hs between test T9878 and T9878b

I think the sharing was giving a race condition in the test suite;
I got a failure from validate which went away when I ran the tests

4 years agoDo not complain about missing fields in Trac #10047
Simon Peyton Jones [Tue, 10 Feb 2015 23:22:34 +0000 (23:22 +0000)] 
Do not complain about missing fields in Trac #10047

4 years agoAdd a couple of tcTraces around reify
Simon Peyton Jones [Tue, 10 Feb 2015 21:07:43 +0000 (21:07 +0000)] 
Add a couple of tcTraces around reify

4 years agoMore comments and white space
Simon Peyton Jones [Tue, 10 Feb 2015 21:07:18 +0000 (21:07 +0000)] 
More comments and white space

4 years agoComments only
Simon Peyton Jones [Mon, 9 Feb 2015 15:33:40 +0000 (15:33 +0000)] 
Comments only

4 years agoRefactor the handling of quasi-quotes
Simon Peyton Jones [Tue, 10 Feb 2015 14:09:12 +0000 (14:09 +0000)] 
Refactor the handling of quasi-quotes

As Trac #10047 points out, a quasi-quotation [n|...blah...|] is supposed
to behave exactly like $(n "...blah...").  But it doesn't!  This was outright
wrong: quasiquotes were being run even inside brackets.

Now that TH supports both typed and untyped splices, a quasi-quote is properly
regarded as a particular syntax for an untyped splice. But apart from that
they should be treated the same.  So this patch refactors the handling of
quasiquotes to do just that.

The changes touch quite a lot of files, but mostly in a routine way.
The biggest changes by far are in RnSplice, and more minor changes in
TcSplice.  These are the places where there was real work to be done.
Everything else is routine knock-on changes.

* No more QuasiQuote forms in declarations, expressions, types, etc.
  So we get rid of these data constructors
    * HsBinds.QuasiQuoteD
    * HsExpr.HsSpliceE
    * HsPat.QuasiQuotePat
    * HsType.HsQuasiQuoteTy

* We get rid of the HsQuasiQuote type altogether

* Instead, we augment the HsExpr.HsSplice type to have three
  consructors, for the three types of splice:
    * HsTypedSplice
    * HsUntypedSplice
    * HsQuasiQuote
  There are some related changes in the data types in HsExpr near HsSplice.
  Specifically: PendingRnSplice, PendingTcSplice, UntypedSpliceFlavour.

* In Hooks, we combine rnQuasiQuoteHook and rnRnSpliceHook into one.
  A smaller, clearer interface.

* We have to update the Haddock submodule, to accommodate the hsSyn changes

4 years agoDon't overwrite input file by default
Phil Ruffwind [Mon, 9 Feb 2015 19:39:12 +0000 (13:39 -0600)] 
Don't overwrite input file by default

If the default filename of the output executable coincides with that of main
source file, throw an error instead of silently clobbering the input file.

Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9930

4 years agollvmGen: move to LLVM 3.6 exclusively
Ben Gamari [Mon, 9 Feb 2015 21:21:28 +0000 (15:21 -0600)] 
llvmGen: move to LLVM 3.6 exclusively

Rework llvmGen to use LLVM 3.6 exclusively. The plans for the 7.12 release are to ship LLVM alongside GHC in the interests of user (and developer) sanity.

Along the way, refactor TNTC support to take advantage of the new `prefix` data support in LLVM 3.6. This allows us to drop the section-reordering component of the LLVM mangler.

Test Plan: Validate, look at emitted code

Reviewers: dterei, austin, scpmw

Reviewed By: austin

Subscribers: erikd, awson, spacekitteh, thomie, carter

Differential Revision:

GHC Trac Issues: #10074

4 years agoAdd Uniquable instances for InstalledPackageId/SourcePackageId/PackageName
Edward Z. Yang [Mon, 9 Feb 2015 19:46:29 +0000 (13:46 -0600)] 
Add Uniquable instances for InstalledPackageId/SourcePackageId/PackageName

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

Test Plan: validate

Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

4 years agoAdd a workaround to allow older cabal-install to use ghc-7.10
Duncan Coutts [Mon, 9 Feb 2015 19:46:06 +0000 (13:46 -0600)] 
Add a workaround to allow older cabal-install to use ghc-7.10

This should smooth the upgrade process for people and help with testing
the 7.10 RCs. Otherwise people need to first install cabal-install-1.22
before they can use 7.10.

The problem is that older cabal still used file-style package dbs for
the inplace package db when building packages. The workaround is that
both ghc and ghc-pkg will notice when cabal tells them to use a file
style db e.g. "dist/package.conf.inplace" and, so long as that db is
empty (ie content is []) then they'll instead us a dir style db with
the same name but ".d" appended, so in this example that would be
"dist/package.conf.inplace.d". We have to use a separate dir rather
than transparently upgrading because old Cabal really assumes the path
is a file, and if it encounters a dir it will fail.

This seems to be enough for older Cabal to work, and may well be enough
for other scripts that create dbs using "echo [] > package.conf".

Test Plan:
validate and check new and old cabal can sucessfully install things,
including packages that have internal deps (ie using the inplace db)

Reviewers: hvr, tibbe, austin

Reviewed By: tibbe, austin

Subscribers: thomie

Differential Revision:

4 years agoClarify the documentation for 'evaluate'
Roman Cheplyaka [Mon, 9 Feb 2015 19:44:03 +0000 (13:44 -0600)] 
Clarify the documentation for 'evaluate'


Reviewers: hvr, Mikolaj, austin

Reviewed By: Mikolaj, austin

Subscribers: ezyang, nomeata, thomie

Differential Revision:

4 years agoRemove deprecated libraries/base/include/Typeable.h
Thomas Miedema [Mon, 9 Feb 2015 19:42:53 +0000 (13:42 -0600)] 
Remove deprecated libraries/base/include/Typeable.h

Test Plan: I grepped for other references, there were none.

Reviewers: ekmett, hvr, austin

Reviewed By: austin

Subscribers: ekmett, thomie, carter

Differential Revision:

4 years agoReplace .lhs with .hs in compiler comments
Yuri de Wit [Mon, 9 Feb 2015 19:41:02 +0000 (13:41 -0600)] 
Replace .lhs with .hs in compiler comments

Summary: It looks like during .lhs -> .hs switch the comments were not updated. So doing exactly that.

Reviewers: austin, jstolarek, hvr, goldfire

Reviewed By: austin, jstolarek

Subscribers: thomie, goldfire

Differential Revision:

GHC Trac Issues: #9986

4 years agoProvide default implementation of `Monad(return)`
Herbert Valerio Riedel [Sun, 8 Feb 2015 19:56:58 +0000 (20:56 +0100)] 
Provide default implementation of `Monad(return)`

This was dropped last-minute from d94de87252d0fe2ae97341d186b03a2fbe136b04
(re #4834) together with the default implementation for `(>>)`
(see 65f887e1a0d864526f6a2609a3afc2c151c25e38 for explanation).

However, the risk of accidental mutually recursive definitions of
`return`/`pure` is rather low as unlike with the `(>>) = (*>)` default,
any cyclic definitions would necessarily wind up being new ones, rather
than changing the semantics for old operations and introducing bottoms.

On the other hand, not having the default method implementation in place
in GHC 7.10 would complicate/delay any future attempt to clean-up the

This finally allows (for `base >= 4.8`) to define a F/A/M instance-chain
with the following minimal definitions (while ignoring that `return` is
still a class-method in `Monad`)

  instance Functor M where
    fmap  = ...

  instance Applicative M where
    pure  = ...
    (<*>) = ...

  instance Monad M where
    (>>=) = ...

Reviewed By: ekmett, austin

Differential Revision:

4 years agoRemove the *o pattern in testsuite/.gitignore
Simon Peyton Jones [Fri, 6 Feb 2015 16:40:28 +0000 (16:40 +0000)] 
Remove the *o pattern in testsuite/.gitignore

It cause the entire testsuite/test/mdo directory to be ignored.
We already ignore *.o files.  Maybe there are some other suffixes
we need to add, but ignoring *o isn't good!

4 years agoFix Trac #10004: head [] exception when using recursive mdo
Simon Peyton Jones [Fri, 6 Feb 2015 16:38:52 +0000 (16:38 +0000)] 
Fix Trac #10004: head [] exception when using recursive mdo

4 years agoTest Trac #10041
Simon Peyton Jones [Fri, 6 Feb 2015 15:16:51 +0000 (15:16 +0000)] 
Test Trac #10041

4 years agoFix the nullary-type-class case for associated types
Simon Peyton Jones [Fri, 6 Feb 2015 15:04:50 +0000 (15:04 +0000)] 
Fix the nullary-type-class case for associated types

It was already ok for methods.
Fixes Trac #10020

4 years agoPut parens around (ty :: kind) when pretty-printing TH syntax
Simon Peyton Jones [Fri, 6 Feb 2015 14:48:33 +0000 (14:48 +0000)] 
Put parens around (ty :: kind) when pretty-printing TH syntax

See Note [Pretty-printing kind signatures] in Language.Haskell.TH.Ppr.hs,
and Trac #10050.

4 years agoComments only
Simon Peyton Jones [Fri, 6 Feb 2015 12:32:01 +0000 (12:32 +0000)] 
Comments only

4 years agoComments only
Simon Peyton Jones [Tue, 3 Feb 2015 15:40:42 +0000 (15:40 +0000)] 
Comments only

4 years agoMake -ddump-splices output to stdout (fixes #8796)
Alexander Vershilov [Thu, 5 Feb 2015 23:43:32 +0000 (17:43 -0600)] 
Make -ddump-splices output to stdout (fixes #8796)

Fixes debug output so all info messages will use
stdout. Fixes #8796.

Make -ddump-splices output to stdout (fixes #8796)
Make -dverbose-core2core use stdout (fixes #8796)

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #8796

4 years agoEta-expand argument to foldr in mapM_ for []
David Feuer [Thu, 5 Feb 2015 23:42:50 +0000 (17:42 -0600)] 
Eta-expand argument to foldr in mapM_ for []

This improves performance, at least sometimes--the previous
implementation can be worse than the version in base 4.7. I
have not had the time to run benchmarks and such, but `mapM`
already does this.

Also, inline `mapM_`, like `mapM`.

Reviewers: hvr, nomeata, ekmett, austin

Reviewed By: ekmett, austin

Subscribers: thomie

Projects: #ghc

Differential Revision:

GHC Trac Issues: #10034

4 years agoAdd packageName to GHC.Generics.Datatype
Oleg Grenrus [Thu, 5 Feb 2015 23:42:36 +0000 (17:42 -0600)] 
Add packageName to GHC.Generics.Datatype

Summary: Added packageName to GHC.Generics.Datatype class definition

Reviewers: hvr, dreixel, austin

Reviewed By: dreixel, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10030

4 years agoGRHS with empty wherebinds gets wrong SrcSpan
Alan Zimmerman [Thu, 5 Feb 2015 23:37:42 +0000 (17:37 -0600)] 
GRHS with empty wherebinds gets wrong SrcSpan

When parsing a rhs, the GRHS is constructed via unguardedRHS which is
given a SrcSpan which only takes account of the '=' and wherebinds, so
does not include the exp when wherebinds are empty.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

4 years agoBring Match m_fun_id_infix through the renamer.
Alan Zimmerman [Thu, 5 Feb 2015 23:36:57 +0000 (17:36 -0600)] 
Bring Match m_fun_id_infix through the renamer.

This is a first step for #9988

It turns out that bringing m_fun_id_infix through the renamer is
actually very simple, affecting the internals of rnMatch' only.

Is this simple enough to hit 7.10.1?

Test Plan: ./validate

Reviewers: hvr, simonpj, austin

Reviewed By: simonpj, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9988

4 years agofix _FILE_OFFSET_BITS redefined warning on Solaris/i386 platform
Karel Gardas [Thu, 5 Feb 2015 23:35:45 +0000 (17:35 -0600)] 
fix _FILE_OFFSET_BITS redefined warning on Solaris/i386 platform

The problem with Solaris is that system header files include
/usr/include/sys/feature_tests.h header file and it tests if
_FILE_OFFSET_BITS define is defined. If not, it defines it to 32
which is in conflict with 64 which we need for large file support.
The solution is easy, always include own header files before system header

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

4 years agoFix a profiling bug
Simon Marlow [Wed, 28 Jan 2015 11:25:52 +0000 (11:25 +0000)] 
Fix a profiling bug

We were erroneously discarding SCCs on function-typed variables.
These can affect the call stack, so we have to retain them.  The bug
was introduced during the recent SourceNote refactoring.

This is an alternative to the fix proposed in D616.  I also added the
scc005 test from that diff, which works with this change.

While I was here, I also fixed up the other profiling tests, marking a
few as expect_broken_for(10037) where the opt/unopt output differs in
non-fatal ways.

Test Plan: profiling tests

Reviewers: scpmw, ezyang, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10007

4 years agoFix #10017
Andreas Voellmy [Mon, 2 Feb 2015 15:50:52 +0000 (10:50 -0500)] 
Fix #10017

In the threaded RTS, a signal is delivered from the RTS to Haskell
user code by writing to file that one of the IO managers watches (via
an instance of GHC.Event.Control.Control). When the IO manager
receives the signal, it calls GHC.Conc.Signal.runHandlers to invoke
Haskell signal handler. In the move from a single IO manager to one IO
manager per capability, the behavior was (wrongly) extended so that a
signal is delivered to every event manager (see #9423), each of which
invoke Haskell signal handlers, leading to multiple invocations of
Haskell signal handlers for a single signal. This change fixes this
problem by having the RTS (in generic_handler()) notify only the
Control instance used by the TimerManager, rather than all the
per-capability IO managers.

Reviewers: austin, hvr, simonmar, Mikolaj

Reviewed By: simonmar, Mikolaj

Subscribers: thomie

Differential Revision:

4 years agoUse strict atomicModifyIORef' (added in GHC 7.6).
Edward Z. Yang [Wed, 28 Jan 2015 00:20:54 +0000 (16:20 -0800)] 
Use strict atomicModifyIORef' (added in GHC 7.6).

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

Test Plan: validate

Reviewers: austin, hvr

Subscribers: thomie

Differential Revision:

4 years agoImprove error message on typed holes, and user manual (Tradc #10040)
Simon Peyton Jones [Wed, 28 Jan 2015 14:31:52 +0000 (14:31 +0000)] 
Improve error message on typed holes, and user manual (Tradc #10040)

4 years agoupdate submodule
Simon Marlow [Wed, 28 Jan 2015 11:34:26 +0000 (11:34 +0000)] 
update submodule

4 years agoFix #10031 by inverting a critical test in kick_out.
Richard Eisenberg [Tue, 27 Jan 2015 16:40:26 +0000 (11:40 -0500)] 
Fix #10031 by inverting a critical test in kick_out.

The documentation (Note [The flattening story] in TcFlatten) was
correct; it's just the implementation that was not.

Test in typecheck/should_compile/T10031

Test Plan: validate

Reviewers: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10031

4 years agoAdd cost semantics for STG profiling.
Edward Z. Yang [Tue, 27 Jan 2015 18:43:57 +0000 (10:43 -0800)] 
Add cost semantics for STG profiling.

Signed-off-by: Edward Z. Yang <>
4 years agoRTS : Fix StgRun for aarch64-linux (#9935).
Erik de Castro Lopo [Mon, 26 Jan 2015 23:12:49 +0000 (10:12 +1100)] 
RTS : Fix StgRun for aarch64-linux (#9935).

The GCC assembler doesn't seem to recognise the 'fp' and 'lr' register
names which are aliases for 'x29' and 'x30' respectively.

Depends on D598.

Test Plan: validate

Reviewers: lukexi, bgamari, austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9935

5 years agoRevert zipWith strictification (re #9949)
David Feuer [Fri, 23 Jan 2015 09:04:49 +0000 (10:04 +0100)] 
Revert zipWith strictification (re #9949)

Also remove foldr2/right rule to avoid possibly introducing
bottoms with rules.

This effectively reverts most of 488e95b433d4f7568aa89622c729e64aa3b6520d

Reviewed By: nomeata

Differential Revision:

5 years agoRevert "Update Haddock submodule"
Herbert Valerio Riedel [Fri, 23 Jan 2015 07:27:38 +0000 (08:27 +0100)] 
Revert "Update Haddock submodule"

This reverts commit 34d68d8e83676c5010e9bc5d4619f24879f222af
as it breaks the build:

  Configuring hsc2hs-0.67...
  Configuring ghc-cabal-0.1...
  Configuring parallel-
  Configuring hpc-bin-0.67...
  Configuring haddock-2.16.0...
  ghc-cabal: At least the following dependencies are missing:
  ghc >=7.9 && <7.11
  make[1]: *** [utils/haddock/dist/] Error 1
  make[1]: *** Waiting for unfinished jobs....
    GHC PKG libraries/parallel/dist-install/
  Reading package info from "libraries/parallel/dist-install/inplace-pkg-config" ... done.
  parallel- Warning: haddock-interfaces: /srv/builds/commits/rGHC/B3035-34d68d8e83676c5010e9bc5d4619f24879f222af/libraries/parallel/dist-install/doc/html/parallel/parallel.haddock doesn't exist or isn't a file
  parallel- cannot find any of ["Control/Seq.hi","Control/Seq.p_hi","Control/Seq.dyn_hi"] (ignoring)
  parallel- cannot find any of ["Control/Parallel.hi","Control/Parallel.p_hi","Control/Parallel.dyn_hi"] (ignoring)
  parallel- cannot find any of ["Control/Parallel/Strategies.hi","Control/Parallel/Strategies.p_hi","Control/Parallel/Strategies.dyn_hi"] (ignoring)
  parallel- cannot find any of ["libHSparal_791B1zx5CJ25cUOFECtmw0.a","libHSparal_791B1zx5CJ25cUOFECtmw0.p_a","","libHSparal_791B1zx5CJ25cUOFECtmw0-ghc7.11.20150123.dylib","HSparal_791B1zx5CJ25cUOFECtmw0-ghc7.11.20150123.dll"] on library path (ignoring)
  make: *** [all] Error 2

Moreover, utils/haddock is supposed to track the `ghc-head` branch
(which is what `git submodule update --remote utils/haddock` helps with)

5 years agoUpdate Haddock submodule
Mateusz Kowalczyk [Fri, 23 Jan 2015 00:14:00 +0000 (00:14 +0000)] 
Update Haddock submodule

5 years agoUpdate binary submodule to release
Herbert Valerio Riedel [Thu, 22 Jan 2015 22:06:14 +0000 (23:06 +0100)] 
Update binary submodule to release

One highlight of is the new instance for `Natural`

5 years agoRestore invariant in `Data (Ratio a)` instance
Herbert Valerio Riedel [Wed, 21 Jan 2015 07:21:36 +0000 (08:21 +0100)] 
Restore invariant in `Data (Ratio a)` instance

(2nd attempt, this time leaving the `Constr` using `":%"`)

The Data instance for `Ratio` just uses the raw `:%` constructor and
doesn't check that the result is reduced to normal form.

The fix is to add back the `Integral` constraint on the Data
instance (which was dropped in c409b6f30373535) and to use `%` rather
than `:%` in the `gfoldl` and `gunfold` implementation.

This restores the invariant and matches the behavior of "virtual
constructors" we've used to patch up such problems elsewhere.

This addresses #10011

Reviewed By: ekmett, austin

Differential Revision:

5 years ago32-bit performance wibbles (second attempt)
Simon Peyton Jones [Thu, 22 Jan 2015 10:55:48 +0000 (10:55 +0000)] 
32-bit performance wibbles (second attempt)

Updates the performance numbers for 32-bit windows.  I tried to do
this before with 387f1d1ec, but accidentally included some unrelated

5 years agoRevert "32-bit performance wibbles"
Simon Peyton Jones [Thu, 22 Jan 2015 10:52:02 +0000 (10:52 +0000)] 
Revert "32-bit performance wibbles"

This reverts commit 387f1d1ec334788c3e891e9304d427bc804998f4.

Bizarrely, this commit accidentally added libraries/haskell98.
So I'll revert it entirely and start again.

5 years agoUpdate a few performance numbers
Joachim Breitner [Thu, 22 Jan 2015 10:27:35 +0000 (11:27 +0100)] 
Update a few performance numbers

to have less annoying false negatives on

5 years agoMerge branch 'master' of ssh://
Simon Peyton Jones [Thu, 22 Jan 2015 09:42:30 +0000 (09:42 +0000)] 
Merge branch 'master' of ssh://

5 years agoRevert "Restore invariant in `Data (Ratio a)` instance"
Herbert Valerio Riedel [Wed, 21 Jan 2015 21:13:07 +0000 (22:13 +0100)] 
Revert "Restore invariant in `Data (Ratio a)` instance"

This reverts commit 79b0d0e633af8302d2dd907663a4a231cd889b67
due to

  Compile failed (status 256) errors were:
  [1 of 2] Compiling A                ( A.hs, A.o )
  [2 of 2] Compiling Main             ( T4491.hs, T4491.o )
    Illegal data constructor name: â€˜%’
    When splicing a TH expression: (GHC.Real.%) 11 2
    In the splice: $(dataToExpQ (const Nothing) (5.5 :: Rational))
  *** unexpected failure for T4491(normal)

Therefore re-opening #10011

5 years agoRestore invariant in `Data (Ratio a)` instance
Herbert Valerio Riedel [Wed, 21 Jan 2015 07:21:36 +0000 (08:21 +0100)] 
Restore invariant in `Data (Ratio a)` instance

The Data instance for `Ratio` just uses the raw `:%` constructor and
doesn't check that the result is reduced to normal form.

The fix is to add back the `Integral` constraint on the Data
instance (which was dropped in c409b6f30373535) and to use `%` rather
than `:%` in the `gfoldl` and `gunfold` implementation.

This restores the invariant and matches the behavior of "virtual
constructors" we've used to patch up such problems elsewhere.

This addresses #10011

Reviewed By: ekmett, austin

Differential Revision:

5 years agoUpdate Backpack document with examples [skip ci]
Edward Z. Yang [Wed, 21 Jan 2015 16:13:09 +0000 (08:13 -0800)] 
Update Backpack document with examples [skip ci]

Signed-off-by: Edward Z. Yang <>
5 years agocompiler/parser/cutils: drop unused 'ghc_memcmp_off' helper
Sergei Trofimovich [Tue, 20 Jan 2015 23:27:08 +0000 (23:27 +0000)] 
compiler/parser/cutils: drop unused 'ghc_memcmp_off' helper

Function came out of use in 2006:
> commit 9d7da331989abcd1844e9d03b8d1e4163796fa85
> Author: simonmar <unknown>
> Date:   Fri Jan 6 16:30:19 2006 +0000
>     [project @ 2006-01-06 16:30:17 by simonmar]
>     Add support for UTF-8 source files

Found by uselex.rb:
ghc_memcmp_off: [R]: exported from: ./compiler/stage1/build/parser/cutils.o ./compiler/stage2/build/parser/cutils.o

Signed-off-by: Sergei Trofimovich <>
5 years agocmm lex: drop unused 'align' token
Sergei Trofimovich [Tue, 20 Jan 2015 23:04:31 +0000 (23:04 +0000)] 
cmm lex: drop unused 'align' token

Max removed 'align' token from parser productions long ago:
> commit ec39750268da134c906b8bb4b7d61763d4ea5c2e
> Author: Max Bolingbroke <>
> Date:   Tue Jul 5 09:31:08 2011 +0100
>     Remove the unused CmmAlign and CmmDataLabel from CmmStatic

This patch drops 'align' from lexer as well.

Signed-off-by: Sergei Trofimovich <>
5 years agoSome simplification and refactoring of FunDeps
Simon Peyton Jones [Tue, 20 Jan 2015 17:56:09 +0000 (17:56 +0000)] 
Some simplification and refactoring of FunDeps

Nothing magical here, but the data types had grown more complicated
than we really needed, so there were some worthwhile simplifications
to be had.

No change in functionality.

5 years agoTest Trac #9975
Simon Peyton Jones [Tue, 20 Jan 2015 17:31:54 +0000 (17:31 +0000)] 
Test Trac #9975

5 years ago32-bit performance wibbles
Simon Peyton Jones [Tue, 20 Jan 2015 17:31:13 +0000 (17:31 +0000)] 
32-bit performance wibbles

Less for GHC, more for Haddock

5 years agoCosmetic: Fix all uses of the word 'worker' when referring to pattern synonym builders
Dr. ERDI Gergo [Tue, 20 Jan 2015 11:30:42 +0000 (19:30 +0800)] 
Cosmetic: Fix all uses of the word 'worker' when referring to pattern synonym builders

5 years agoMake the linker_unload test less fragile
Simon Marlow [Tue, 20 Jan 2015 11:59:25 +0000 (03:59 -0800)] 
Make the linker_unload test less fragile

Now it invokes the GHC API to load packages, rather than trying to do it
manually.  This should fix most of the issues we've had with this test,
and might make it work on Windows too.

5 years agocomments only
Simon Marlow [Wed, 14 Jan 2015 08:45:07 +0000 (08:45 +0000)] 
comments only

5 years agoCMM: add a mechanism to import C .data labels
Sergei Trofimovich [Mon, 19 Jan 2015 22:27:06 +0000 (16:27 -0600)] 
CMM: add a mechanism to import C .data labels

This introduces new .cmm syntax for import:

    'import' 'CLOSURE' <identifier>;

Currently cmm syntax allows importing only function labels:

    import pthread_mutex_lock;

but sometimes ghc needs to import global gariables
or haskell closures:

    import ghczmprim_GHCziTypes_True_closure;
    import base_ControlziExceptionziBase_nestedAtomically_closure;
    import ghczmprim_GHCziTypes_False_closure;
    import sm_mutex;

It breaks on ia64 where there is a difference in
pointers to data and pointer to functions.

Patch fixes threaded runtime on ia64 where
dereference of 'sm_mutex' from CMM led to
incurrect location.

Exact breakage machanics are the same as in e18525fae273f4c1ad8d6cbe1dea4fc074cac721

Merge into the 7.10 branch

Signed-off-by: Sergei Trofimovich <>
Test Plan: passes ./validate, makes ghci work on ghc-7.8.4

Reviewers: simonmar, simonpj, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

5 years agoExpose source locations via Implicit Parameters of type GHC.Location.Location
Eric Seidel [Mon, 19 Jan 2015 22:08:32 +0000 (16:08 -0600)] 
Expose source locations via Implicit Parameters of type GHC.Location.Location

IPs with this type will always be solved for the current source
location. If another IP of the same type is in scope, the two locations will be
appended, creating a call-stack. The Location type is kept abstract so users
cannot create them, but a Location can be turned into a list of SrcLocs, which
correspond to individual locations in a program. Each SrcLoc contains a
package/module/file name and start/end lines and columns.

The only thing missing from the SrcLoc in my opinion is the name of the
top-level definition it inhabits. I suspect that would also be useful, but it's
not clear to me how to extract the current top-level binder from within the
constraint solver. (Surely I'm just missing something here?)

I made the (perhaps controversial) decision to have GHC completely ignore
the names of Location IPs, meaning that in the following code:

    bar :: (?myloc :: Location) => String
    bar = foo

    foo :: (?loc :: Location) => String
    foo = show ?loc

if I call `bar`, the resulting call-stack will include locations for

1. the use of `?loc` inside `foo`,
2. `foo`s call-site inside `bar`, and
3. `bar`s call-site, wherever that may be.

This makes Location IPs very special indeed, and I'm happy to change it if the
dissonance is too great.

I've also left out any changes to base to make use of Location IPs, since there
were some concerns about a snowball effect. I think it would be reasonable to
mark this as an experimental feature for now (it is!), and defer using it in
base until we have more experience with it. It is, after all, quite easy to
define your own version of `error`, `undefined`, etc. that use Location IPs.

Test Plan: validate, new test-case is testsuite/tests/typecheck/should_run/IPLocation.hs

Reviewers: austin, hvr, simonpj

Reviewed By: simonpj

Subscribers: simonmar, rodlogic, carter, thomie

Differential Revision:

GHC Trac Issues: #9049

5 years agoUpgrade Cabal submodule to latest HEAD, change to package key calculation.
Edward Z. Yang [Sat, 10 Jan 2015 00:53:22 +0000 (16:53 -0800)] 
Upgrade Cabal submodule to latest HEAD, change to package key calculation.

One notable change is that the package key calculation algorithm in Cabal
has changed (from an undocumented format based on Show instances to a fully
specified format), so you will need to do a full rebuild.

I'd greatly prefer if this could be merged to 7.10.

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

Reviewers: austin


GHC Trac Issues:

5 years agoRespect package visibility when deciding wired in packages.
Edward Z. Yang [Mon, 19 Jan 2015 18:23:46 +0000 (10:23 -0800)] 
Respect package visibility when deciding wired in packages.

Previously, we would consider ALL versions of a wired-in package,
no matter if they were exposed or not, and pick the latest version.
This patch is a minor refinement on the behavior: now we try to
pick the wired in package from just the list of exposed packages,
and if there are no candidates fall back on the full list.  This
means that if you do:

    -hide-all-packages -package wired-in-OLD-VERSION

it will actually work by default (whereas previously you needed
to *explicitly* -ignore-package the newer version).  This is especially
useful for the 'ghc' package.  Fixes #9955.

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

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9955

5 years agoTidy up fix to Trac #9999
Simon Peyton Jones [Mon, 19 Jan 2015 16:45:31 +0000 (16:45 +0000)] 
Tidy up fix to Trac #9999

Minor refactoring only

5 years agoDoc fix (follow up to #9957)
Austin Seipp [Mon, 19 Jan 2015 14:23:51 +0000 (08:23 -0600)] 
Doc fix (follow up to #9957)

Signed-off-by: Austin Seipp <>
5 years agoAPI Annotations documentation update, parsing issue, add example test
Alan Zimmerman [Mon, 19 Jan 2015 14:15:18 +0000 (08:15 -0600)] 
API Annotations documentation update, parsing issue, add example test

Add a reference note to each AnnKeywordId haddock comment so GHC
developers will have an idea why they are there.

Add a new test to ghc-api/annotations to serve as a template for other
GHC developers when they need to update the parser. It provides output
which checks that each SrcSpan that an annotation is attached to
actually appears in the `ParsedSource`, and lists the individual
annotations. The idea is that a developer writes a version of this
which parses a sample file using whatever syntax is changed in
Parser.y, and can then check that all the annotations come through.

Depends on D538

Test Plan: ./validate

Reviewers: simonpj, hvr, austin

Reviewed By: austin

Subscribers: thomie, jstolarek

Differential Revision:

5 years agoAdd missing test from previous commit (55199a97)
Austin Seipp [Mon, 19 Jan 2015 14:10:58 +0000 (08:10 -0600)] 
Add missing test from previous commit (55199a97)

Signed-off-by: Austin Seipp <>
5 years agoUpdate directory submodule to latest 1.2.2 snapshot
Herbert Valerio Riedel [Mon, 19 Jan 2015 13:39:57 +0000 (14:39 +0100)] 
Update directory submodule to latest 1.2.2 snapshot

5 years agoSplit stripTicks into expression editing and tick collection
Peter Wortmann [Mon, 19 Jan 2015 13:57:19 +0000 (07:57 -0600)] 
Split stripTicks into expression editing and tick collection

As with stripTicksTop, this is because we often need the stripped
expression but not the ticks (at least not right away). This makes a big
difference for CSE, see #9961.

Signed-off-by: Austin Seipp <>
5 years agoMake AutoDeriveTypeable work for associated datatypes (fix #9999)
Jose Pedro Magalhaes [Mon, 19 Jan 2015 13:36:03 +0000 (13:36 +0000)] 
Make AutoDeriveTypeable work for associated datatypes (fix #9999)

5 years agoRevert "Add export lists to some modules."
Austin Seipp [Mon, 19 Jan 2015 12:55:57 +0000 (06:55 -0600)] 
Revert "Add export lists to some modules."

This reverts commit d6e7f5dc9db7e382ce34d649f85505176a451a04.

This commit broke the build on Windows due to CPP weirdness (#9945).

5 years agoRevert "Fix undefined GHC.Real export with integer-simple"
Austin Seipp [Mon, 19 Jan 2015 12:54:54 +0000 (06:54 -0600)] 
Revert "Fix undefined GHC.Real export with integer-simple"

This reverts commit 228902aa4a3350a9c99e421c0c989c7de794b7b6.

This commit is dependent on d6e7f5dc9db7e382ce34d649f85505176a451a04,
which broke the build on Windows (issue #9945).

5 years agoTest Trac #9867
Simon Peyton Jones [Mon, 19 Jan 2015 11:59:28 +0000 (11:59 +0000)] 
Test Trac #9867

5 years agoImprove documentation of pattern synonyms, to reflect conclusion of Trac #9953
Simon Peyton Jones [Mon, 19 Jan 2015 11:58:54 +0000 (11:58 +0000)] 
Improve documentation of pattern synonyms, to reflect conclusion of Trac #9953

5 years agoFix bad '... \\' escape in ghcversion.h generation
Herbert Valerio Riedel [Mon, 19 Jan 2015 11:18:02 +0000 (12:18 +0100)] 
Fix bad '... \\' escape in ghcversion.h generation

Today I learned about the peculiarities of escaping within

Turns out,

  echo 'foo \\'


  foo \\

rather than escaping the '\'. Curiously, if you need to escape a '
within single-quotes, here's how to do it

  echo 'foo '\'' bar'

which will emit

  foo ' bar

This fixes #10002

5 years agoUpdate bytestring submodule
Herbert Valerio Riedel [Mon, 19 Jan 2015 11:08:58 +0000 (12:08 +0100)] 
Update bytestring submodule

This pulls in

- (which is related to #9992)

5 years agoAdd missing argument in Match, a merge bug (apologies)
Simon Peyton Jones [Mon, 19 Jan 2015 10:20:39 +0000 (10:20 +0000)] 
Add missing argument in Match, a merge bug (apologies)

5 years agoFix the 'builder' code for pattern synonyms with type signatures
Simon Peyton Jones [Mon, 19 Jan 2015 09:06:21 +0000 (09:06 +0000)] 
Fix the 'builder' code for pattern synonyms with type signatures

See Note [Type signatures and the builder expression] for the details

5 years agoTrac #9384: fix increasing capabilites number for eventlog.
Alexander Vershilov [Sun, 18 Jan 2015 10:58:57 +0000 (10:58 +0000)] 
Trac #9384: fix increasing capabilites number for eventlog.

Event log had inconcistent support for increacing capabilies
number, as header were not inserted in capability buffer. It
resulted in a ghc-events crash (see #9384). This commit
fixes this issue by inserting required header when number
of capabilies grows.

Reviewers: simonmar, Mikolaj, trofi, austin

Reviewed By: Mikolaj, trofi, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9384

5 years agoAPI Annotations tweaks.
Alan Zimmerman [Thu, 15 Jan 2015 19:11:21 +0000 (13:11 -0600)] 
API Annotations tweaks.

HsTyLit now has SourceText

Update documentation of HsSyn to reflect which annotations are attached to which element.

Ensure that the parser always keeps HsSCC and HsTickPragma values, to
be ignored in the desugar phase if not needed

Bringing in SourceText for pragmas

Add Location in NPlusKPat

Add Location in FunDep

Make RecCon payload Located

Explicitly add AnnVal to RdrName where it is compound

Add Location in IPBind

Add Location to name in IEThingAbs

Add Maybe (Located id,Bool) to Match to track fun_id,infix
  This includes converting Match into a record and adding a note about why
  the fun_id needs to be replicated in the Match.

Add Location in KindedTyVar

Sort out semi-colons for parsing

  - import statements
  - stmts
  - decls
  - decls_cls
  - decls_inst

This updates the haddock submodule.

Test Plan: ./validate

Reviewers: hvr, austin, goldfire, simonpj

Reviewed By: simonpj

Subscribers: thomie, carter

Differential Revision:

5 years agoTrac #9878: Make the static form illegal in interpreted mode.
Alexander Vershilov [Wed, 14 Jan 2015 23:58:30 +0000 (17:58 -0600)] 
Trac #9878: Make the static form illegal in interpreted mode.

The entries of the static pointers table are expected to exist as
object code. Thus we have ghci complain with an intelligible error
message if the static form is used in interpreted mode.

It also includes a fix to keysHashTable in Hash.c which could cause a
crash. The iteration of the hashtable internals was incorrect. This
patch has the function keysHashTable imitate the iteration in

Finally, we submit here some minor edits to comments and
GHC.StaticPtr.StaticPtrInfo field names.

Authored-by: Alexander Vershilov <alexander.vershilov@tweag.
Authored-by: Facundo Domínguez <>
Test Plan: ./validate

Reviewers: simonpj, hvr, austin

Reviewed By: austin

Subscribers: carter, thomie, qnikst, mboes

Differential Revision:

GHC Trac Issues: #9878

5 years agoDon't hardcode the name "ghc" in versionedAppDir
Edsko de Vries [Wed, 14 Jan 2015 23:58:13 +0000 (17:58 -0600)] 
Don't hardcode the name "ghc" in versionedAppDir

Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

5 years agoFix a terrible bug in the canonicaliser which led to an infinite loop
Simon Peyton Jones [Fri, 16 Jan 2015 14:18:34 +0000 (14:18 +0000)] 
Fix a terrible bug in the canonicaliser which led to an infinite loop

This fixes Trac #9971

Merge into the 7.10 branch

5 years agoRepsect the package name when checking for self-import
Simon Peyton Jones [Fri, 16 Jan 2015 14:17:14 +0000 (14:17 +0000)] 
Repsect the package name when checking for self-import

Fixes Trac #9997.

In doing this I tripped across the specialness of "this" in
PackageImports.  The magic constant (fsLit "this") is scattered across
the compiler and ought to be put in one place.  But where?

5 years agoAdd Eq, Ord, Show, and Read instances for Const
Fumiaki Kinoshita [Wed, 14 Jan 2015 11:41:30 +0000 (20:41 +0900)] 
Add Eq, Ord, Show, and Read instances for Const

As suggested in

this adds the following instances

 - `Show a => Show (Const a b)`
 - `Read a => Read (Const a b)`
 - `Eq a   => Eq   (Const a b)`
 - `Ord a  => Ord  (Const a b)`

The Read/Show instances are defined in such a way as if `Const` was defined
without record-syntax (i.e. as `newtype Const a b = Const a`)

Addresses #9984

Reviewed By: ekmett

Differential Revision:

5 years agoTest Trac #5821
Simon Peyton Jones [Wed, 14 Jan 2015 17:12:29 +0000 (17:12 +0000)] 
Test Trac #5821

And rename the wrongly named rebindable/T5821 to T5908 (Trac #5908)

5 years agoRefactor handling of SPECIALISE pragmas (Trac #5821)
Simon Peyton Jones [Wed, 14 Jan 2015 10:58:22 +0000 (10:58 +0000)] 
Refactor handling of SPECIALISE pragmas (Trac #5821)

The provoking cause was Trac #5821, which concerned
type families, but in fixing it I did the usual round
of tidying up and docmenting.

The main comment is now
    Note [Handling SPECIALISE pragmas]
in TcBinds.

It is "wrinkle 2" that fixes #5821.

5 years agoTiny refactoring (shorter, simpler code)
Simon Peyton Jones [Wed, 14 Jan 2015 10:55:17 +0000 (10:55 +0000)] 
Tiny refactoring (shorter, simpler code)

5 years agoTighten up constraint solve order for RULES
Simon Peyton Jones [Wed, 14 Jan 2015 10:53:49 +0000 (10:53 +0000)] 
Tighten up constraint solve order for RULES

The main point is described in Note [Solve order for RULES].
I'm not sure if the potential bug described there could actually
happen, but I bet it could.  Anyway, this patch explicitly solves
LHS constraints and *then* RHS constraints (see the Note).

I also moved simplifyRule from TcSimplify (a large module) to
TcRules (a small one), which brings related code together.
It did mean I had to export runTcS from TcSimplify, but I think
that's a price worth paying.

5 years agoCorrect typos in comments to mkDataCon
Simon Peyton Jones [Mon, 12 Jan 2015 11:19:10 +0000 (11:19 +0000)] 
Correct typos in comments to mkDataCon

5 years agoOptimise scavenge_large_srt_bitmap
Simon Marlow [Tue, 13 Jan 2015 20:33:20 +0000 (20:33 +0000)] 
Optimise scavenge_large_srt_bitmap

Very large modules can sometimes contain very large SRT bitmaps (this
is a separate problem that I need to look into).  The large bitmaps
often contain a lot of zeros, so this patch skips over empty words in
the bitmap.

It makes a dramatic difference in the particular example that I saw,
where an old gen GC was taking 0.5s before this change and 0.07s after

5 years agoCompile the RTS with -g by default
Simon Marlow [Tue, 13 Jan 2015 20:23:35 +0000 (20:23 +0000)] 
Compile the RTS with -g by default

Having debugging info doesn't hurt performance, can be stripped from
binaries, and it's useful for debugging and profiling.

5 years agoAllow the linker to run concurrently with the GC
Simon Marlow [Fri, 19 Dec 2014 20:10:40 +0000 (20:10 +0000)] 
Allow the linker to run concurrently with the GC

5 years agoImprove documentation for -N and -qa (#9890)
Simon Marlow [Tue, 16 Dec 2014 11:42:42 +0000 (11:42 +0000)] 
Improve documentation for -N and -qa (#9890)

5 years agoDwarf generation fixed pt 2
Peter Wortmann [Thu, 8 Jan 2015 21:19:56 +0000 (22:19 +0100)] 
Dwarf generation fixed pt 2

- Don't bracket HsTick expression uneccessarily
- Generate debug information in UTF8
- Reduce amount of information generated - we do not currently need
  block information, for example.

Special thanks to slyfox for the reports!

5 years agoFix panics of PartialTypeSignatures combined with extensions
Thomas Winant [Mon, 12 Jan 2015 11:29:50 +0000 (05:29 -0600)] 
Fix panics of PartialTypeSignatures combined with extensions

Disallow wildcards in stand-alone deriving instances
(StandaloneDeriving), default signatures (DefaultSignatures) and
instances signatures (InstanceSigs).

Test Plan: validate

Reviewers: austin

Reviewed By: austin

Subscribers: carter, thomie, monoidal

Differential Revision:

GHC Trac Issues: #9922

5 years agoTrac #9878: Have StaticPointers support dynamic loading.
Alexander Vershilov [Mon, 12 Jan 2015 11:29:18 +0000 (05:29 -0600)] 
Trac #9878: Have StaticPointers support dynamic loading.

A mutex is used to protect the SPT.

unsafeLookupStaticPtr and staticPtrKeys in GHC.StaticPtr are made

SPT entries are removed in a destructor function of modules.

Authored-by: Facundo Domínguez <>
Authored-by: Alexander Vershilov <>
Test Plan: ./validate

Reviewers: austin, simonpj, hvr

Subscribers: carter, thomie, qnikst, mboes

Differential Revision:

GHC Trac Issues: #9878

5 years agoPackage environments
Edsko de Vries [Mon, 12 Jan 2015 11:22:22 +0000 (05:22 -0600)] 
Package environments

Summary: Package environments are files with package IDs that indicate which packages should be visible; see entry in user guide for details.

Reviewers: duncan, austin

Reviewed By: duncan, austin

Subscribers: carter, thomie

Differential Revision:

5 years agoadd -th-file which generates a th.hs file
Greg Weber [Mon, 12 Jan 2015 11:16:37 +0000 (05:16 -0600)] 
add -th-file which generates a th.hs file

see Trac #8624

similar functionality is now available
with -ddump-to-file -ddump-splices

However, users are already accustomed to -ddump-splices
having a particular format, and this format is not completely valid code
The goal of -th-file is to dump valid Haskell code

Additionally, the convention of -ddump-to-file is to name the file after
the flag, so the file is .dump-splices
Given that the goal of the new flag is to generate valid Haskell,
The extension should be .hs

Additionally, -ddump-to-file effects all other dump flags

Test Plan:
look at the output of using the -th-file flag
and compare it to the output of using -ddump-to-file and -ddump-splices
I want to add test cases, but just need some pointers on getting started there

Reviewers: thomie, goldfire, simonpj, austin

Reviewed By: simonpj, austin

Subscribers: thomie, carter

Differential Revision:

GHC Trac Issues: #8624