2 years agotestsuite: More 32-bit performance changes
Ben Gamari [Mon, 27 Mar 2017 12:16:18 +0000 (08:16 -0400)] 
testsuite: More 32-bit performance changes

2 years agoFix scc001
Simon Marlow [Wed, 29 Mar 2017 13:17:38 +0000 (06:17 -0700)] 
Fix scc001

2 years agocg057: accept output
Simon Marlow [Wed, 29 Mar 2017 13:25:05 +0000 (06:25 -0700)] 
cg057: accept output

2 years agoFix ASSERT failure in TcErrors
Simon Peyton Jones [Wed, 29 Mar 2017 13:57:21 +0000 (14:57 +0100)] 
Fix ASSERT failure in TcErrors

This fixes Trac #13494, by improving

   commit e0ad55f894a8d85dcc099c33c63cfe3d4515d464
   Author: Simon Peyton Jones <>
   Date:   Mon Mar 27 10:32:08 2017 +0100

   Fix error-message suppress on given equalities

which in turn was a fix to #13446

2 years agoAdd a couple of HasDebugCallStack contexts
Simon Peyton Jones [Wed, 29 Mar 2017 08:01:58 +0000 (09:01 +0100)] 
Add a couple of HasDebugCallStack contexts

Just for future (and past) debugging...

2 years agoAllow unbound Refl binders in a RULE
Simon Peyton Jones [Wed, 29 Mar 2017 08:00:02 +0000 (09:00 +0100)] 
Allow unbound Refl binders in a RULE

Trac #13410 was failing because we had a RULE with a binder
   (c :: t~t)
and the /occurrences/ of c on the LHS were being optimised to Refl,
leaving a binder that would not be filled in by matching the LHS
of the rule.

I flirted with trying to ensure that occurrences (c :: t~t) are
not optimised to Relf, but that turned out to be fragile; it was
being done, for good reasons, in multiple places, including
  - TyCoRep.substCoVarBndr
  - Simplify.simplCast
  - Corecion.mkCoVarCo

So I fixed it in one place by making Rules.matchN deal happily
with an unbound binder (c :: t~t).  Quite easy.  See "Coercion
variables" in Note [Unbound RULE binders] in Rules.

In addition, I needed to make CoreLint be happy with an bound
RULE binder that is a Relf coercion variable

In debugging this, I was perplexed that occurrences of a variable
(c :: t~t) mysteriously turned into Refl.  I found out how it
was happening, and decided to move it:

* In TyCoRep.substCoVarBndr, do not substitute Refl for a
  binder (c :: t~t).

* In mkCoVarCo do not optimise (c :: t~t) to Refl.

Instead, we do this optimisation in optCoercion (specifically
opt_co4) where, surprisingly, the optimisation was /not/
being done.  This has no effect on what programs compile;
it just moves a relatively-expensive optimisation to optCoercion,
where it seems more properly to belong.  It's actually not clear
to me which is really "better", but this way round is less

One small simplifying refactoring

* Eliminate TyCoRep.substCoVarBndrCallback, which was only
  called locally.

2 years agoZap Call Arity info in the simplifier
Joachim Breitner [Tue, 28 Mar 2017 20:19:16 +0000 (16:19 -0400)] 
Zap Call Arity info in the simplifier

As #13479 shows, there are corner cases where the simplifier decides to
not eta-expand a function as much as its call arity would suggest, but
instead transforms the code that the call arity annotation becomes a

As the call arity information is only meant to be used by the
immediatelly following simplifier run, it makes sense to simply zap the
information there.

Differential Revision:

2 years agoMake the test fail if compiled without -threaded
Simon Marlow [Mon, 27 Mar 2017 15:09:23 +0000 (16:09 +0100)] 
Make the test fail if compiled without -threaded

Test Plan: validate

Reviewers: bgamari, austin, erikd

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoFix #13433
Simon Marlow [Mon, 27 Mar 2017 12:15:04 +0000 (13:15 +0100)] 
Fix #13433

Summary: See comments for details.

Test Plan: validate

Reviewers: mpickering, bgamari, austin, erikd

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoSpelling in comments only [ci skip]
Gabor Greif [Tue, 28 Mar 2017 09:59:48 +0000 (11:59 +0200)] 
Spelling in comments only [ci skip]

2 years agoTest Trac #13490
Simon Peyton Jones [Tue, 28 Mar 2017 07:44:11 +0000 (08:44 +0100)] 
Test Trac #13490

2 years agoComplete the fix for #13441 (pattern synonyms)
Simon Peyton Jones [Tue, 28 Mar 2017 07:23:44 +0000 (08:23 +0100)] 
Complete the fix for #13441 (pattern synonyms)

Do not attempt to typecheck both directions of an
implicitly-bidirectional pattern synonym simultanously,
as we were before.  Instead, the builder is typechecked
when we typecheck the code for the builder, which was
of course happening already, even in both bidirectional

See Note [Checking against a pattern signature], under
"Existential type variables".

2 years agoFix #13458
Richard Eisenberg [Thu, 23 Mar 2017 02:32:04 +0000 (22:32 -0400)] 
Fix #13458

Core Lint shouldn't check representations of types that don't
have representations.

test case: typecheck/should_compile/T13458

2 years ago-fspec-constr-keen docs typos [skip ci]
Matthew Pickering [Mon, 27 Mar 2017 16:41:41 +0000 (17:41 +0100)] 
-fspec-constr-keen docs typos [skip ci]

2 years agoRemove utterly bogus code
Simon Peyton Jones [Mon, 27 Mar 2017 13:33:55 +0000 (14:33 +0100)] 
Remove utterly bogus code

The commit 6746549772c5cc0ac66c0fce562f297f4d4b80a2
    Author: Richard Eisenberg <>
    Date:   Fri Dec 11 18:19:53 2015 -0500

    Add kind equalities to GHC.

added this entirely bogus code to Simplify.simplLam:

    env' | Coercion co <- arg
         = extendCvSubst env bndr co
         | otherwise
         = env

It's bogus because 'co' is an 'InCoercion', but a CvSubst should have
only OutCoercions in it.  Moreover, completeBind does the job nicely.

This led to an ASSERT failure in an experimental branch; but I have
not got a repro case that works on HEAD.  But still, the patch deletes
code and fixes a bug, so it must be good.

The only mystery is why Richard added it in the first place :-).
I hope I'm not missing anything.  But it validates fine.

2 years agoFix 'unsolved constraints' in GHCi
Simon Peyton Jones [Mon, 27 Mar 2017 13:32:43 +0000 (14:32 +0100)] 
Fix 'unsolved constraints' in GHCi

In initTc, if the computation fails with an exception, we
should not complain about unsolved constraints.

Fixes Trac #13466.

2 years agoFix error-message suppress on given equalities
Simon Peyton Jones [Mon, 27 Mar 2017 09:32:08 +0000 (10:32 +0100)] 
Fix error-message suppress on given equalities

I'd got the logic slightly wrong when reporting type errors
for insoluble 'given' equalities.  We suppress insoluble givens
under some circumstances (see Note [Given errors]), but we then
suppressed subsequent 'wanted' errors because the (suppressed)
'given' error "won".  Result: no errors at all :-(.

This patch fixes it and
 - Renames TcType.isTyVarUnderDatatype to the more
   perspicuous TcType.isInsolubleOccursCheck

In doing this I realise that I don't understand why we need
to keep the insolubles partitioned out separately at all...
but that is for another day.

2 years agoFix explicitly-bidirectional pattern synonyms
Simon Peyton Jones [Mon, 27 Mar 2017 09:22:22 +0000 (10:22 +0100)] 
Fix explicitly-bidirectional pattern synonyms

This partly fixes Trac #13441, at least for the explicitly
bidirectional case.

See Note [Checking against a pattern signature], the part about
"Existential type variables".

Alas, the implicitly-bidirectional case is still not quite right, but
at least there is a workaround by making it explicitly bidirectional.

2 years agoTypechecker comments and debug tracing only
Simon Peyton Jones [Mon, 27 Mar 2017 09:12:53 +0000 (10:12 +0100)] 
Typechecker comments and debug tracing only

2 years agoEliminate a user manual warning
Simon Peyton Jones [Mon, 27 Mar 2017 09:09:37 +0000 (10:09 +0100)] 
Eliminate a user manual warning

I was getting
     WARNING: Title underline too short.

  ``COLUMN`` pragma

So I lengthened the row of hyphens.

2 years agoSimplify the logic for tc_hs_sig_type
Simon Peyton Jones [Mon, 27 Mar 2017 09:05:26 +0000 (10:05 +0100)] 
Simplify the logic for tc_hs_sig_type

In fixing Trac #13337, and introducing solveSomeEqualities,
Richard introduce the higher-order function tc_hs_sig_type_x,
with a solver as its argument.

It turned out that there was a much simpler way to do the
same thing, which this patch implements.  Less code, easier
to grok.  No change in behaviour though.

2 years agoDon't redefine typedef names
Gabor Greif [Mon, 27 Mar 2017 11:33:49 +0000 (13:33 +0200)] 
Don't redefine typedef names

instead define the structs referred to by
 - SectionFormatInfo
 - ObjectCodeFormatInfo

that were only forward-declared earlier.

This fixes redefinition errors with gcc4.4

2 years agoOnly use locally bound variables in pattern synonym declarations
Matthew Pickering [Mon, 27 Mar 2017 10:24:25 +0000 (11:24 +0100)] 
Only use locally bound variables in pattern synonym declarations

We were using the unconstrainted `lookupOccRn` function which looked up
any variable in scope. Instead we only want to consider variables brought into
scope by renaming the pattern on the RHS.

A few more changes to make reporting of unbound names suggest the correct

Fixes #13470

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoRemove unused argument from importSuggestions
Matthew Pickering [Thu, 23 Mar 2017 14:08:26 +0000 (14:08 +0000)] 
Remove unused argument from importSuggestions

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoAdds aarch64 linker for mach-o files.
Moritz Angermann [Tue, 21 Mar 2017 15:02:20 +0000 (11:02 -0400)] 
Adds aarch64 linker for mach-o files.

This is the final commit that ties them all together. Here we
add the aarch64 linker for macho files.

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
- In D3252 we refactored most of the MachO.c file to use the
  new types and datastructure.

This commit will than finally add the aarch64 (arm64) linker
for mach-o files to ghc, using the improved foundation we
have constructed above.

The dependency structure therefore is as follows

  .- D3240
This <- D3252 <- D3251 <- D3239
  '- D3238

Depends: D3252, D3240, D3238

Test Plan:
To test this with iOS, we also need the remote-iserv
diff D3233. With all that in place, proceed as follows:

- Build ghc for the host

  ghc $ ./configure --prefix=/test/opt \
    --disable-large-address-space \
    --with-llc=/path/to/llvm-3.9/bin/llc \
  # edit mk/ to specify quick
  ghc $ make && make install

- Build ghc for ios

  ghc $ ./configure --target=aarch64-apple-darwin14 \
    --prefix=/test/opt \
    --disable-large-address-space \
    --with-llc=/path/to/llvm-3.9/bin/llc \
    --with-opt=/path/to/llvm-3.9/bin/opt \
    --with-ghc=/test/bin/ghc \
  # edit mk/ to specify quick-cross
  ghc $ make && make install

- Obtain the iOS wrapper scripts from
  and place them in PATH.

- Build iserv-proxy for the host

  ghc/iserv $ cabal install -fproxy -flibrary

- Build iserv-library for the target

  # build cryptonite without integer-gmp
  ghc/iserv $ aarch64-apple-darwin14-cabal install cryptonite
  ghc/iserv $ aarch64-apple-darwin14-cabal install -flibrary

- Create an iOS application with the following `main.m`:
  #import <UIKit/UIKit.h>
  #include "HsFFI.h"
  extern void startSlave(bool, int, const char *);

  int main(int argc, char * argv[]) {
    const char * documents_path = [[[NSFileManager defaultManager]
URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]

    hs_init(NULL, NULL);

    startSlave(false, 5000, documents_path);

    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, nil);

  and link it with: the iserv archive from
  as well as all dependent archives.

- Build, Install and Launch the iserv-slave application on your iphone

- Compile some Template Haskell code with the
  through the `iserv-proxy`

  app $ aarch64-apple-darwin14-ghc Module.hs \
   -threaded -staticlib \
   -outputdir build/aarch64 -pgmlibtool libtool-quiet -stubdir . \
   -fexternal-interpreter \
   -pgmi=$HOME/.cabal/bin/iserv-proxy \
   -opti10.0.0.1 \
  where is the ip of your iserv-slave.


Reviewers: rwbarton, bgamari, austin, hvr, erikd, simonmar

Subscribers: thomie, erikd, ryantrinkle

Differential Revision:

2 years agoRefactor MachO.c
Moritz Angermann [Tue, 21 Mar 2017 15:01:40 +0000 (11:01 -0400)] 
Refactor MachO.c

- Rename existing structs with typedefs from MachOTypes.
- Update the following functions to make use of the
  extended ObjectCode structure:
  - ocAllocateSymbolExtras_MachO
  - resolveImports
  - ocGetNames_MachO
  - ocResolve_MachO
  - ocRunInit_MachO
- repalce int with size_t for fread
- Add aarch64 to the 64bit magic header check.

Depends on D3239, D3251

This is just one of the pieces for the rts linker
support for ios (aarch64-macho)


The following diagram and legend tries to explain the dependencies a
  .- D3240
D3255 <- This <- D3251 <- D3239
  '- D3238

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: austin, rwbarton, erikd, simonmar, bgamari

Subscribers: thomie

Differential Revision:

2 years agoAdd ocInit_MachO
Moritz Angermann [Tue, 21 Mar 2017 15:01:11 +0000 (11:01 -0400)] 
Add ocInit_MachO

This adds ocInit_MachO function, used to populate the extended
ObjectCode structure, and the corresponding stgFree.

It also adds defines for iOS, such that MachO.o is also compiled for iOS

Depends on D3239


This is just one of the pieces for the rts linker
support for ios (aarch64-macho)


The following diagram and legend tries to explain the dependencies a
  .- D3240
D3255 <- D3252 <- This <- D3239
  '- D3238

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: rwbarton, bgamari, austin, erikd, simonmar

Subscribers: thomie

Differential Revision:

2 years agorts linker: Introduce MachOTypes
Moritz Angermann [Tue, 21 Mar 2017 14:59:49 +0000 (10:59 -0400)] 
rts linker: Introduce MachOTypes

This diff introduces MachOTypes, to reduce the need to typing `struct`
all the time.  It also coaleces the 64 and non 64 structs. It also adds
additional fiedls to the object code structure for macho, which makes
working with macho object code much simpler and requires less passing
around of variabls or address recomputation for the header, symbol
table, etc...

Furthermore this diff introduces a type for a linked list of stubs.

I had to move the #ifdef from the bottom of the file up, to be able to
extend the object code structure conditional on the use of the macho file format.

This is just one of the pieces for the rts linker
support for ios (aarch64-macho)


The following diagram and legend tries to explain the dependencies a
  .- D3240
D3255 <- D3252 <- D3251 <- This
  '- D3238

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: austin, erikd, simonmar, rwbarton, bgamari

Subscribers: rwbarton, thomie, ryantrinkle

Differential Revision:

2 years agoMake mmap r+w only during preload for iOS.
Moritz Angermann [Tue, 21 Mar 2017 14:58:28 +0000 (10:58 -0400)] 
Make mmap r+w only during preload for iOS.

While we do not yet enable mmap for ios builds.  If we later do, we must
not try to mmap r+w+x, on iOS as that clearly fails.

This diff also adds a check for the successful mmaping.

I don't think we can blanket change this to r+w for every case, unless
we are absolutely sure that we are going to remap this and set +x where

This is just one of the pieces for the rts linker support for ios


The following diagram and legend tries to explain the dependencies a
  .- D3240
D3255 <- D3252 <- D3251 <- D3239
  '- This

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: ezyang, austin, erikd, simonmar, bgamari, rwbarton

Reviewed By: bgamari

Subscribers: rwbarton, ryantrinkle, thomie

Differential Revision:

2 years agotestsuite: Mark T12622 as broken in ghci way
Ben Gamari [Sat, 25 Mar 2017 16:28:59 +0000 (12:28 -0400)] 
testsuite: Mark T12622 as broken in ghci way

See #13481.

2 years agotestsuite: Only run T13143 in optasm way
Ben Gamari [Sat, 25 Mar 2017 16:07:32 +0000 (12:07 -0400)] 
testsuite: Only run T13143 in optasm way

Otherwise we run it in the hpc way, which outputs different Core.

2 years agoRecompile if -fhpc is added or removed (#11798)
Reid Barton [Sat, 25 Mar 2017 14:53:29 +0000 (10:53 -0400)] 
Recompile if -fhpc is added or removed (#11798)

Test Plan: validate

Reviewers: austin, bgamari, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

Differential Revision:

2 years agoDrop dead code in rts/{Prelude.h,}
Moritz Angermann [Sat, 25 Mar 2017 14:53:17 +0000 (10:53 -0400)] 
Drop dead code in rts/{Prelude.h,}

The endevor to drop the `-Wl,-u,<sym>` requirement for linking the rts,
base, ,... turned out to be less fruitful than I had hoped. However it
did turn up a few dead symbols, that are referenced but for which the
definition seems to have diminished.

Reviewers: austin, rwbarton, geekosaur, erikd, simonmar, bgamari

Reviewed By: geekosaur, simonmar

Subscribers: thomie, snowleopard

Differential Revision:

2 years agoBump array submodule
Ben Gamari [Sun, 26 Mar 2017 23:06:36 +0000 (19:06 -0400)] 
Bump array submodule

Previous change fix 32-bit systems, but broke 64-bits

2 years agoBump array submodule
Ben Gamari [Sat, 25 Mar 2017 03:15:09 +0000 (23:15 -0400)] 
Bump array submodule

2 years agotestsuite: Add 32-bit output for compact_share test
Ben Gamari [Fri, 24 Mar 2017 18:27:23 +0000 (14:27 -0400)] 
testsuite: Add 32-bit output for compact_share test

2 years agotestsuite: Note x87 terribleness in num009
Ben Gamari [Fri, 24 Mar 2017 17:22:08 +0000 (13:22 -0400)] 
testsuite: Note x87 terribleness in num009

2 years agotestsuite: Update performance numbers for 32-bit platforms
Ben Gamari [Fri, 24 Mar 2017 16:26:03 +0000 (12:26 -0400)] 
testsuite: Update performance numbers for 32-bit platforms

2 years agotestsuite: Allow join007 to pass on 32-bit machines
Ben Gamari [Fri, 24 Mar 2017 16:27:35 +0000 (12:27 -0400)] 
testsuite: Allow join007 to pass on 32-bit machines

The output of the test overflows. Given that the result is stable
regardless of whether it overflows, I just made the expected output
word-size dependent.

2 years agorts: Fix stat output on 32-bit platforms
Ben Gamari [Fri, 24 Mar 2017 18:59:14 +0000 (14:59 -0400)] 
rts: Fix stat output on 32-bit platforms

The formatting strings fell out of sync with the arguments.

2 years agoEliminate word-size dependence in HsDumpAst output
Ben Gamari [Fri, 24 Mar 2017 16:05:23 +0000 (12:05 -0400)] 
Eliminate word-size dependence in HsDumpAst output

Fixes DumpTypecheckedAst output on 32-bit platforms.

2 years agotestsuite: Make T10245 pass on 32-bit platforms
Ben Gamari [Fri, 24 Mar 2017 15:36:31 +0000 (11:36 -0400)] 
testsuite: Make T10245 pass on 32-bit platforms

2 years agolinker: fix OpenBSD build failure, EM_PPC64 is not defined there
Sergei Trofimovich [Sun, 26 Mar 2017 14:40:40 +0000 (15:40 +0100)] 
linker: fix OpenBSD build failure, EM_PPC64 is not defined there

Adam Steen reported build failure on OpenBSD:
  rts/linker/Elf.c:402:0: error:
    error: 'EM_PPC64' undeclared (first use in this function)
      case EM_PPC64: IF_DEBUG(linker,debugBelch( "powerpc64" ));

OpenBSD-6.0 does not define EM_PPC64:
  /usr/include/sys/exec_elf.h:#define EM_PPC 20 /* PowerPC */

Reported-by: Adam Steen <>
Signed-off-by: Sergei Trofimovich <>
2 years agotestsuite: Add testcase for #13429
Ben Gamari [Fri, 24 Mar 2017 03:03:54 +0000 (23:03 -0400)] 
testsuite: Add testcase for #13429

2 years agotestsuite: Add failing testcase for #13233
Ben Gamari [Fri, 24 Mar 2017 02:53:29 +0000 (22:53 -0400)] 
testsuite: Add failing testcase for #13233

Thanks to Ryan Scott for the example.

2 years agoDocument hithertoo undocumented HPCTIXFILE option.
Edward Z. Yang [Fri, 24 Mar 2017 01:03:40 +0000 (21:03 -0400)] 
Document hithertoo undocumented HPCTIXFILE option.

Test Plan: none

Reviewers: bgamari, austin, dfeuer

Reviewed By: bgamari, dfeuer

Subscribers: dfeuer, rwbarton, thomie

Differential Revision:

2 years agox86 nativeGen: Fix test with mask in range [128,255] (#13425)
Reid Barton [Fri, 24 Mar 2017 01:02:29 +0000 (21:02 -0400)] 
x86 nativeGen: Fix test with mask in range [128,255] (#13425)

My commit bdb0c43c7 optimized the encoding of instructions to test
tag bits, but it did not always set exactly the same condition codes
since the testb instruction does a single-byte comparison, rather
than a full-word comparison.

It would be correct to optimize the expression `x .&. 128 > 0` to
the sequence

    testb $128, %al
    seta %al         ; note: 'a' for unsigned comparison,
                     ; not 'g' for signed comparison

but the pretty-printer is not the right place to make this kind of
context-sensitive optimization.

Test Plan: harbormaster

Reviewers: trofi, austin, bgamari, dfeuer

Reviewed By: trofi, dfeuer

Subscribers: thomie

Differential Revision:

2 years agoCmm: remove a few unused type aliases
Michal Terepeta [Fri, 24 Mar 2017 01:00:24 +0000 (21:00 -0400)] 
Cmm: remove a few unused type aliases

Test Plan: ./validate

Reviewers: austin, bgamari, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoImprove tracing in OccurAnal
Matthew Pickering [Fri, 24 Mar 2017 01:00:08 +0000 (21:00 -0400)] 
Improve tracing in OccurAnal

One commented out tracing function didn't type check and also show the
scores of loop breaker nodes.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoTypos in comments (notes too) [ci skip]
Gabor Greif [Fri, 24 Mar 2017 10:21:52 +0000 (11:21 +0100)] 
Typos in comments (notes too) [ci skip]

2 years agoghci/Linker.hs: Fix a typo in error message
Ömer Sinan Ağacan [Fri, 24 Mar 2017 06:10:00 +0000 (09:10 +0300)] 
ghci/Linker.hs: Fix a typo in error message

2 years Add bzip, gzip, and xz executable names to be overridden
Ben Gamari [Fri, 24 Mar 2017 00:59:21 +0000 (20:59 -0400)] Add bzip, gzip, and xz executable names to be overridden

Reviewers: austin, hvr, erikd

Reviewed By: erikd

Subscribers: rwbarton, thomie, erikd, snowleopard

Differential Revision:

2 years agoAllow colors to be customized
Phil Ruffwind [Fri, 24 Mar 2017 00:59:01 +0000 (20:59 -0400)] 
Allow colors to be customized

Allow customization of diagnostic colors through the GHC_COLORS
environment variable.  Some color-related code have been refactored to
PprColour to reduce the circular dependence between DynFlags,
Outputable, ErrUtils.  Some color functions that were part of Outputable
but were never used have been deleted.

Test Plan: validate

Reviewers: austin, hvr, bgamari, dfeuer

Reviewed By: bgamari, dfeuer

Subscribers: dfeuer, rwbarton, thomie, snowleopard

Differential Revision:

2 years agoBump haddock submodule
Ben Gamari [Fri, 24 Mar 2017 00:41:34 +0000 (20:41 -0400)] 
Bump haddock submodule

2 years agoMake unsafeInterleaveST less unsafe
David Feuer [Wed, 22 Mar 2017 21:25:03 +0000 (17:25 -0400)] 
Make unsafeInterleaveST less unsafe

* Make `unsafeInterleaveST` use `noDuplicate#` like
`unsafeInterleaveIO` does to prevent the suspended action from
being run in two threads.

* In order to accomplish this without `unsafeCoerce#`, generalize
the type of `noDuplicate#`.

* Add `unsafeDupableInterleaveST` to get the old behavior.

* Document unsafe `ST` functions and clean up some related

Fixes #13457

Reviewers: austin, hvr, bgamari, ekmett

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoHaddock submodule update.
Edward Z. Yang [Wed, 22 Mar 2017 21:14:45 +0000 (14:14 -0700)] 
Haddock submodule update.

Signed-off-by: Edward Z. Yang <>
2 years agotestsuite: Bump performance test allocations
Ben Gamari [Wed, 22 Mar 2017 00:21:13 +0000 (20:21 -0400)] 
testsuite: Bump performance test allocations

It's unclear what bumped these, but Simon had noticed that they are marginal.
Happily, all are improvements.

2 years agoBump unix submodule
Ben Gamari [Tue, 21 Mar 2017 14:07:44 +0000 (10:07 -0400)] 
Bump unix submodule

2 years agoLet GHC know MutVar# ops can't fail
David Feuer [Tue, 21 Mar 2017 04:12:07 +0000 (00:12 -0400)] 
Let GHC know MutVar# ops can't fail

The only way `readMutVar#` or `writeMutVar#` can fail is if its
argument is not a valid pointer. I believe we ensure this by
construction, and never test for pointer validity. So I think it
should be safe to say that it can't fail.

Fixes #13424

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoCorrectly account for -package-db ordering when picking packages.
Edward Z. Yang [Sun, 19 Mar 2017 23:07:49 +0000 (16:07 -0700)] 
Correctly account for -package-db ordering when picking packages.

When I originally implemented ABI-based shadowing as per
ee4e1654c31b9c6f6ad9b19ece25f040bbbcbd72, I switched our strategy
from pasting together lists to creating a map of all units first,
and then selecting packages from this.  However, what I did
not realize when doing this was that we actually depended
on the *ordering* of these lists later, when we selected
a preferred package to use.

The crux is if I have -package-db db1 -package-db db2 -package p-0.1,
and p-0.1 is provided by both db1 and db2, which one does the
-package flag select?  Previously, this was undetermined; now
we always select the instance from the LATEST package database.
(If p-0.1 shows up multiple times in the same database, once again
the chosen package is undefined.)

The reason why cabal08 intermittently failed was that, in practice,
we were sorting on the UnitId, so when we bumped version numbers,
that often wibbled the UnitIds so that they compared oppositely.
I've extended the test so that we check that the relation is

Fixes #13313

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

Reviewers: bgamari, austin

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoDocument the perplexing reversed nature of extraPkgConfs and friends.
Edward Z. Yang [Sun, 19 Mar 2017 23:06:55 +0000 (16:06 -0700)] 
Document the perplexing reversed nature of extraPkgConfs and friends.

Signed-off-by: Edward Z. Yang <>
2 years agoUniqMap implementation.
Edward Z. Yang [Sun, 19 Mar 2017 22:24:01 +0000 (15:24 -0700)] 
UniqMap implementation.

Signed-off-by: Edward Z. Yang <>
2 years agoFix Windows x86 build
Tamar Christina [Sat, 18 Mar 2017 15:19:01 +0000 (15:19 +0000)] 
Fix Windows x86 build

Fix some `-Werror` failures and work around a
bug in the `x86` version of `mingw-w64-crt`'s libraries.

The bump in the `win32` submodule is required for this.

Test Plan: ./validate

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie

Differential Revision:

2 years agomkUserGuidePart: Remove duplicate -XDeriveGeneric entry
Ömer Sinan Ağacan [Mon, 20 Mar 2017 05:49:36 +0000 (08:49 +0300)] 
mkUserGuidePart: Remove duplicate -XDeriveGeneric entry

2 years agousers-guide: Document TemplateHaskell availability
Ben Gamari [Sun, 19 Mar 2017 15:26:08 +0000 (11:26 -0400)] 
users-guide: Document TemplateHaskell availability

2 years agogenSym: Fix DEBUG build
Ben Gamari [Sat, 18 Mar 2017 18:45:35 +0000 (14:45 -0400)] 
genSym: Fix DEBUG build

It looks like this was likely a cut-and-paste error.

2 years agoUpdate link to paper about demand analyser in user guide
Matthew Pickering [Fri, 17 Mar 2017 00:28:26 +0000 (20:28 -0400)] 
Update link to paper about demand analyser in user guide

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoOccurAnal.hs: Add an assert for an invariant
Ömer Sinan Ağacan [Sun, 19 Mar 2017 05:28:37 +0000 (08:28 +0300)] 
OccurAnal.hs: Add an assert for an invariant

Reviewers: austin, bgamari, dfeuer

Reviewed By: bgamari, dfeuer

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoOccurAnal.hs: Fix "Adjusting for lambdas" note name
Ömer Sinan Ağacan [Sat, 18 Mar 2017 06:56:37 +0000 (09:56 +0300)] 
OccurAnal.hs: Fix "Adjusting for lambdas" note name

2 years agoRevert "GHC_STAGE1 isn't defined, use other form."
Edward Z. Yang [Sat, 18 Mar 2017 02:33:53 +0000 (19:33 -0700)] 
Revert "GHC_STAGE1 isn't defined, use other form."

This reverts commit 138434fbef32ec86733747bdbc57f6da73cad500.

2 years agoNo join-point from an INLINE function with wrong arity
Simon Peyton Jones [Fri, 17 Mar 2017 16:25:41 +0000 (16:25 +0000)] 
No join-point from an INLINE function with wrong arity

The main payload of this patch is NOT to make a join-point
from a function with an INLINE pragma and the wrong arity;
see Note [Join points and INLINE pragmas] in CoreOpt.
This is what caused Trac #13413.

But we must do the exact same thing in simpleOptExpr,
which drove me to the following refactoring:

* Move simpleOptExpr and simpleOptPgm from CoreSubst to a new
  module CoreOpt along with a few others (exprIsConApp_maybe,
  pushCoArg, etc)

  This eliminates a module loop altogether (delete
  CoreArity.hs-boot), and stops CoreSubst getting too huge.

* Rename Simplify.matchOrConvertToJoinPoint
     to joinPointBinding_maybe
  Move it to the new CoreOpt
  Use it in simpleOptExpr as well as in Simplify

* Define CoreArity.joinRhsArity and use it

2 years agoImprove Lint a little
Simon Peyton Jones [Fri, 17 Mar 2017 08:54:39 +0000 (08:54 +0000)] 
Improve Lint a little

Better location info if the error is in an unfolding

2 years agoTest #13435 in typecheck/should_run/T13435
Richard Eisenberg [Fri, 17 Mar 2017 15:22:19 +0000 (11:22 -0400)] 
Test #13435 in typecheck/should_run/T13435

2 years agoRemove solveSomeEqualities
Richard Eisenberg [Thu, 16 Mar 2017 19:56:37 +0000 (15:56 -0400)] 
Remove solveSomeEqualities

I had thought that it was necessary to solve kind-level equalities
before validity-checking a type, but I was wrong. This patch simply
deletes code. Hooray!

2 years agoFix #13343 by not defaulting SigTvs
Richard Eisenberg [Thu, 16 Mar 2017 15:59:45 +0000 (11:59 -0400)] 
Fix #13343 by not defaulting SigTvs

test case: typecheck/should_compile/T13343

2 years agoFix #13202 by failing more eagerly in tcRnStmt
Richard Eisenberg [Thu, 16 Mar 2017 15:38:05 +0000 (11:38 -0400)] 
Fix #13202 by failing more eagerly in tcRnStmt

test cases: ghci/scripts/T13202{,a}

2 years agoFix #12709 by not building bad applications
Richard Eisenberg [Thu, 16 Mar 2017 14:34:29 +0000 (10:34 -0400)] 
Fix #12709 by not building bad applications

In an effort to report multiple levity polymorphism errors all at
once, the desugarer does not fail when encountering bad levity
polymorphism. But we must be careful not to build the bad applications,
lest they try to satisfy the let/app invariant and call
isUnliftedType on a levity polymorphic type. This protects calls
to mkCoreAppDs appropriately.

test case: typecheck/should_fail/T12709

2 years agoComment coercion flattening [skip ci]
Richard Eisenberg [Fri, 3 Mar 2017 19:23:24 +0000 (14:23 -0500)] 
Comment coercion flattening [skip ci]

2 years agoTypos in manual and comments [ci skip]
Gabor Greif [Fri, 17 Mar 2017 09:20:42 +0000 (10:20 +0100)] 
Typos in manual and comments [ci skip]

2 years agoGHC_STAGE1 isn't defined, use other form.
Edward Z. Yang [Fri, 10 Mar 2017 22:33:39 +0000 (14:33 -0800)] 
GHC_STAGE1 isn't defined, use other form.

I don't really know why this stopped working for me, but it
did on a recent clean.  I don't know if this is right but
it solved the problem for me.

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

Reviewers: bgamari, austin

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoSave renamed syntax when signature merging.
Edward Z. Yang [Mon, 13 Mar 2017 09:22:06 +0000 (02:22 -0700)] 
Save renamed syntax when signature merging.

This is required to make Haddock work correctly.

Comes with a Haddock submodule update for better rendering.

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

Reviewers: bgamari, austin

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoGHC.Word: Move Read instances to GHC.Read
Erik de Castro Lopo [Fri, 17 Mar 2017 06:47:33 +0000 (17:47 +1100)] 
GHC.Word: Move Read instances to GHC.Read

Test Plan: Validate

Reviewers: hvr, austin, bgamari

Reviewed By: hvr

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoBump unix submodule
Ben Gamari [Thu, 16 Mar 2017 00:38:36 +0000 (20:38 -0400)] 
Bump unix submodule

2 years agoBump hsc2hs submodule
Ben Gamari [Wed, 15 Mar 2017 21:52:47 +0000 (17:52 -0400)] 
Bump hsc2hs submodule

2 years agoBump nofib submodule
Ben Gamari [Wed, 15 Mar 2017 21:48:50 +0000 (17:48 -0400)] 
Bump nofib submodule

2 years agoDecrease locked region size on Windows to fix ERROR_LOCK_INVALID_RANGE
Andrzej Rybczak [Wed, 15 Mar 2017 18:30:48 +0000 (14:30 -0400)] 
Decrease locked region size on Windows to fix ERROR_LOCK_INVALID_RANGE

Reviewers: austin, hvr, bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoBump hsc2hs submodule
Ben Gamari [Wed, 15 Mar 2017 15:55:09 +0000 (11:55 -0400)] 
Bump hsc2hs submodule

Fixes #13388. Also updates the expected output for T12504, which
previously contained a redundant LINE pragma.

2 years agoIntroduce putLogMsg
Ben Gamari [Wed, 15 Mar 2017 13:29:24 +0000 (09:29 -0400)] 
Introduce putLogMsg

This factors out the repetition of (log_action dflags dflags) and will
hopefully allow us to someday better abstract log output.

Test Plan: Validate

Reviewers: austin, hvr, goldfire

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoIntroduce and use EnumSet in DynFlags
Ben Gamari [Wed, 15 Mar 2017 18:30:33 +0000 (14:30 -0400)] 
Introduce and use EnumSet in DynFlags

This factors out a repeated pattern found in DynFlags, where we use an
IntSet and Enum to represent sets of flags.

Requires bump of haddock submodule.

Test Plan: validate

Reviewers: austin, goldfire

Subscribers: rwbarton, thomie, snowleopard

Differential Revision:

2 years agoAlways build GHCi libs
Simon Marlow [Wed, 15 Mar 2017 13:28:10 +0000 (09:28 -0400)] 
Always build GHCi libs

Since the introduction of -split-sections, using GHCi with the RTS
linker is really slow:

$ time (echo :quit | ./inplace/bin/ghc-stage2 --interactive -fexternal-interpreter)
GHCi, version 8.1.20170304:  :? for help
Prelude> Leaving GHCi.

real        0m3.793s

(when we use `-fexternal-interpreter` it uses the RTS linker by default,
you can make it use the system linker by adding `-dynamic`)

Building the GHCi libs doesn't take much time or space in the GHC build,
but makes things much quicker for people using the RTS linker:

$ time (echo :quit | ./inplace/bin/ghc-stage2 --interactive -fexternal-interpreter)
GHCi, version 8.1.20170304:  :? for help
Prelude> Leaving GHCi.

real        0m0.285s

So I propose that we build and ship them unconditionally.

Test Plan: validate, perf tests above

Reviewers: bgamari, austin, niteria, erikd, Phyx

Reviewed By: bgamari

Subscribers: rwbarton, thomie, snowleopard

Differential Revision:

2 years agotestsuite: Bump margin of T4029 to 15%
Ben Gamari [Wed, 15 Mar 2017 17:34:48 +0000 (13:34 -0400)] 
testsuite: Bump margin of T4029 to 15%

This test has been fluctuating wildly recently. Moreover, it's not even clear to
me that this is a particularly useful thing to be testing.

2 years agoReimplement minusList using Set
David Feuer [Tue, 14 Mar 2017 23:53:39 +0000 (19:53 -0400)] 
Reimplement minusList using Set

`minusList ms ns` was `O(m*n)`. Now it's `O((m + n) log n)`, which
should be a bit better.

Reviewers: austin, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, rwbarton, thomie

Differential Revision:

2 years agoShortcut a test in exprIsOk
David Feuer [Tue, 14 Mar 2017 20:43:37 +0000 (16:43 -0400)] 
Shortcut a test in exprIsOk

`exprIsOk` didn't shortcut properly when checking `case` (it used
`foldl` inappropriately). Fix that.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoFix #13337.
Richard Eisenberg [Tue, 14 Mar 2017 17:32:00 +0000 (13:32 -0400)] 
Fix #13337.

The big change is the introduction of solveSomeEqualities. This
is just like solveEqualities, but it doesn't fail if there are unsolved
equalities when it's all done. Anything unsolved is re-emitted. This
is appropriate if we are not kind-generalizing, so this new form
is used when decideKindGeneralizationPlan says not to.

We initially thought that any use of solveEqualities would be tied
to kind generalization, but this isn't true. For example, we need
to solveEqualities a bunch in the "tc" pass in TcTyClsDecls (which
is really desugaring). These equalities are all surely going to be
soluble (if they weren't the "kc" pass would fail), but we still
need to solve them again. Perhaps if the "kc" pass produced type-
checked output that is then desugared, solveEqualities really would
be tied only to kind generalization.

Updates haddock submodule.

Test Plan: ./validate, typecheck/should_compile/T13337

Reviewers: simonpj, bgamari, austin

Reviewed By: simonpj

Subscribers: RyanGlScott, rwbarton, thomie

Differential Revision:

2 years agoFix Windows GCC driver
Tamar Christina [Tue, 14 Mar 2017 17:31:36 +0000 (13:31 -0400)] 
Fix Windows GCC driver

In Windows 10 Insiders build 15019+ which will probably be released
mainstream somewhere this year Microsoft seems to have started being
stricter with API calls.

The call to `FreeConsole` just after `CreateProcess` is making Windows
treat the process
as an interactive process. In which case it tries to use the `Desktop
session` but fails resulting
in the cryptic error reported.

I don't understand why the call to `FreeConsole` was there and it
doesn't seem to be needed,
so removed.

This fixes #13411

Test Plan: ./validate, alternative just do anything with ghc which
requires compilation.

Reviewers: austin, bgamari, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, #ghc_windows_task_force

Differential Revision:

2 years agoAllow associated types to pattern-match in non-class-bound variables
Ryan Scott [Tue, 14 Mar 2017 14:58:58 +0000 (10:58 -0400)] 
Allow associated types to pattern-match in non-class-bound variables

After 8136a5cbfcd24647f897a2fae9fcbda0b1624035 (#11450), if you have
a class with an associated type:

class C a where
  type T a b

And you try to create an instance of `C` like this:

instance C Int where
  type T Int Char = Bool

Then it is rejected, since you're trying to instantiate the variable ``b`` with
something other than a type variable. But this restriction proves quite
onerous in practice, as it prevents you from doing things like this:

class C a where
  type T a (b :: Identity c) :: c

instance C Int where
  type T Int ('Identity x) = x

You have to resort to an auxiliary type family in order to define this now,
which becomes extremely tiring. This lifts this restriction and fixes #13398,
in which it was discovered that adding this restriction broke code in the wild.

Test Plan: ./validate

Reviewers: simonpj, bgamari, austin

Reviewed By: simonpj

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoFurther document :type +v's role in analyzing -XTypeApplications in GHCi
Ryan Scott [Tue, 14 Mar 2017 14:58:41 +0000 (10:58 -0400)] 
Further document :type +v's role in analyzing -XTypeApplications in GHCi

The section on `-XTypeApplications` in the users' guide isn't terribly
clear on how to view the visibility of a function type signature's type
variables in GHCi properly (i.e., using the `:type +v` GHCi command). This
adds some more exposition that demonstrates how to use `:type +v` (and why you
don't want to use `:type`).

Fixes #13401.

Test Plan: Eyeball it

Reviewers: bgamari, austin, goldfire, crockeea

Reviewed By: goldfire, crockeea

Subscribers: rwbarton, thomie, crockeea

Differential Revision:

2 years agotestsuite: Bump allocations for T4029
Ben Gamari [Tue, 14 Mar 2017 14:04:40 +0000 (10:04 -0400)] 
testsuite: Bump allocations for T4029

Both the OS X build machine and my local builds have been failing.
Unfortunately, our x86_64 Linux machine has been succeeding.

2 years agoIntroduce and use mkLetRec, mkLetNonRec
Ben Gamari [Mon, 13 Mar 2017 23:46:38 +0000 (19:46 -0400)] 
Introduce and use mkLetRec, mkLetNonRec

Test Plan: Validate

Reviewers: austin

Subscribers: rwbarton, thomie

Differential Revision:

2 years agoFix CaseIdentity optimisation AGAIN
Simon Peyton Jones [Tue, 14 Mar 2017 13:52:48 +0000 (13:52 +0000)] 
Fix CaseIdentity optimisation AGAIN

In this commit
    commit 02ac2974ce8e537372bff8d9e0a6efb461ed2c59
    Author: Simon Peyton Jones <>
    Date:   Wed Nov 16 10:37:47 2011 +0000

    Fix CaseIdentity optimisaion

    In fixing one bug I'd introduced another;
       case x of { T -> T; F -> F }
    wasn't getting optmised!  Trivial to fix.

I introduced yet another!  This line of code in SimplUtils.mkCase1

    check_eq (Var v)    (DataAlt con) []   = v == dataConWorkId con
                                             -- Optimisation only

is patently false when arg_tys is non-empty.  Astonishing that it
has not shown up before now.

Easily fixed though.  This was all shown up by Trac #13417, which is
now fixed.

Merge to 8.0, 8.2.