4 years agoRelease 7.10.2 ghc-7.10.2-release
Ben Gamari [Tue, 21 Jul 2015 19:46:00 +0000 (21:46 +0200)] 
Release 7.10.2

4 years agoWhen iconv is unavailable, use an ASCII encoding to encode ASCII
Ben Gamari [Tue, 21 Jul 2015 19:46:38 +0000 (21:46 +0200)] 
When iconv is unavailable, use an ASCII encoding to encode ASCII

D898 and D1059 implemented a fallback behavior to handle the case
that the end user's iconv installation is broken (typically due to
running inside a chroot in which the necessary locale files and/or
gconv modules have not been installed). In this case, if the
program requests an ASCII locale, GHC's char8 encoding is used
rather than the program failing.

However, silently mangling data like char8 does when the programmer
did not ask for it is poor behavior, for reasons described in D1059.

This commit implements an ASCII encoding and uses it in the fallback
case when iconv is unavailable and the user has requested ASCII.

Test Plan:
Added tests for the encodings defined in Latin1.
Also, manually ran a statically-linked executable of that test
in a chroot and the tests passed (up to the ones that call
mkTextEncoding "LATIN1", since there is no fallback from iconv
for that case yet).

Reviewers: austin, hvr, hsyl20, bgamari

Reviewed By: hsyl20, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #7695, #10623

4 years ago7.10.2-notes: Mention API annotations fixes
Ben Gamari [Tue, 21 Jul 2015 18:18:00 +0000 (20:18 +0200)] 
7.10.2-notes: Mention API annotations fixes

4 years agobase: Mention SrcLoc in changelog
Ben Gamari [Tue, 21 Jul 2015 16:31:46 +0000 (18:31 +0200)] 
base: Mention SrcLoc in changelog

4 years agoalways use -fPIC on OpenBSD/AMD64 platform
Karel Gardas [Tue, 7 Jul 2015 16:35:09 +0000 (18:35 +0200)] 
always use -fPIC on OpenBSD/AMD64 platform

This patch switches -fPIC on for every invocation of GHC
on OpenBSD/AMD64 platform. The reason is OpenBSD's support
for PIE (PIC for executables) hence -fPIC is also needed
for GHC compiled code.

Fixes #10597

Reviewers: austin

Subscribers: thomie, bgamari

Differential Revision:

4 years agoDescribe IP SrcLoc change in release notes
Ben Gamari [Tue, 21 Jul 2015 09:43:29 +0000 (11:43 +0200)] 
Describe IP SrcLoc change in release notes

4 years agobuild: fix 'make help'
Austin Seipp [Sat, 7 Mar 2015 17:18:44 +0000 (11:18 -0600)] 
build: fix 'make help'

This fixes the usage of `make help` in the top-level and subdirectories.

Signed-off-by: Austin Seipp <>
Test Plan: It worked now and didn't before.

Reviewers: hvr

Reviewed By: hvr

Subscribers: thomie

Differential Revision:

4 years agoAnother comment with a leading # (sigh)
Simon Peyton Jones [Mon, 13 Jul 2015 12:30:47 +0000 (13:30 +0100)] 
Another comment with a leading # (sigh)

4 years agohaddock: Pull in fix for source link rendering
Ben Gamari [Sat, 18 Jul 2015 14:03:20 +0000 (16:03 +0200)] 
haddock: Pull in fix for source link rendering

Update haddock submodule

4 years agoRewrite announce file
Ben Gamari [Fri, 17 Jul 2015 17:47:56 +0000 (19:47 +0200)] 
Rewrite announce file

Incredibly enough this hasn't been touched since 6.10.1

4 years ago7.10.2-notes: Fix description of iconv bypass
Ben Gamari [Fri, 17 Jul 2015 17:46:56 +0000 (19:46 +0200)] 
7.10.2-notes: Fix description of iconv bypass

We now only handle ascii ourselves if iconv is unavailable.

4 years agoFix T10196 expected output
Ben Gamari [Wed, 15 Jul 2015 09:30:02 +0000 (05:30 -0400)] 
Fix T10196 expected output

4 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

Cherry-Picked-From: c024af131b9e2538486eb605ba8af6a8d10fe76d
Cherry-Picked-By: Niklas Hambüchen <>
Changes for the cherry-pick:

* Commit d2b6e767 "Make the location in TcLclEnv and CtLoc into a RealSrcSpan"
  was cherry-picked before to ensure that
    EvCsPushCall, EvCsTop :: EvCallStack
  can indeed carry `RealSrcSpan`s instead of `SrcSpan`s.
* The use of `setWantedEvBind` was replaced by `setEvBind`, as
  `setWantedEvBind` is not yet present in 7.10.1; it was added to
  the 7.12 series in commit 32973bf3.
* docs/users_guide/7.10.1-notes.xml was adjusted to contain the
  documentation about CallStack, copied from the 7.12 notes.

4 years agoMake the location in TcLclEnv and CtLoc into a RealSrcSpan
Simon Peyton Jones [Tue, 6 Jan 2015 12:28:37 +0000 (12:28 +0000)] 
Make the location in TcLclEnv and CtLoc into a RealSrcSpan

Previously it was a SrcSpan, which can be an UnhelpulSrcSpan,
but actually for TcLclEnv and CtLoc we always know it is
a real source location, and it's good to make the types
reflect that fact.

There is a continuing slight awkwardness (not new with this
patch) about what "file name" to use for GHCi code.  Current
we say "<interactive>" which seems just about OK.

4 years agoDo not treat prim and javascript imports as C imports in TH and QQ
Ben Gamari [Wed, 15 Jul 2015 08:19:33 +0000 (10:19 +0200)] 
Do not treat prim and javascript imports as C imports in TH and QQ

This fixes trac Trac #10638.

4 years agoMake sure rule LHSs are simplified
Simon Peyton Jones [Mon, 13 Jul 2015 11:58:34 +0000 (12:58 +0100)] 
Make sure rule LHSs are simplified

SpecConstr was generating a rule LHS with nested casts,
which the simplifier then optimised away.  Result: unbound
template variables.

Easily fixed.  See Note [SpecConstr call patterns]

4 years agoDo not optimise RULE lhs in substRule
Simon Peyton Jones [Mon, 13 Jul 2015 09:29:18 +0000 (10:29 +0100)] 
Do not optimise RULE lhs in substRule

This was causing Trac #10627.
See Note [Substitute lazily] in CoreSubst.

The bug was introduced by
   commit 30c17e7096919c55218083c8fcb98e6287552058
    Author: <unknown>
    Date:   Thu Nov 25 17:23:56 2010 +0000
    Substitution should just substitute, not optimise

The fix is not to optimise the RHS as well as not-optimising the LHS!
The simplifier does the right thing in Simplify.simplRule

4 years agoparser: Allow Lm (MODIFIER LETTER) category in identifiers
Thomas Miedema [Fri, 3 Jul 2015 20:37:18 +0000 (22:37 +0200)] 
parser: Allow Lm (MODIFIER LETTER) category in identifiers

Easy fix in the parser to stop regressions, due to Unicode 7.0 changing
the classification of some prior code points.

Signed-off-by: Austin Seipp <>
Test Plan: `tests/parser/should_compile/T10196.hs`

Reviewers: hvr, austin, bgamari

Reviewed By: austin, bgamari

Subscribers: thomie, bgamari

Differential Revision:

GHC Trac Issues: #10196

4 years agoParenthesization wibble in T10279.
Ben Gamari [Fri, 10 Jul 2015 07:45:48 +0000 (03:45 -0400)] 
Parenthesization wibble in T10279.

See Trac #10624.

4 years agoDon't repeat package key with -dppr-debug when package info is missing.
Edward Z. Yang [Tue, 7 Apr 2015 14:08:54 +0000 (09:08 -0500)] 
Don't repeat package key with -dppr-debug when package info is missing.

Signed-off-by: Edward Z. Yang <>
Reviewed By: austin

Differential Revision:

4 years agoMake mkQualPackage more robust when package key is bad.
Edward Z. Yang [Thu, 9 Jul 2015 17:21:51 +0000 (10:21 -0700)] 
Make mkQualPackage more robust when package key is bad.

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

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10624

4 years agoFix self-contained handling of ASCII encoding
Ben Gamari [Thu, 9 Jul 2015 12:07:54 +0000 (08:07 -0400)] 
Fix self-contained handling of ASCII encoding

D898 was primarily intended to fix hangs in the event that iconv was
unavailable (namely #10298 and #7695). In addition to this fix, it also
introduced self-contained handling of ANSI terminals to allow compiled
executables to run in minimal environments lacking iconv.

However, the behavior that the patch introduced is highly suspicious.
Specifically, it gives the user a UTF-8 encoding even if they requested

This has the potential to break quite a lot of code. At very least it
breaks GHC's Unicode terminal detection logic, which attempts to catch
an invalid character when encoding a pair of smart-quotes. Of course,
this exception will never be thrown if a UTF-8 encoder is used.

Here we use the `char8` encoding to handle requests for ASCII encodings.

Fixes #10623.

4 years agoFix T2507 expected output
Ben Gamari [Thu, 9 Jul 2015 13:39:30 +0000 (09:39 -0400)] 
Fix T2507 expected output

This seems to have been changed in
07282c7222d718e6d3df8d8f843d95d534dd7062 to include Unicode quotes
despite the fact that we explicitly set LC_ALL=C in the Makefile to
request standard ASCII output.

4 years agoAdd testcase for #10602
Ben Gamari [Thu, 9 Jul 2015 09:12:05 +0000 (05:12 -0400)] 
Add testcase for #10602

4 years agoRecenter performance numbers
Ben Gamari [Thu, 9 Jul 2015 08:40:49 +0000 (04:40 -0400)] 
Recenter performance numbers

These are fairly small changes. I'm just going to recenter these and
then focus on identifying the reason for the drift on master

4 years agoAdd an ambient Id substitution to Subst
Simon Peyton Jones [Wed, 8 Jul 2015 16:39:21 +0000 (17:39 +0100)] 
Add an ambient Id substitution to Subst

After a struggle, I fixed Trac #5113 (again) on the 7.10 branch,
by adding an ambient substitution to Subst; see CoreSubst,
esp Note [IdSubstEnv].

This allowed me to do the impedence-matching in SimplEnv.substExpr
efficiently (fixing #10370) as well correctly (fixing the latest
problem with #5113).

This cost me more time than I like to say.  Sigh.

4 years agodriver: pass '-fPIC' option to all CC invocations
Sergei Trofimovich [Wed, 24 Jun 2015 21:10:47 +0000 (22:10 +0100)] 
driver: pass '-fPIC' option to all CC invocations

Reported by mitchty:

  When porting ghc to alpine linux (rumors say they build
  all binaries as Position Independent Executables
  to leverage global ASLR) linker issued obscure errors:

Tiny example:
    $ echo 'main = print "hello"' > a.hs
    $ ghc -fforce-recomp a.hs -fPIC -dynamic -optl-pie -o a
        ld: /tmp/ghc2142_0/ghc2142_5.o: relocation R_X86_64_32 against `ZCMain_main_closure'
            can not be used when making a shared object; recompile with -fPIC
        /tmp/ghc2142_0/ghc2142_5.o: error adding symbols: Bad value
        collect2: error: ld returned 1 exit status

There is two entry points in CC driver:
    'runPhase' (CC) and 'mkExtraObj'

'mkExtraObj' does not handle most of 'runPhase's complexity.
Ideally it should.

This patch only adds -fPIC propagation to 'mkExtraObj'.

Please merge to stable branch.

Signed-off-by: Sergei Trofimovich <>
4 years agoTestsuite: mark T4945 as expect_broken (#4945)
Thomas Miedema [Thu, 11 Jun 2015 15:25:47 +0000 (17:25 +0200)] 
Testsuite: mark T4945 as expect_broken (#4945)

In commit 7d519dabd2006c9742e82fce02df55704da15482, the file
T4945.stdout was added to the repository, to make T4945 pass
validatation presumably.

When that test produces output however, there is a bug somewhere, and we
shouldn't hide it. There is a comment in the Makefile which says:

    "When SpecConstr works there are no STUArrays at all"

So here we remove T4945.stdout again, mark T4945 as expect_broken, and
reopen the ticket.

Differential Revision:


4 years agoFix "CPP directive" in comment
Ben Gamari [Tue, 7 Jul 2015 09:50:48 +0000 (11:50 +0200)] 
Fix "CPP directive" in comment

4 years agoAdd more discussion of black-holing logic for #10414
Ben Gamari [Mon, 6 Jul 2015 17:29:21 +0000 (19:29 +0200)] 
Add more discussion of black-holing logic for #10414

Signed-off-by: Ben Gamari <>
4 years agoDon't eagerly blackhole single-entry thunks (#10414)
Reid Barton [Mon, 6 Jul 2015 17:24:31 +0000 (19:24 +0200)] 
Don't eagerly blackhole single-entry thunks (#10414)

In a parallel program they can actually be entered more than once,
leading to deadlock.

Reviewers: austin, simonmar

Subscribers: michaelt, thomie, bgamari

Differential Revision:

GHC Trac Issues: #10414


4 years agoUse lazy substitution in simplCast
Simon Peyton Jones [Fri, 3 Jul 2015 13:03:25 +0000 (14:03 +0100)] 
Use lazy substitution in simplCast

It turned out that the terrible compiler performance in
Trac #10527 arose because we were simplifying a function
argument that subseuqently was discarded, so the work was
wasted.  Moreover, the work turned out to be substantial;
indeed it made an asymptotic difference to compile time.

Ths solution in this 7.10 branch is a bit brutal; just
duplicate CoreSubst.substExpr to be SimplEnv.substExprS.
It works fine I'm working on a better solution for HEAD.

4 years agoFix typo in error message
Gabor Greif [Tue, 17 Feb 2015 15:00:24 +0000 (16:00 +0100)] 
Fix typo in error message

4 years agoSpecialise: Avoid unnecessary recomputation of free variable information
Ben Gamari [Mon, 6 Jul 2015 08:46:21 +0000 (10:46 +0200)] 
Specialise: Avoid unnecessary recomputation of free variable information

When examining compile times for code with large ADTs (particularly those with
many record constructors), I found that the specialiser contributed
disproportionately to the compiler runtime. Some profiling suggested that
the a great deal of time was being spent in `pair_fvs` being called from

@simonpj pointed out that `flattenDictBinds` as called by `specBind` was
unnecessarily discarding cached free variable information, which then needed to
be recomputed by `pair_fvs`.

Here I refactor the specializer to retain the free variable cache whenever

**Open Qustions**

 * I used `fst` in a couple of places to extract the bindings from a `DictBind`.
   Perhaps this is a sign that `DictBind` has outgrown its type synonym status?

Test Plan: validate

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: thomie, bgamari, simonpj

Differential Revision:

GHC Trac Issues: #7450

4 years agoFix some validation errors.
Richard Eisenberg [Sat, 4 Jul 2015 07:35:14 +0000 (09:35 +0200)] 
Fix some validation errors.

This fixes test cases T10019 and T10534

The patch for T10019 should be back-ported to master as well.

Posting via Phab as a way to distribute a patch against the
ghc-7.10 branch, which I don't have push access to.

Test Plan: validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, bgamari, mzero

Differential Revision:

4 years agoCorrect BangPat SrcSpan calculation ghc-7.10.2-rc2
Matthew Pickering [Mon, 29 Jun 2015 19:11:17 +0000 (21:11 +0200)] 
Correct BangPat SrcSpan calculation

Previously when the split was performed in splitBang, `BangPat` was given the
same SrcSpan as the whole of the LHS of the declaration. This patch
correctly calculates the value.

Reviewers: alanz, austin

Reviewed By: alanz, austin

Subscribers: thomie, bgamari

Differential Revision:

GHC Trac Issues: #10588

(cherry picked from commit c6bb2fc50716a2fc540d55ecddbc5c14e94979f7)

4 years agorelnotes: More 7.10.2 release notes
Austin Seipp [Sun, 28 Jun 2015 00:34:17 +0000 (19:34 -0500)] 
relnotes: More 7.10.2 release notes

Signed-off-by: Austin Seipp <>
4 years agocloseOverKinds *before* oclose in coverage check
Simon Peyton Jones [Fri, 26 Jun 2015 13:28:45 +0000 (14:28 +0100)] 
closeOverKinds *before* oclose in coverage check

Combining functional dependencies with kind-polymorphism is
devilishly tricky!  It's all documented in
    Note [Closing over kinds in coverage]

Fixes Trac #10564

(cherry picked from commit 7c07cf16ab5d5bdfb64efb1d4fc5f20cf7437437)

4 years agoFix deadlock (#10545)
Simon Marlow [Fri, 19 Jun 2015 14:12:24 +0000 (15:12 +0100)] 
Fix deadlock (#10545)

yieldCapability() was not prepared to be called by a Task that is not
either a worker or a bound Task.  This could happen if we ended up in
yieldCapability via this call stack:


and there were a few other ways this could happen via requestSync.
The fix is to handle this case in yieldCapability(): when the Task is
not a worker or a bound Task, we put it on the returning_workers
queue, where it will be woken up again.

Summary of changes:

* `yieldCapability`: factored out subroutine waitForWorkerCapability`
* `waitForReturnCapability` renamed to `waitForCapability`, and
  factored out subroutine `waitForReturnCapability`
* `releaseCapabilityAndQueue` worker renamed to `enqueueWorker`, does
  not take a lock and no longer tests if `!isBoundTask()`
* `yieldCapability` adjusted for refactorings, only change in behavior
  is when it is not a worker or bound task.

Test Plan:
* new test concurrent/should_run/performGC
* validate

Reviewers: niteria, austin, ezyang, bgamari

Subscribers: thomie, bgamari

Differential Revision:

GHC Trac Issues: #10545

(cherry picked from commit 111ba4beda4ffc48381723da12e5b237d7f9ac59)

4 years agoFix for crash in setnumcapabilities001
Simon Marlow [Fri, 19 Jun 2015 13:41:32 +0000 (14:41 +0100)] 
Fix for crash in setnumcapabilities001

getNewNursery() was unconditionally incrementing next_nursery, which
is normally fine but it broke an assumption in
storageAddCapabilities().  This manifested as an occasional crash in
the setnumcapabilities001 test.

(cherry picked from commit be0ce8718ea40b091e69dd48fe6bc62b6b551154)

4 years agoComments only
Reid Barton [Thu, 25 Jun 2015 18:26:40 +0000 (14:26 -0400)] 
Comments only

(cherry picked from commit a7eee0d8a25789ce1ef349304d27e2a5e22766b7)

4 years agoMake enum01/enum02/enum03 tests clang-compatible
Reid Barton [Tue, 16 Jun 2015 21:39:15 +0000 (16:39 -0500)] 
Make enum01/enum02/enum03 tests clang-compatible

... by entirely replacing the use of CPP by a custom preprocessor;
clang -E -traditional has no stringification mechanism at all.

Reviewed By: thomie, austin

Differential Revision:

GHC Trac Issues: #9399

(cherry picked from commit b98ca17e12c7efdc906f4901f25e6263a5399be1)

4 years agoBe aware of overlapping global STG registers in CmmSink (#10521)
Reid Barton [Thu, 25 Jun 2015 17:53:57 +0000 (13:53 -0400)] 
Be aware of overlapping global STG registers in CmmSink (#10521)

On x86_64, commit e2f6bbd3a27685bc667655fdb093734cb565b4cf assigned
the STG registers F1 and D1 the same hardware register (xmm1), and
the same for the registers F2 and D2, etc. When mixing calls to
functions involving Float#s and Double#s, this can cause wrong Cmm
optimizations that assume the F1 and D1 registers are independent.

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: simonpj, thomie, bgamari

Differential Revision:

GHC Trac Issues: #10521

(cherry picked from commit a2f828a370b220839ad9b31a274c0198ef91b7fe)

4 years agopowerpc: add basic support for PLT relocations (#10402)
Sergei Trofimovich [Tue, 23 Jun 2015 12:39:34 +0000 (07:39 -0500)] 
powerpc: add basic support for PLT relocations (#10402)

Commit a93ab43ab5f40cadbedea2f6342b93c245e91434
enabled support for proper PIC relocations from

Commit adds support for relocations of type:

They are used only when GHC is built in

Verified by running the following test:

    // cat a.c
    #include <stdio.h>

    void ffi_a_hello (int i) {
        fprintf (stderr, "WEEEEEEEE: i=%d\n", i);

    -- cat A.hs
    {-# LANGUAGE ForeignFunctionInterface #-}
    module A where

    import Foreign.C

    foreign import ccall "ffi_a_hello" a :: CInt -> IO ()

    # ghc -fPIC -c a.c -fforce-recomp
    # ghc -fPIC -c A.hs -fforce-recomp
    # ghc --interactive ./a.o A
    *A> a 42
    WEEEEEEEE: i=42
See gory details in Trac #10402.

Signed-off-by: Colin Watson <>
Signed-off-by: Sergei Trofimovich <>
Reviewed By: bgamari, austin

Differential Revision:

GHC Trac Issues: #10402

(cherry picked from commit c0847967caf51ea4ca88d0ffc25fe1bd99dcabed)

4 years agoAdd parsePattern parser entry point
Alan Zimmerman [Sun, 21 Jun 2015 19:52:58 +0000 (21:52 +0200)] 
Add parsePattern parser entry point

Reviewers: austin, thomie, alanz

Reviewed By: thomie, alanz

Subscribers: thomie, bgamari

Differential Revision:

GHC Trac Issues: #10556

(cherry picked from commit 38f374571290b8115ef5b82587ac2ec6c18e91f1)

4 years agoParser: commas_tup_tail duplicate SrcSpan on "Missing" value
Alan Zimmerman [Thu, 18 Jun 2015 14:19:50 +0000 (16:19 +0200)] 
Parser: commas_tup_tail duplicate SrcSpan on "Missing" value


    {-# LANGUAGE TupleSections #-}

    baz = (1, "hello", 6.5,,) 'a' (Just ())

Results in the following AST fragment

    (L tests/examples/Tuple.hs:3:7-25
          [ L tests/examples/Tuple.hs:3:8
                 (L tests/examples/Tuple.hs:3:8
                          (HsIntegral [ '1' ] 1)
          , L tests/examples/Tuple.hs:3:11-17
                 (L tests/examples/Tuple.hs:3:11-17
                          [ '"'
                          , 'h'
                          , 'e'
                          , 'l'
                          , 'l'
                          , 'o'
                          , '"'
          , L tests/examples/Tuple.hs:3:20-22
                 (L tests/examples/Tuple.hs:3:20-22
                                [ '6' , '.' , '5' ]
                                (:% 13 2)))
          , L tests/examples/Tuple.hs:3:24
              (Missing PlaceHolder)
          , L tests/examples/Tuple.hs:3:24
              (Missing PlaceHolder)

The final `Missing PlaceHolder` has a duplicated `SrcSpan`

Test Plan: ./validate

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie, bgamari, mpickering

Differential Revision:

GHC Trac Issues: #10537

(cherry picked from commit 72b21c393831b49867a296f19a2d039e48bb8dcd)

4 years agoRevert "Look inside synonyms for foralls when unifying"
Austin Seipp [Thu, 18 Jun 2015 15:34:28 +0000 (10:34 -0500)] 
Revert "Look inside synonyms for foralls when unifying"

As discussed in #10194, this patch - while fixing a bug - also causes a
minor regression when compiling certain in-the-wild programs, meaning
some extant programs now failed with 7.10.2 RC1. Womp womp.

This reverts commit 681d82c0d44f06f0b958b75778c30b0910df982b.

4 years agoCare with impossible-cons in combineIdenticalAlts
Simon Peyton Jones [Thu, 18 Jun 2015 07:51:08 +0000 (08:51 +0100)] 
Care with impossible-cons in combineIdenticalAlts

This was a nasty, long-standing bug exposed in Trac #10538.
Symptoms were that we had an empty case
   case (x :: Either a) of {}
Core Lint correctly picked this bogus code up.

Here is what happened

* In SimplUtils.prepareAlts, we call

* We had    case x of { Left _ -> e1; Right _ -> e1 }

* filterAlts did nothing, but correctly retuned imposs_deflt_cons
  saying that 'x' cannot be {Left, Right} in the DEFAULT branch,
  if any (there isn't one.)

* combineIdentialAlts correctly combines the identical alts, to give
     case x of { DEFAULT -> e1 }

* BUT combineIdenticalAlts did no adjust imposs_deft_cons

* Result: when compiling e1 we did so in the belief that 'x'
  could not be {Left,Right}.  Disaster.

Easily fixed.

(It is hard to trigger; I can't construct a simple test case.)

(cherry picked from commit 023a0ba938b69bbb89cb2ce48a07459b07783391)

4 years agoFix ghc-pkg reports cache out date (#10205)
Thomas Miedema [Tue, 16 Jun 2015 21:38:38 +0000 (16:38 -0500)] 
Fix ghc-pkg reports cache out date (#10205)

See Note [writeAtomic leaky abstraction].

GHC on Linux already received a patch for this bug in
e0801a0fb342eea9a312906eab72874d631271cf. On Windows several cabal tests
were hitting the bug, causing validate failures, but we never noticed
because of all the other tests that were failing on Windows. And it
didn't start happening till `getModificationTime` received sub-second
resolution support on Windows in

Since there are regression tests already, I am not adding another one.
But for good measure, here is a script that shows the bug without
needing to do a full validate run:

  GHC_PKG=ghc-pkg #utils/ghc-pkg/dist/build/tmp/ghc-pkg
  LOCAL_GHC_PKG="${GHC_PKG} --no-user-package-db --global-package-db=${DB}"
  while true; do
    rm -rf ${DB}
    ${LOCAL_GHC_PKG} init "${DB}"
    ${LOCAL_GHC_PKG} list

If you see "WARNING: cache is out of date" after a few seconds, the bug
is not fixed.

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10205

(cherry picked from commit f0636562908236f6ce9bf91796bc952534074a61)

4 years agoUpdate Cabal submodule to Cabal-v1.22.4.0 rls tag
Herbert Valerio Riedel [Wed, 17 Jun 2015 11:56:51 +0000 (13:56 +0200)] 
Update Cabal submodule to Cabal-v1.22.4.0 rls tag

This only fixes the version number, no code is changed

4 years agoFix #10534
Richard Eisenberg [Tue, 16 Jun 2015 01:55:52 +0000 (21:55 -0400)] 
Fix #10534

Test case: typecheck/should_fail/T10534

(cherry picked from commit 89c7168c150ccc38a2e6dd4a3aea555616722260)

4 years agorelnotes: More notes, some wordsmithing
Austin Seipp [Mon, 15 Jun 2015 14:26:04 +0000 (09:26 -0500)] 
relnotes: More notes, some wordsmithing

Signed-off-by: Austin Seipp <>
4 years agoEnable SMP and GHCi support for Aarch64
Erik de Castro Lopo [Wed, 1 Apr 2015 04:46:01 +0000 (04:46 +0000)] 
Enable SMP and GHCi support for Aarch64

Signed-off-by: Erik de Castro Lopo <>
Test Plan: Full build on Aarch64

Reviewers: rwbarton, bgamari, austin

Subscribers: thomie

Differential Revision:

(cherry picked from commit 1e8c9b81a819da8eb54405a029fc33a9f5220321)

4 years agoUNREG: fix pprHexVal to emit zeros (#10518)
Sergei Trofimovich [Sun, 14 Jun 2015 15:42:03 +0000 (16:42 +0100)] 
UNREG: fix pprHexVal to emit zeros (#10518)

jakzale on #ghc reported a build failure
when ported GHC on a new target.

The code 'pprHexVal (2^32) W32' emits '0xU'
which is invalid C.

I've introduced bug in
when added literal truncation. That truncation
is a new source of zeros.

Signed-off-by: Sergei Trofimovich <>
Test Plan: added test and tested on UNREG ghc

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, bgamari

Differential Revision:

GHC Trac Issues: #10518

(cherry picked from commit a5084557b0b30faf3f89386ee6ee5a308dae51b1)

4 years agorelnotes: Remove duplicate 'known bugs' entry
Austin Seipp [Mon, 15 Jun 2015 01:22:30 +0000 (20:22 -0500)] 
relnotes: Remove duplicate 'known bugs' entry

Signed-off-by: Austin Seipp <>
4 years agodocs: More 7.10.2 release notes ghc-7.10.2-rc1
Austin Seipp [Fri, 12 Jun 2015 19:30:46 +0000 (14:30 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:18:40 +0000 (14:18 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:16:18 +0000 (14:16 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:15:04 +0000 (14:15 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:13:59 +0000 (14:13 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:09:25 +0000 (14:09 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <>
4 years agoutils: update haddock submodule
Austin Seipp [Fri, 12 Jun 2015 19:00:40 +0000 (14:00 -0500)] 
utils: update haddock submodule

Signed-off-by: Austin Seipp <>
4 years agolibraries: update Cabal submodule
Austin Seipp [Fri, 12 Jun 2015 19:00:01 +0000 (14:00 -0500)] 
libraries: update Cabal submodule

Signed-off-by: Austin Seipp <>
4 years agodocs: Fix #10416
Austin Seipp [Wed, 10 Jun 2015 21:43:23 +0000 (16:43 -0500)] 
docs: Fix #10416

This commit fixes #10416 by using an EPS-based file-format for embedding
images in the users guide, as opposed to a png. This is because 'latex'
in some distributions is actually 'pdflatex', which supports reading the
size of PNGs in DVI mode, while traditional latex does not.

Rather than fiddle with the build a whole bunch, it's easy and simple to
just convert the png into a eps file and embed that instead.

But apparently we already had an EPS file, added in
1cce2f51656cfbd8c7933a914a4bd981792aa1e6! But it was quite large, so
instead I used `convert` to shrink it down from 1.7MB to about 20kb, the
same size as the original PDF (by using level3 postscript, which is not
as wasteful.)

Signed-off-by: Austin Seipp <>
Differential Revision:

GHC Trac Issues: #10416

(cherry picked from commit ca39b96ee783e124909a89ea3ad366bf99defa7b)

4 years agoFix DWARF generation for MinGW (#10468)
Peter Wortmann [Thu, 11 Jun 2015 17:09:55 +0000 (12:09 -0500)] 
Fix DWARF generation for MinGW (#10468)

Fortunately this is relatively straightforward - all we need to do is
switch to a non-ELF-specific way of specifying object file sections and
make sure that section-relative addresses work correctly. This is enough
to make "gdb" work on MinGW builds.

(cherry picked from commit a66ef3567ea29c93a9c010befc672602dc1c644c)

4 years agoDo not copy stack after stack overflow, refix #8435
Flaviu Andrei Csernik (archblob) [Fri, 12 Jun 2015 16:45:55 +0000 (11:45 -0500)] 
Do not copy stack after stack overflow, refix #8435

This was reverted in d70b19bfb5ed79b22c2ac31e22f46782fc47a117
and is a part of the reason for #10445.

Test Plan: validate

Reviewers: ezyang, simonmar, austin

Reviewed By: simonmar, austin

Subscribers: bgamari, thomie

Differential Revision:

GHC Trac Issues: #8435

(cherry picked from commit 892c3e98bcef50aa56ec818f4d001aee36e05bbc)

4 years agomake sdist: distclean testsuite for real (#10406)
Thomas Miedema [Tue, 9 Jun 2015 12:31:40 +0000 (14:31 +0200)] 
make sdist: distclean testsuite for real (#10406)

(cherry picked from commit 5828457d8d26fd33130d4b5850847c9a73a8d3e5)

4 years agoRevert "The test runner now also works under the msys-native Python."
Thomas Miedema [Thu, 4 Jun 2015 08:49:51 +0000 (10:49 +0200)] 
Revert "The test runner now also works under the msys-native Python."

To make the test runner work under msys-native Python...

Commit 5258566ee5c89aa757b0cf1433169346319c018f broke the msys testsuite
driver (#10441). It changed the quoting of `config.compiler` from single
quotes to double quote, which turns out to not be compatible with what
the function `passThroughCmd` expected.

We could fix `passThroughCmd` to handle the case where `config.compiler`
is double quoted, and scatter some notes around to make sure the quoting
done in various places of the testsuite driver stay compatible.

Instead, this commit reverts 101c62e26286353dd3fac1ef54323529b64c9902,
which introdced the function `passThroughCmd` in the first place
(#9626). ezyang reports that doing this revert fixes the testsuite
driver for him using the the following version of msys2:

  msys2-keyring r8.3864337-1

Ideally we'd know what minimum version of msys2 we require, but for now
this fix is better than nothing.

Only gintas ever reported the original problem, and he actually
mentioned shortly afterwards: "This may have been fixed by a recent
release of msys2, but I am not sure."

Differential Revision:

(cherry picked from commit bb9967121f2383b857680b47b6bc20607f8fd1ff)

4 years agohaddock: update submodule
Austin Seipp [Tue, 9 Jun 2015 11:34:06 +0000 (06:34 -0500)] 
haddock: update submodule

Signed-off-by: Austin Seipp <>
4 years agoAlways force the exception in enqueued commands
Zejun Wu [Tue, 9 Jun 2015 10:42:38 +0000 (05:42 -0500)] 
Always force the exception in enqueued commands

`enqueueCommands` should always force exception in commands. Otherwise
the exception thrown in `:cmd` (e.g. `:cmd return $ head []`) will cause
GHCi to terminate with panic.

Test Plan: `cd testsuite/tests/ghci/ && make`

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10501

(cherry picked from commit 3b55659d4f54e503f4e550d762bc55a2650ed13d)

4 years agobuild: Clean testsuite before sdist
Austin Seipp [Thu, 4 Jun 2015 22:10:33 +0000 (17:10 -0500)] 
build: Clean testsuite before sdist

When making the `sdist` tarball, we don't really need anything inside
$(TOP)/testsuite in order to do our thing. So make sure we clean it
first to avoid situations like #10406.

With D917 landed, this can actually avoided entirely by fixing the
official release process to instead build an `sdist` //first// from the
clean git repository and then build that (to fixpoint) and test it. Then
the originall clean tarball can be shipped.

But it's nice to be safe in the general case where someone might want to
(in the future) `sdist` out of their build tree.

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

Differential Revision:

GHC Trac Issues: #10406

(cherry picked from commit a48167eaaa984fbdc1ad31c2c674058ba3669ac6)

4 years agodocs: More 7.10.2 notes
Austin Seipp [Tue, 9 Jun 2015 07:35:12 +0000 (02:35 -0500)] 
docs: More 7.10.2 notes

Signed-off-by: Austin Seipp <>
4 years agoUpdate binary submodule to release
Herbert Valerio Riedel [Mon, 1 Jun 2015 08:50:17 +0000 (10:50 +0200)] 
Update binary submodule to release

Quoting the changelog, this pulls in the following fixes:


- Fix performance bug that was noticable when you get a big strict ByteString
  and the input to the decoder consists of many small chunks.
- Fix memory leak when decoding Double and Float.
    - Commit 497a181c083fa9faf7fa3aa64d1d8deb9ac76ecb
- We now require QuickCheck >= 2.8. Remove our version of arbitrarySizedNatural.


- Some invalid UTF-8 strings caused an exception when decoded. Those errors will
  now now fail in the Get monad instead. See issue 70.
  Patch contributed by @ttuegel.

(cherry picked from commit 7dd0ea7428379df848e3d13528921b39b7bf5b95)

4 years agoFix #10488 by unwrapping type synonyms.
Richard Eisenberg [Thu, 4 Jun 2015 21:05:02 +0000 (17:05 -0400)] 
Fix #10488 by unwrapping type synonyms.

Previously, I had forgotten to unwrap vanilla type synonyms in the
"flattener" that is used around the closed-type-family apartness

Test Plan: validate

Reviewers: austin

Subscribers: bgamari, thomie

Differential Revision:

GHC Trac Issues: #10488

(cherry picked from commit 761fb7c4869a081da7320e4307dcb947b5ed95d1)

4 years agotestsuite: Add test for #10489
Austin Seipp [Tue, 9 Jun 2015 02:47:48 +0000 (21:47 -0500)] 
testsuite: Add test for #10489

This is half of 61b96a86c5342fb1c850361177d60fe855d948f6 essentially -
just to make sure the 7.10 branch doesn't regress on #10489.

Signed-off-by: Austin Seipp <>
4 years agotestsuite: fix T9858e fallout
Austin Seipp [Tue, 9 Jun 2015 02:43:57 +0000 (21:43 -0500)] 
testsuite: fix T9858e fallout

From 28943a8925427a5aafa7013e3ad47ff4511985da, in which I forgot about
the 'error:' thing.

Signed-off-by: Austin Seipp <>
4 years agotestsuite: Fix minor print007 fallout
Austin Seipp [Tue, 9 Jun 2015 02:42:43 +0000 (21:42 -0500)] 
testsuite: Fix minor print007 fallout

This was from fixing #10052.

Signed-off-by: Austin Seipp <>
4 years agoghc-pkg support query by package-key, fixes #9507
Edward Z. Yang [Wed, 3 Jun 2015 17:55:58 +0000 (10:55 -0700)] 
ghc-pkg support query by package-key, fixes #9507

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

Reviewers: austin

Subscribers: bgamari, thomie

Differential Revision:

GHC Trac Issues: #9507

(cherry picked from commit c69b69d2cda890e6f3f6aa1fd4092421e6053b89)

4 years agoGive a hint when a TH splice has a bad package key, partially fixes #10279
Edward Z. Yang [Mon, 20 Apr 2015 21:02:36 +0000 (14:02 -0700)] 
Give a hint when a TH splice has a bad package key, partially fixes #10279

Previously, if we got a package key in our splice, we'd give
a very unhelpful error message saying we couldn't find
a package 'base-', despite there being a package with
that source package ID.  Really, we couldn't find a package with
that *key*, so clarify, and also tell the user what the real
package key is.

Signed-off-by: Edward Z. Yang <>
(cherry picked from commit bf4f3e653407d02593a69618fb199b2e2d529c92)

4 years agoDetabify a programlisting in the User's Guide (#10425)
Reid Barton [Tue, 2 Jun 2015 20:00:10 +0000 (16:00 -0400)] 
Detabify a programlisting in the User's Guide (#10425)

(cherry picked from commit 5688053a5c0a188c8bc94cd2c41d178b5c716535)

4 years agonewTempName: Do not include pid in basename
Joachim Breitner [Tue, 2 Jun 2015 21:12:43 +0000 (16:12 -0500)] 
newTempName: Do not include pid in basename

The filename of temporary files, especially the basename of C files, can
end up in the output in some form, e.g. as part of linker debug
information. In the interest of bit-wise exactly reproducible
compilation (#4012), the basename of the temporary file no longer
contains random information (it used to ontain the process id).

This is ok, as the temporary directory used contains the pid (see

This patch has been applied to the Debian package (version 7.10.1-5) and
allowed a fully bit-wise reproducible build:

Reviewed By: austin, rwbarton

Differential Revision:

GHC Trac Issues: #4012

(cherry picked from commit 7a82b77691fb90c4af6863673f10e454a449739e)

4 years agoApiAnnotations : rationalise tests
Alan Zimmerman [Mon, 1 Jun 2015 09:51:27 +0000 (11:51 +0200)] 
ApiAnnotations : rationalise tests

At the moment the API Annotations tests have a driver that has been
copy/pasted multiple times.

Compile it once, and run it for each test case.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie

Differential Revision:

GHC Trac Issues: #10452

(cherry picked from commit e00910b0f83eaafd91dcb59cec0779b3ea9f0d30)

4 years agocompiler: make sure we reject -O + HscInterpreted
Austin Seipp [Tue, 19 May 2015 06:56:48 +0000 (01:56 -0500)] 
compiler: make sure we reject -O + HscInterpreted

When using GHCi, we explicitly reject optimization, because the
compilers optimization passes can introduce unboxed tuples, which the
interpreter is not able to handle. But this goes the other way too: using
GHCi on optimized code may cause the optimizer to float out breakpoints
that the interpreter introduces. This manifests itself in weird ways,
particularly if you as an API client use custom DynFlags to introduce
optimization in combination with HscInterpreted.

It turns out we weren't checking for consistent DynFlag settings when
doing `setSessionDynFlags`, as #10052 showed. While the main driver
handled it in `DynFlags` via `parseDynamicFlags`, we didn't check this

This does a little refactoring to split out some of the common code, and
immunizes the various `DynFlags` utilities in the `GHC` module from this
particular bug. We should probably be checking other general invariants

This fixes #10052, and adds some notes about the behavior in `GHC` and

As a bonus, expose `warningMsg` from `ErrUtils` as a helper since it
didn't exist (somehow).

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

Differential Revision:

GHC Trac Issues: #10052

(cherry picked from commit 091944e3aec736b440a9c1204f152004e382c967)

4 years agoRename tests so that they have a unique name.
Iavor S. Diatchki [Thu, 16 Apr 2015 21:29:07 +0000 (14:29 -0700)] 
Rename tests so that they have a unique name.

(cherry picked from commit 3b90d8c8cfb4f56cec3eb5e1ede12c22a9e28d79)

4 years agoRename new T9858d to T9858e to avoid test name clash
Joachim Breitner [Wed, 22 Apr 2015 16:50:00 +0000 (18:50 +0200)] 
Rename new T9858d to T9858e to avoid test name clash

(Next time, when fixing someone else’s mistake, I really shouldn’t do
the precise same thing.)

(cherry picked from commit a55bfabbed21f17064f863450f9d94d45db9c478)

4 years agoRename new T9858c to T9858d to avoid test name clash
Joachim Breitner [Wed, 22 Apr 2015 14:18:27 +0000 (16:18 +0200)] 
Rename new T9858c to T9858d to avoid test name clash

(cherry picked from commit 43d7137399e6edcf950b3ed43b752b06ad550d2e)

4 years agotestsuite: fix some failures from merge problems
Austin Seipp [Tue, 2 Jun 2015 19:07:35 +0000 (14:07 -0500)] 
testsuite: fix some failures from merge problems

Signed-off-by: Austin Seipp <>
4 years agocompiler: kill a stray pprTrace in OccName
Austin Seipp [Sat, 23 May 2015 12:26:55 +0000 (07:26 -0500)] 
compiler: kill a stray pprTrace in OccName

Left in by c89bd681d34d, and otherwise rather annoying during the build!

Signed-off-by: Austin Seipp <>
(cherry picked from commit 4d6c0ee11ff2c439fcd06677d55c57b8644ed7a7)

4 years agotestsuite: commit missing T4945 stdout
Austin Seipp [Sat, 23 May 2015 12:24:50 +0000 (07:24 -0500)] 
testsuite: commit missing T4945 stdout

Simon apparently forgot this it seems.

Signed-off-by: Austin Seipp <>
(cherry picked from commit 7d519dabd2006c9742e82fce02df55704da15482)

4 years agoFix a huge space leak in the mighty Simplifier
Simon Peyton Jones [Fri, 22 May 2015 14:04:47 +0000 (15:04 +0100)] 
Fix a huge space leak in the mighty Simplifier

This long-standing, terrible, adn somewhat subtle bug was exposed
by Trac #10370, thanks to Reid Barton's brilliant test case (comment:3).

The effect is large on the Trac #10370 test.
Here is what the profile report says:

 total time  =       24.35 secs   (24353 ticks @ 1000 us, 1 processor)
 total alloc = 11,864,360,816 bytes  (excludes profiling overheads)

 total time  =       21.16 secs   (21160 ticks @ 1000 us, 1 processor)
 total alloc = 7,947,141,136 bytes  (excludes profiling overheads)

The /combined/ effect of the tidyOccName fix, plus this one, is dramtic
for Trac #10370.  Here is what +RTS -s says:

  15,490,210,952 bytes allocated in the heap
   1,783,919,456 bytes maximum residency (20 sample(s))

  MUT     time   30.117s  ( 31.383s elapsed)
  GC      time   90.103s  ( 90.107s elapsed)
  Total   time  120.843s  (122.065s elapsed)

   7,928,671,936 bytes allocated in the heap
      52,914,832 bytes maximum residency (25 sample(s))

  MUT     time   13.912s  ( 15.110s elapsed)
  GC      time    6.809s  (  6.808s elapsed)
  Total   time   20.789s  ( 21.954s elapsed)

- Heap allocation halved
- Residency cut by a factor of more than 30.
- ELapsed time cut by a factor of 6

Not bad!

The details
The culprit was SimplEnv.mkCoreSubst, which used mapVarEnv to do some
impedence-matching from the substitituion used by the simplifier to
the one used by CoreSubst.  But the impedence-mactching was recursive!

  mk_subst tv_env cv_env id_env
    = CoreSubst.mkSubst in_scope tv_env cv_env (mapVarEnv fiddle id_env)

  fiddle (DoneEx e)          = e
  fiddle (DoneId v)          = Var v
  fiddle (ContEx tv cv id e) = CoreSubst.substExpr (mk_subst tv cv id) e

Inside fiddle, in the ContEx case, we may do another whole level of
fiddle.  And so on.  Moreover, UniqFM (which is built on Data.IntMap) is
strict, so the fiddling is done eagerly.  I didn't wok through all the
details but the result is a gargatuan blow-up of entirely unnecessary work.

Laziness would make this go away, I think, but I don't want to mess
with IntMap.  And in any case, the impedence matching is a royal pain.

In the end I simply ceased trying to use CoreSubst.substExpr in the
simplifier, and instead just use simplExpr.  That does mean bit of
duplication; e.g.  new code for simplRules.  But it's not a big deal
and it's far more direct and easy to reason about.

A bit of knock-on refactoring:

 * Data type ArgSummary moves to CoreUnfold.

 * interestingArg moves from CoreUnfold to SimplUtils, and gets a
   SimplEnv argument which can be used when we encounter a variable.

 * simplLamBndrs, addBndrRules move from SimplEnv to Simplify
   (because they now calls simplUnfolding, simplRules resp)

 * SimplUtils.substExpr, substUnfolding, mkCoreSubst die completely

 * In Simplify some several functions that were previously pure
   substitution-based functions are now monadic:
     - addBndrRules, simplRule
     - addCoerce, add_coerce in simplCast

 * In case 2c of Simplify.rebuildCase, there was a pretty disgusting
   expression-substitution taking place for 'rhs'; and we really don't
   want to make that monadic becuase 'rhs' can be big.
   Solution: reduce the arity of the rules for seq.
   See Note [User-defined RULES for seq] in MkId.

(cherry picked from commit 45d9a15c4b85a2ed89579106bdafd84accf2cb39)

4 years agoFix quadratic behaviour in tidyOccName
Simon Peyton Jones [Fri, 22 May 2015 13:46:51 +0000 (14:46 +0100)] 
Fix quadratic behaviour in tidyOccName

In the test program from comment:3 of Trac #10370, it turned out
that 25% of all compile time was going in OccName.tidyOccName!

It was all becuase the algorithm for finding an unused OccName
had a quadratic case.

This patch fixes it.  THe effect is pretty big:

total time  =       34.30 secs   (34295 ticks @ 1000 us, 1 processor)
total alloc = 15,496,011,168 bytes  (excludes profiling overheads)

total time  =       25.41 secs   (25415 ticks @ 1000 us, 1 processor)
total alloc = 11,812,744,816 bytes  (excludes profiling overheads)

(cherry picked from commit c89bd681d34d3339771ebdde8aa468b1d9ab042b)

4 years agoReduce magic for seqId
Simon Peyton Jones [Fri, 22 May 2015 13:41:54 +0000 (14:41 +0100)] 
Reduce magic for seqId

An upcoming commit means that the RULES for 'seq' get only
one value arg, not two.  This patch prepares for that by

- reducing the arity of seq's built-in rule, to take one value arg
- making 'seq' not inline on the LHS of RULES
- and removing the horrid un-inlining in DsBinds.decomposeRuleLhs

(cherry picked from commit eae703aa60f41fd232be5478e196b661839ec3de)

4 years agoIn ghci linker, link against all previous temp sos (#10322)
Reid Barton [Tue, 19 May 2015 06:23:59 +0000 (01:23 -0500)] 
In ghci linker, link against all previous temp sos (#10322)

The OS X dlopen() appears to only resolve undefined symbols in
the direct dependencies of the shared library it is loading.

Reviewed By: trommler, austin

Differential Revision:

GHC Trac Issues: #10322

(cherry picked from commit a52f1444ea4045a2075dc88bb973a9289ee7e2cf)

4 years agoTest case for indirect dependencies in ghci linker (#10322)
Reid Barton [Wed, 15 Apr 2015 20:46:47 +0000 (16:46 -0400)] 
Test case for indirect dependencies in ghci linker (#10322)

(cherry picked from commit 88b84063c11a48820011805a8341d95f7fcd59db)

4 years agoFix dropped event registrations
Ben Gamari [Mon, 1 Jun 2015 07:27:30 +0000 (02:27 -0500)] 
Fix dropped event registrations

D347 introduced a bug wherein the event manager would drop registrations that
should be retained during processing. This occurs when an fd has multiple
registrations, not all of which fire, as well as the case of multi-shot

I also do some general house-keeping, try to better document things, and fix a
bug which could result in unnecessary calls to `epoll_ctl`

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #10317

(cherry picked from commit 1c3832597b3e75456fc61628c4cd289d211c733b)

4 years agorts: Fix aarch64 implementation of xchg
Erik de Castro Lopo [Thu, 28 May 2015 02:57:28 +0000 (02:57 +0000)] 
rts: Fix aarch64 implementation of xchg

In the previous implementation, the `stlxr` instruction clobbered
the value that was supposed to be returned by the the `xchg`

Signed-off-by: Erik de Castro Lopo <>
Test Plan: build on aarch64

Reviewers: austin, bgamari, rwbarton

Subscribers: bgamari, thomie

Differential Revision:

(cherry picked from commit f6ca6959e54ede0b28735ab7e011c16b3cb172db)

4 years agocompiler/specialise: shut match_co up a bit
Austin Seipp [Mon, 1 Jun 2015 08:45:11 +0000 (03:45 -0500)] 
compiler/specialise: shut match_co up a bit

This stray pprTrace is quite annoying and makes our build logs a bit
bigger (hundreds of lines of occurrences), so we should probably just
get rid of it. Kept under DEBUG for future brave hackers.

Signed-off-by: Austin Seipp <>
Reviewed By: thomie, nomeata

Differential Revision:

(cherry picked from commit f5b43ce177e40a34afb1913bc0ec866185ed95d7)

4 years agoCatch canonicalizePath exceptions, fix #10101
Flaviu Andrei Csernik (archblob) [Mon, 1 Jun 2015 07:13:36 +0000 (02:13 -0500)] 
Catch canonicalizePath exceptions, fix #10101

Introduce by #95 'canonicalizePath' throws and exception when given
an invalid file in a call to 'sameFile'.

There are two cases when this can happen when using ghci:
  1) If there is an error at the interactive prompt, "<interactive>"
     file is searched for and not found.
  2) If there is an error in any loaded file and editing an inexistent/new
     file with 'e: foo'.

Both cases are now tested.

Test Plan: validate

Reviewers: austin, #ghc

Reviewed By: austin, #ghc

Subscribers: bgamari, thomie

Differential Revision:

GHC Trac Issues: #10101

(cherry picked from commit 4756438962a76d2dcedf63b90ec789cb054f9556)

4 years agoDon't assume tools are in same directory as ghc in some cases
Phil Ruffwind [Sat, 7 Mar 2015 17:04:00 +0000 (11:04 -0600)] 
Don't assume tools are in same directory as ghc in some cases

Summary: Tools such as `ghc-pkg` and `runghc` are no longer required to
be in the same directory as `ghc` when running tests, provided that
`TEST_HC` is not explicitly set and an in-tree compiler is not used.
Fixes #10126.

Reviewers: thomie, austin

Reviewed By: thomie, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10126

(cherry picked from commit 504d8a4b183670830093a81d3c7a6d78416aed20)

4 years agobase: fix #10298 & #7695
Austin Seipp [Tue, 19 May 2015 09:56:40 +0000 (04:56 -0500)] 
base: fix #10298 & #7695

This applies a patch from Reid Barton and Sylvain Henry, which fix a
disasterous infinite loop when iconv fails to load locale files, as
specified in #10298.

The fix is a bit of a hack but should be fine - for the actual reasoning
behind it, see `Note [Disaster and iconv]` for more info.

In addition to this fix, we also patch up the IO Encoding utilities to
recognize several variations of the 'ASCII' encoding (including its
aliases) directly so that GHC can do conversions without iconv. This
allows a static binary to sit in an initramfs.

Authored-by: Reid Barton <>
Authored-by: Sylvain Henry <>
Signed-off-by: Austin Seipp <>
Test Plan: Eyeballed it.

Reviewers: rwbarton, hvr

Subscribers: bgamari, thomie

Differential Revision:

GHC Trac Issues: #10298, #7695

(cherry picked from commit e28462de700240288519a016d0fe44d4360d9ffd)