3 years agoBuild system: don't create mk/
Thomas Miedema [Sat, 3 Oct 2015 19:42:52 +0000 (21:42 +0200)] 
Build system: don't create mk/

A `make` build after running `./validate` earlier should use the normal
mk/ settings, without having to manually delete the leftover
file mk/are-validating or run `make clean` first.

Reviewed by: austin

Differential Revision:

3 years agoMake Windows linker more robust to unknown sections
Tamar Christina [Sat, 3 Oct 2015 20:28:07 +0000 (22:28 +0200)] 
Make Windows linker more robust to unknown sections

The Windows Linker has 3 main parts that this patch changes.

1) Identification and classification of sections
2) Adding of symbols to the symbols tables
3) Reallocation of sections

Previously section identification used to be done on a whitelisted
basis. It was also exclusively being done based on the names of the
sections. This meant that there was a bit of a cat and mouse game
between `GCC` and `GHC`. Every time `GCC` added new sections there was a
good chance `GHC` would break. Luckily this hasn't happened much in the
past because the `GCC` versions `GHC` used were largely unchanged.

The new code instead treats all new section as `CODE` or `DATA`
sections, and changes the classifications based on the `Characteristics`
flag in the PE header. By doing so we no longer have the fragility of
changing section names. The one exception to this is the `.ctors`
section, which has no differentiating flag in the PE header, but we know
we need to treat it as initialization data.

The check to see if the sections are aligned by `4` has been removed.
The reason is that debug sections often time are `1 aligned` but do have
relocation symbols. In order to support relocations of `.debug` sections
this check needs to be gone. Crucially this assumption doesn't seem to
be in the rest of the code. We only check if there are at least 4 bytes
to realign further down the road.

The second loop is iterating of all the symbols in the file and trying
to add them to the symbols table. Because the classification of the
sections we did previously are (currently) not available in this phase
we still have to exclude the sections by hand. If they don't we will
load in symbols from sections we've explicitly ignored the in # 1. This
whole part should rewritten to avoid this. But didn't want to do it in
this commit.

Finally the sections are relocated. But for some reason the PE files
contain a Linux relocation constant in them `0x0011` This constant as
far as I can tell does not come from GHC (or I couldn't find where it's
being set). I believe this is probably a bug in GAS. But because the
constant is in the output we have to handle it. I am thus mapping it to
the constant I think it should be `0x0003`.

Finally, static linking *should* work, but won't. At least not if you
want to statically link `libgcc` with exceptions support. Doing so would
require you to link `libgcc` and `libstd++` but also `libmingwex`. The
problem is that `libmingwex` also defines a lot of symbols that the RTS
automatically injects into the symbol table. Presumably because they're
symbols that it needs. like `coshf`. The these symbols are not in a
section that is declared with weak symbols support. So if we ever want
to get this working, we should either a) Ask mingw to declare the
section as such, or b) treat all a imported symbols as being weak.
Though this doesn't seem like it's a good idea..

Test Plan:
Running ./validate for both x86 and x86_64

Also running the specific test case for #10672

make TESTS="T10672_x86 T10672_x64"

Reviewed By: ezyang, thomie, austin

Differential Revision:

GHC Trac Issues: #9907, #10672, #10563

3 years agotestsuite: Bump up haddock.base expected allocations
Ben Gamari [Sat, 3 Oct 2015 18:45:32 +0000 (20:45 +0200)] 
testsuite: Bump up haddock.base expected allocations

This started intermittently failing as a result of D1239.
I suspect this was just the straw that broke the camel's back however.

3 years agoFill in associated type defaults with DeriveAnyClass
RyanGlScott [Sat, 3 Oct 2015 18:06:48 +0000 (20:06 +0200)] 
Fill in associated type defaults with DeriveAnyClass

Unlike `-XDefaultSignatures`, `-XDeriveAnyClass` would not fill in
associated type family defaults when deriving a class which contained

In order to fix this properly, `tcATDefault` needed to be used from
`TcGenDeriv`. To avoid a module import cycle, `tcATDefault` was moved
from `TcInstDcls` to `TcClsDcl`.

Fixes #10361.

Test Plan: ./validate

Reviewers: kosmikus, dreixel, bgamari, austin, simonpj

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10361

3 years agoEnable `Enumeration is empty` warnings for `Integer`
Herbert Valerio Riedel [Sat, 3 Oct 2015 18:05:11 +0000 (20:05 +0200)] 
Enable `Enumeration is empty` warnings for `Integer`

This warning was implemented via
abb3a9faa88fad3562ac41a148dd683765f47565 for addressing #7881. The
bounded H2010 integral types were handled, but the `Integer` type was
missed for the enumeration warning.

Fixes #10929

Test Plan: reused T7881 testcase

Reviewers: thomie, bgamari, austin

Reviewed By: thomie, bgamari, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10929

3 years agoMake GHC generics capable of handling unboxed types
RyanGlScott [Sat, 3 Oct 2015 17:21:37 +0000 (19:21 +0200)] 
Make GHC generics capable of handling unboxed types

This adds a data family (`URec`) and six data family instances (`UAddr`,
`UChar`, `UDouble`, `UFloat`, `UInt`, and `UWord`) which a `deriving
Generic(1)` clause will generate if it sees `Addr#`, `Char#`, `Double#`,
`Float#`, `Int#`, or `Word#`, respectively. The programmer can then
provide instances for these data family instances to provide custom
implementations for unboxed types, similar to how derived `Eq`, `Ord`,
and `Show` instances currently special-case unboxed types.

Fixes #10868.

Test Plan: ./validate

Reviewers: goldfire, dreixel, bgamari, austin, hvr, kosmikus

Reviewed By: dreixel, kosmikus

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #10868

3 years agoTestsuite: update expected output for T8602
Thomas Miedema [Sat, 3 Oct 2015 17:15:20 +0000 (19:15 +0200)] 
Testsuite: update expected output for T8602

3 years agoBuild system: add mk/
Thomas Miedema [Sat, 3 Oct 2015 17:02:37 +0000 (19:02 +0200)] 
Build system: add mk/

Reviewers: austin, bgamari

Subscribers: erikd

Differential Revision:


3 years agoFix broken validation Build 6564 and accepting a few other test results
Tamar Christina [Sat, 3 Oct 2015 16:37:29 +0000 (18:37 +0200)] 
Fix broken validation Build 6564 and accepting a few other test results

Test Plan: ./validate

Reviewers: thomie, austin, bgamari

Reviewed By: bgamari

Subscribers: #ghc_windows_task_force

Differential Revision:

3 years agoPrevent GHC from silently dying when preprocessor is not found
Tamar Christina [Sat, 3 Oct 2015 10:37:00 +0000 (12:37 +0200)] 
Prevent GHC from silently dying when preprocessor is not found

The Windows preprocessor code calls `runInteractiveProcess` but does
not check if an exception is thrown.
`runInteractiveProcess` calls `CreateProcess` which when given a format
the system loader does not know about
will throw an exception. This is what makes #9399 fail.

Ultimately we should not use any `CreateProcess` based calls but
instead `ShellExecuteEx` as  this would allow
us to run applications that the shell knows about instead of just the
loader. More details on #365.

This patch removes `PhaseFailed` and throws `ProgramError` instead.
`PhaseFailed` was largely unneeded since it never gave
very useful information aside from the `errorcode` which was almost
always `1`. `IOErrors` have also been eliminated and `GhcExceptions`
thrown in their place wherever possible.

Updates haddock submodule.

Test Plan:
`./validate` to make sure anything didn't break and
`make TESTS="T365"` to test that an error is now properly thrown

Reviewers: austin, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #365

3 years agodocs: Fix
Ben Gamari [Sat, 3 Oct 2015 08:30:20 +0000 (10:30 +0200)] 
docs: Fix

3 years agoMove user's guide to ReStructuredText
Ben Gamari [Wed, 30 Sep 2015 23:08:41 +0000 (01:08 +0200)] 
Move user's guide to ReStructuredText

3 years agoDon't use old linkable for hs-boot files.
Edward Z. Yang [Fri, 2 Oct 2015 21:13:03 +0000 (23:13 +0200)] 
Don't use old linkable for hs-boot files.

We should only use the old linkable when the really is nothing
to be done.  In the case of hs-boot, there should just not be
a linkable.

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

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoFix signature of atomic builtins
Andreas Schwab [Fri, 2 Oct 2015 21:03:12 +0000 (23:03 +0200)] 
Fix signature of atomic builtins

This patch is due to Andreas Schwab.

This fixes #10926, which reports (on AArch64) errors of the form,

/tmp/ghc1492_0/ghc_1.hc:2844:25: warning: passing argument 1 of
'hs_atomic_xor64' makes pointer from integer without a cast
     _c1Ho = hs_atomic_xor64((*Sp) + (((Sp[1]) << 0x3UL) + 0x10UL), Sp[2]);

In file included from
/home/abuild/rpmbuild/BUILD/ghc-7.10.2/includes/Stg.h:273:0: 0,
                 from /tmp/ghc1492_0/ghc_1.hc:3:

     note: expected 'volatile StgWord64 *
           {aka volatile long unsigned int *}'
           but argument is of type 'long unsigned int'
     StgWord64 hs_atomic_xor64(volatile StgWord64 *x, StgWord64 val);

Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10926

3 years agoMove CallStack back to base
Ben Gamari [Fri, 2 Oct 2015 13:50:34 +0000 (15:50 +0200)] 
Move CallStack back to base

CallStack requires tuples, instances of which are defined in GHC.Tuple.
Unfortunately the change made in D757 to the `Typeable` deriving
mechanism means that `GHC.Tuple` must import `GHC.Types` for types
necessary to generate type representations.  This results in a cycle.

Test Plan: Validate

Reviewers: gridaphobe, austin, hvr

Subscribers: thomie

Differential Revision:

3 years agoLLVM: Factor out accumulation of LLVM statements and variables
Ben Gamari [Fri, 2 Oct 2015 13:49:24 +0000 (15:49 +0200)] 
LLVM: Factor out accumulation of LLVM statements and variables

The LLVM code generator currently has a rather large amount of
boilerplate devoted to piping around and building up various AST
elements. This is rather unfortunate for a language which prides itself
on ease of abstraction and detracts from readability.

Here I continue a refactoring that I originally suggested in D991, using
`WriterT` to factor out this pattern. `WriterT` is in general a bit
problematic from an evaluation perspective, but the expressions here are
small enough that it should be a problem in practice.

Test Plan: Validate

Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

3 years agoLLVM: Implement atomic operations in terms of LLVM primitives
Ben Gamari [Fri, 2 Oct 2015 13:48:55 +0000 (15:48 +0200)] 
LLVM: Implement atomic operations in terms of LLVM primitives

This fixes Trac #7883.

This adds proper support for,
  * `MO_AtomicRMW`
  * `MO_AtomicWrite`
  * `MO_CmpXChg`

Test Plan: Validate

Reviewers: rrnewton, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #7883

3 years agonativeGen PPC: fix > 16 bit offsets in stack handling
Peter Trommler [Fri, 2 Oct 2015 13:48:30 +0000 (15:48 +0200)] 
nativeGen PPC: fix > 16 bit offsets in stack handling

Implement access to spill slots at offsets larger than 16 bits.
Also allocation and deallocation of spill slots was restricted to
16 bit offsets. Now 32 bit offsets are supported on all PowerPC

The implementation of 32 bit offsets requires more than one instruction
but the native code generator wants one instruction. So we implement
pseudo-instructions that are pretty printed into multiple assembly

With pseudo-instructions for spill slot allocation and deallocation
we can also implement handling of the back chain pointer according
to the ELF ABIs.

Test Plan: validate (especially on powerpc (32 bit))

Reviewers: bgamari, austin, erikd

Reviewed By: erikd

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #7830

3 years agoDocument peculiarities of `traceM`.
Matthias Fischmann [Fri, 2 Oct 2015 13:48:08 +0000 (15:48 +0200)] 
Document peculiarities of `traceM`.

Reviewers: bgamari, hvr, austin

Reviewed By: bgamari, hvr, austin

Subscribers: thomie

Differential Revision:

3 years agoFix treatment of -0.0
Ben Gamari [Fri, 2 Oct 2015 13:40:43 +0000 (15:40 +0200)] 
Fix treatment of -0.0

Here we fix a few mis-optimizations that could occur in code with
floating point comparisons with -0.0. These issues arose from our
insistence on rewriting equalities into case analyses and the
simplifier's ignorance of floating-point semantics.

For instance, in Trac #10215 (and the similar issue Trac #9238) we
turned `ds == 0.0` into a case analysis,

case ds of
    __DEFAULT -> ...
    0.0 -> ...

Where the second alternative matches where `ds` is +0.0 and *also* -0.0.
However, the simplifier doesn't realize this and will introduce a local
inlining of `ds = -- +0.0` as it believes this is the only
value that matches this pattern.

Instead of teaching the simplifier about floating-point semantics
we simply prohibit case analysis on floating-point scrutinees and keep
this logic in the comparison primops, where it belongs.

We do several things here,

 - Add test cases from relevant tickets
 - Clean up a bit of documentation
 - Desugar literal matches against floats into applications of the
   appropriate equality primitive instead of case analysis
 - Add a CoreLint to ensure we don't pattern match on floats in Core

Test Plan: validate with included testcases

Reviewers: goldfire, simonpj, austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10215, #9238

3 years agoUpdate nofib submodule again
Joachim Breitner [Fri, 2 Oct 2015 11:20:59 +0000 (13:20 +0200)] 
Update nofib submodule again

reverting my bogus commit there.

3 years agoUpdate nofib submodule
Joachim Breitner [Fri, 2 Oct 2015 09:09:31 +0000 (11:09 +0200)] 
Update nofib submodule

to contain these commits:
   commit 8bffe3cb01ce404ab493de2b4316f2c1c4a9bda9
   Author: Joachim Breitner <>
   Date:   Fri Oct 2 10:09:17 2015 +0200

       Expected output of mandel when run under valgrind

       probably due to rounding/floating point precision numbers. It looks
       broken, but so does the existing file spectral/mandel/mandel.stdout-mingw.

   commit f9a577973edf6976e4c0703bf2afac900d7b6fd8
   Author: Gabor Greif <>
   Date:   Fri Jul 31 00:43:38 2015 +0200

       Typos in comments

   commit 20ae9113ad31eca426883544f597a3cae9b60d94
   Author: Simon Peyton Jones <>
   Date:   Fri Apr 24 15:10:02 2015 +0100

       Add exact-real-arithmetic benchmark from David Lester

3 years agoAdd Data.Semigroup and Data.List.NonEmpty (re #10365)
Herbert Valerio Riedel [Sun, 27 Sep 2015 10:01:41 +0000 (12:01 +0200)] 
Add Data.Semigroup and Data.List.NonEmpty (re #10365)

This implements phase 1 of the semigroup-as-monoid-superclass
proposal (

The modules were migrated from the `semigroups-0.17` release mostly
as-is, except for dropping several trivial `{-# INLINE #-}`s,
removing CPP usage, and instances for types & classes provided
outside of `base` (e.g. `containers`, `deepseq`, `hashable`, `tagged`,
`bytestring`, `text`)

Differential Revision:

3 years agoTypos in comments
Joachim Breitner [Thu, 1 Oct 2015 19:55:57 +0000 (21:55 +0200)] 
Typos in comments

3 years ago.gitignore update for some test files.
Edward Z. Yang [Sat, 19 Sep 2015 05:30:12 +0000 (22:30 -0700)] 
.gitignore update for some test files.

Signed-off-by: Edward Z. Yang <>
3 years agoLexer: delete dead code for binary character literals
Thomas Miedema [Tue, 29 Sep 2015 15:54:32 +0000 (17:54 +0200)] 
Lexer: delete dead code for binary character literals

The Haskell 2010 report chapter 2.6 (Characters and String Literals)

  "Numeric escapes such as \137 are used to designate the character with
  decimal representation 137; octal (e.g. \o137) and hexadecimal (e.g.
  \x37) representations are also allowed."

Commit 1c0b5fdc9f2b6ea8166cc565383d4cd20432343c added syntax for writing
character literals using binary notation (e.g. '\b100100'). But this
code can never be reached, because '\b' already represents "backspace".

Turn on -fwarn-overlapping-patterns to catch such bugs in the future.

Reviewed by: hvr

Differential Revision:

3 years agoAllow enumDeltaIntegerFB to be inlined
Joachim Breitner [Mon, 28 Sep 2015 11:48:40 +0000 (13:48 +0200)] 
Allow enumDeltaIntegerFB to be inlined

The function is very small and the compiler should be at liberty to
inline it. But it is recursive, so it did not do it before. By applying
the usual transformation with a local recursive function, GHC can now
inline it, producing the loop that one would expect.

3 years agoreify associated types when reifying typeclasses(#10891)
Ömer Sinan Ağacan [Sat, 26 Sep 2015 19:07:51 +0000 (21:07 +0200)] 
reify associated types when reifying typeclasses(#10891)

As reported in Trac #10891, Template Haskell's `reify` was not
generating Decls for associated types. This patch fixes that.

Note that even though `reifyTyCon` function used in this patch returns
some type instances, I'm ignoring that.

Here's an example of how associated types are encoded with this patch:

(Simplified representation)

    class C a where
      type F a :: *


    OpenTypeFamilyD "F" ["a"]

With default type instances:

    class C a where
      type F a :: *
      type F a = a


    OpenTypeFamilyD "F" ["a"]
    TySynInstD "F" (TySynEqn [VarT "a"] "a")

Test Plan:
This patch was already reviewed and even merged. The patch is later
reverted because apparently it broke the build some time between the
validation of this patch and merge. Creating this new ticket to fix the

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10891

3 years agorts: Clean up whitespace in Trace.h
Ben Gamari [Sat, 26 Sep 2015 17:03:18 +0000 (19:03 +0200)] 
rts: Clean up whitespace in Trace.h

3 years agoDebug: Remove extraneous LANGUAGE CPP
Ben Gamari [Mon, 24 Aug 2015 09:42:24 +0000 (11:42 +0200)] 
Debug: Remove extraneous LANGUAGE CPP

3 years agoSkip a possible BOM in utf8 encoding
Joachim Breitner [Wed, 23 Sep 2015 08:10:03 +0000 (10:10 +0200)] 
Skip a possible BOM in utf8 encoding

and not the system locale, which might be something else. This fixes
bug #10907. A test is added, but less useful than it could be until
task #10909 is done.

Differential Revision: D1274

3 years agoDwarf: Ensure block length is encoded correctly
Ben Gamari [Fri, 25 Sep 2015 10:51:54 +0000 (12:51 +0200)] 
Dwarf: Ensure block length is encoded correctly

This is supposed to be encoded with ULEB128 which the previous
implementation would only guarranty with short lengths. This likely
holds in nearly all cases, but I'd really rather not take changes.

I fix this using the `.uleb128` directive. I'm not certain that this is
portable across assemblers but it makes this quite straightforward and
at the moment I value correctness over portability.

Test Plan: Compare implementation to DWARF spec

Reviewers: scpmw, austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

3 years agoDwarf: Rename binding to avoid shadowing ppr
Ben Gamari [Fri, 25 Sep 2015 10:51:01 +0000 (12:51 +0200)] 
Dwarf: Rename binding to avoid shadowing ppr

Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

3 years agoWeak: Don't require wrapping/unwrapping of finalizers
Ben Gamari [Wed, 23 Sep 2015 12:36:40 +0000 (14:36 +0200)] 
Weak: Don't require wrapping/unwrapping of finalizers

To quote Simon Marlow,

    We don't expect users to ever write code that uses mkWeak# or
    finalizeWeak#, we have safe interfaces to these. Let's document the type
    unsafety and fix the problem with () without introducing any overhead.

Updates stm submodule.

3 years agoTestsuite: add test for #10767
Thomas Miedema [Thu, 24 Sep 2015 12:51:56 +0000 (14:51 +0200)] 
Testsuite: add test for #10767

3 years agoTestsuite: properly fix T8832.stdout-ws-32 (#8832)
Thomas Miedema [Thu, 24 Sep 2015 10:10:29 +0000 (12:10 +0200)] 
Testsuite: properly fix T8832.stdout-ws-32 (#8832)

3 years agoTestsuite: update expected output for T8832 on 32-bit systems (#8832)
Thomas Miedema [Thu, 24 Sep 2015 10:04:33 +0000 (12:04 +0200)] 
Testsuite: update expected output for T8832 on 32-bit systems (#8832)

3 years agoFix DeriveGeneric for types with same OccName (#10487)
Ömer Sinan Ağacan [Thu, 24 Sep 2015 07:51:19 +0000 (00:51 -0700)] 
Fix DeriveGeneric for types with same OccName (#10487)

DeriveGeneric generates some data types (for data type constructors and for
selectors of those constructors) and instances for those types. This patch
changes name generation for these new types to make it working with data types
with same names imported from different modules and with data types with same
names imported from same modules(using module imports).

Bonus content:

- Some refactoring in `TcGenGenerics.metaTyConsToDerivStuff` to remove some
  redundant partial function applications and to remove a duplicated function.
- Remove some unused names from `OccName`. (those were used for an old
  implementation of `DeriveGeneric`)

Reviewers: kosmikus, simonpj, dreixel, ezyang, bgamari, austin

Reviewed By: bgamari, austin

Subscribers: ezyang, thomie

Differential Revision:

GHC Trac Issues: #10487

3 years agoFix a bug with mallocForeignPtr and finalizers (#10904)
Simon Marlow [Wed, 23 Sep 2015 09:01:23 +0000 (10:01 +0100)] 
Fix a bug with mallocForeignPtr and finalizers (#10904)

Summary: See Note [MallocPtr finalizers]

Test Plan: validate; new test T10904

Reviewers: ezyang, bgamari, austin, hvr, rwbarton

Subscribers: thomie

Differential Revision:

3 years agoRevert "reify associated types when reifying typeclasses"
Austin Seipp [Wed, 23 Sep 2015 23:12:14 +0000 (18:12 -0500)] 
Revert "reify associated types when reifying typeclasses"

This caused the build to fail, due to some type checking errors. Whoops.

This reverts commit 5c115236fe795aa01f0c10106f1b1c959486a739.

3 years agoreify associated types when reifying typeclasses
Ömer Sinan Ağacan [Wed, 23 Sep 2015 18:19:58 +0000 (13:19 -0500)] 
reify associated types when reifying typeclasses

As reported in Trac #10891, Template Haskell's `reify` was not generating Decls
for associated types. This patch fixes that.

Note that even though `reifyTyCon` function used in this patch returns some
type instances, I'm ignoring that.

Here's an example of how associated types are encoded with this patch:

(Simplified representation)

    class C a where
      type F a :: *


    OpenTypeFamilyD "F" ["a"]

With default type instances:

    class C a where
      type F a :: *
      type F a = a


    OpenTypeFamilyD "F" ["a"]
    TySynInstD "F" (TySynEqn [VarT "a"] "a")

Reviewed By: goldfire

Differential Revision:

GHC Trac Issues: #10891

3 years agobase: export allocation counter/limit API from System.Mem
Simon Marlow [Wed, 23 Sep 2015 18:13:28 +0000 (13:13 -0500)] 
base: export allocation counter/limit API from System.Mem

Previously it was only available from GHC.Conc, but it makes sense for it to be
available from a more official place where people might find it.

While I was here, I improved the docs a little.

Reviewed By: austin

Differential Revision:

3 years agoUpdate Cabal to recognize DeriveLift
RyanGlScott [Wed, 23 Sep 2015 18:10:42 +0000 (13:10 -0500)] 
Update Cabal to recognize DeriveLift

This should (1) fix the ./validate build, which I accidentally broke in D1168,
and (2) update the Cabal submodule so that it recognizes `DeriveLift` as a GHC

Reviewed By: adamse, austin

Differential Revision:

GHC Trac Issues: #1830

3 years agoAdd constant-folding rule for Data.Bits.bit
Ben Gamari [Wed, 23 Sep 2015 18:10:13 +0000 (13:10 -0500)] 
Add constant-folding rule for Data.Bits.bit

This adds a constant-folding rule for `Integer`'s implementation of `bit` and
fixes the `T8832` testcase. Fixes #8832.

Reviewed By: simonpj, austin

Differential Revision:

GHC Trac Issues: #8832

3 years agoAnnotate CmmBranch with an optional likely target
Simon Marlow [Mon, 21 Sep 2015 08:14:33 +0000 (09:14 +0100)] 
Annotate CmmBranch with an optional likely target

This allows the code generator to give hints to later code generation
steps about which branch is most likely to be taken.  Right now it
is only taken into account in one place: a special case in
CmmContFlowOpt that swapped branches over to maximise the chance of
fallthrough, which is now disabled when there is a likelihood setting.

Test Plan: validate

Reviewers: austin, simonpj, bgamari, ezyang, tibbe

Subscribers: thomie

Differential Revision:

3 years agoDsBinds: Avoid using String when desugaring CallStack construction
Ben Gamari [Tue, 22 Sep 2015 22:56:03 +0000 (00:56 +0200)] 
DsBinds: Avoid using String when desugaring CallStack construction

Previously CallStacks would be built using String, which would pull in
GHC.Base while compiling GHC.Err. Use [Char] instead.

3 years agoRemove references to () from types of mkWeak# and friends
Ben Gamari [Fri, 18 Sep 2015 15:54:22 +0000 (17:54 +0200)] 
Remove references to () from types of mkWeak# and friends

Previously the types needlessly used (), which is defined ghc-prim,
leading to unfortunate import cycles. See #10867 for details.

Updates stm submodule.

3 years agotestsuite: attempt fixing fallout from 089b72f52
Austin Seipp [Wed, 23 Sep 2015 08:35:05 +0000 (03:35 -0500)] 
testsuite: attempt fixing fallout from 089b72f52

A few tests had the same name which is a big no-no, so I reorganized them a
little. The naming is somewhat haphazard, though...

Signed-off-by: Austin Seipp <>
3 years agoHscMain: Place CPP macro invocation on one line
Ben Gamari [Tue, 22 Sep 2015 12:14:32 +0000 (14:14 +0200)] 
HscMain: Place CPP macro invocation on one line

Clang's CPP implementation seems to barf otherwise

3 years agoDeriveLift extension (#1830)
RyanGlScott [Tue, 22 Sep 2015 02:50:55 +0000 (21:50 -0500)] 
DeriveLift extension (#1830)

This implements -XDeriveLift, which allows for automatic derivation
of the Lift class from template-haskell. The implementation is based
off of Ian Lynagh's th-lift library

Test Plan: ./validate

Reviewers: hvr, simonpj, bgamari, goldfire, austin

Reviewed By: goldfire, austin

Subscribers: osa1, thomie

Differential Revision:

GHC Trac Issues: #1830

3 years agoMake derived names deterministic
Bartosz Nitka [Tue, 22 Sep 2015 00:30:41 +0000 (19:30 -0500)] 
Make derived names deterministic

The names of auxiliary bindings end up in the interface file, and since uniques
are nondeterministic, we end up with nondeterministic interface files.

This uses the package and module name in the generated name, so I believe it
should avoid problems from #7947 and be deterministic as well.

The generated names look like this now:


and with `-ppr-debug`:


Reviewed By: simonmar, austin, ezyang

Differential Revision:

GHC Trac Issues: #4012

3 years agobase: use Show for ErrorCall in uncaughtExceptionHandler
Eric Seidel [Tue, 22 Sep 2015 00:18:56 +0000 (19:18 -0500)] 
base: use Show for ErrorCall in uncaughtExceptionHandler

The default top-level exception handler now uses the `Show` instance for
`ErrorCall` when printing exceptions, so it will actually print the out-of-band
data (e.g. `CallStack`s) in compiled binaries, instead of just printing the
error message.

This also updates the hpc submodule to fix the test output.

Reviewed By: austin, thomie

Differential Revision:

3 years agoRemove (now bogus) assert.
Edward Z. Yang [Mon, 21 Sep 2015 22:46:09 +0000 (15:46 -0700)] 
Remove (now bogus) assert.

Signed-off-by: Edward Z. Yang <>
3 years agoTcDeriv: Use a NameEnv instead of association list
Ben Gamari [Mon, 21 Sep 2015 21:52:23 +0000 (16:52 -0500)] 
TcDeriv: Use a NameEnv instead of association list

It's unlikely that these lists would have become very large but
nevertheless this is an easy and worthwhile change.

Reviewed By: austin

Differential Revision:

3 years agoRemove graphFromVerticesAndAdjacency
Bartosz Nitka [Mon, 21 Sep 2015 21:52:10 +0000 (16:52 -0500)] 
Remove graphFromVerticesAndAdjacency

It's not used anywhere.

Reviewed By: austin

Differential Revision:

3 years agoFix build failure, I think.
Edward Z. Yang [Mon, 21 Sep 2015 20:20:07 +0000 (13:20 -0700)] 
Fix build failure, I think.

Signed-off-by: Edward Z. Yang <>
3 years agoUnify hsig and hs-boot; add preliminary "hs-boot" merging.
Edward Z. Yang [Fri, 24 Jul 2015 22:13:49 +0000 (15:13 -0700)] 
Unify hsig and hs-boot; add preliminary "hs-boot" merging.

This patch drops the file level distinction between hs-boot and hsig;
we figure out which one we are compiling based on whether or not there
is a corresponding hs file lying around.

To make the "import A" syntax continue to work for bare hs-boot
files, we also introduce hs-boot merging, which takes an A.hi-boot
and converts it to an A.hi when there is no A.hs file in scope.
This will be generalized in Backpack to merge multiple A.hi files together;
which means we can jettison the "load multiple interface files" functionality.

This works automatically for --make, but for one-shot compilation
we need a new mode: ghc --merge-requirements A will generate an A.hi/A.o
from a local A.hi-boot file; Backpack will extend this mechanism further.

Has Haddock submodule update to deal with change in msHsFilePath behavior.

    - This commit drops support for the hsig extension. Can
      we support it?  It's annoying because the finder code is
      written with the assumption that where there's an hs-boot
      file, there's always an hs file too.  To support hsig, you'd
      have to probe two locations.  Easier to just not support it.

    - #10333 affects us, modifying an hs-boot still doesn't trigger

    - See compiler/main/Finder.hs: this diff is very skeevy, but
      it seems to work.

    - This code cunningly doesn't drop hs-boot files from the
      "drop hs-boot files" module graph, if they don't have a
      corresponding hs file.  I have no idea if this actually is useful.

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

Reviewers: simonpj, austin, bgamari, spinda

Subscribers: thomie

Differential Revision:

3 years agoRevert "Revert "Revert "Change loadSrcInterface to return a list of ModIface"""
Edward Z. Yang [Sat, 12 Sep 2015 00:15:52 +0000 (17:15 -0700)] 
Revert "Revert "Revert "Change loadSrcInterface to return a list of ModIface"""

This reverts commit 0c6c015d42c2bd0ee008f790c7c0cb4c5b78ca6b.

3 years agoRevert "Revert "Revert "Support for multiple signature files in scope."""
Edward Z. Yang [Sat, 12 Sep 2015 00:13:30 +0000 (17:13 -0700)] 
Revert "Revert "Revert "Support for multiple signature files in scope."""

This reverts commit 214596de224afa576a9c295bcf53c6941d6892e0.

3 years ago`_ <- mapM` --> `mapM_`
Richard Eisenberg [Mon, 21 Sep 2015 16:25:37 +0000 (12:25 -0400)] 
`_ <- mapM` --> `mapM_`

Thanks for the suggestion, Austin. Just missed that while making
a bunch of similar changes.

3 years agoRefactor BranchLists.
Richard Eisenberg [Sun, 20 Sep 2015 03:59:22 +0000 (23:59 -0400)] 
Refactor BranchLists.

Now we use Array to store branches. This makes sense because we often
have to do random access (once inference is done). This also vastly
simplifies the awkward BranchList type.

This fixes #10837 and updates submodule utils/haddock.

3 years agoRun simplifier only when the env is clean.
Richard Eisenberg [Sun, 20 Sep 2015 20:15:13 +0000 (16:15 -0400)] 
Run simplifier only when the env is clean.

This fixes #10896. In the indexed-types/should_fail/BadSock test,
there is a bad type definition. This gets type-checked, an error
gets reported, but then **GHC keeps going**. Later, when
running the simplifier to do an ambiguity check, the bad type
environment causes GHC to fall over. My solution: only run the
simplifier in a clean, error-free type environment.

A downside of this is that fewer error messages are reported.
This makes me a bit sad, but I'm not sure how to avoid the problem.
Suggestions welcome.

3 years agoPerform a validity check on assoc type defaults.
Richard Eisenberg [Sat, 19 Sep 2015 18:32:44 +0000 (14:32 -0400)] 
Perform a validity check on assoc type defaults.

This fixes #10817 and #10899. A knock-on effect is that we must
now remember locations of associated type defaults for error
messages during validity checking. This isn't too bad, but it
increases the size of the diff somewhat.

Test cases: indexed-types/should_fail/T108{17,99}

3 years agoSlightly better `Coercible` errors.
Richard Eisenberg [Sun, 20 Sep 2015 21:39:17 +0000 (17:39 -0400)] 
Slightly better `Coercible` errors.

This makes two real changes:
 - Equalities like (a ~R [a]) really *are* insoluble. Previously,
   GHC refused to give up when an occurs check bit on a representational
   equality. But for datatypes, it really should bail.

 - Now, GHC will sometimes report an occurs check error (in cases above)
   for representational equalities. Previously, it never did.

This "fixes" #10715, where by "fix", I mean clarifies the error message.
It's unclear how to do more to fix that ticket.

Test cases: typecheck/should_fail/T10715{,b}

3 years agoFix typo in test for #10347.
Richard Eisenberg [Mon, 21 Sep 2015 13:40:02 +0000 (09:40 -0400)] 
Fix typo in test for #10347.

Thanks to Gabor Greif for spotting the mistake.

3 years agoSmall improvement in pretty-printing constructors.
Richard Eisenberg [Sun, 20 Sep 2015 20:03:07 +0000 (16:03 -0400)] 
Small improvement in pretty-printing constructors.

This fixes #10810 by cleaning up pretty-printing of constructor
declarations. This change also removes a (in my opinion) deeply
bogus orphan instance OutputableBndr [Located name], making
HsDecls now a non-orphan module. Yay all around.

Test case: th/T10810

3 years agoRe-polish error messages around injective TFs.
Richard Eisenberg [Sun, 20 Sep 2015 19:28:55 +0000 (15:28 -0400)] 
Re-polish error messages around injective TFs.

The previous message was wrong, as pointed out by Jan Stolarek.

3 years agoClarify parsing infelicity.
Richard Eisenberg [Sat, 19 Sep 2015 20:44:29 +0000 (16:44 -0400)] 
Clarify parsing infelicity.

This fixes #10855.

3 years agoAllow TH quoting of assoc type defaults.
Richard Eisenberg [Sat, 19 Sep 2015 19:43:15 +0000 (15:43 -0400)] 
Allow TH quoting of assoc type defaults.

This fixes #10811.

3 years agoPrint associated types a bit better.
Richard Eisenberg [Sat, 19 Sep 2015 19:18:40 +0000 (15:18 -0400)] 
Print associated types a bit better.

This is part of #10811. It removes the "family" keyword from
associated type family declarations, and it adds the "type"
keyword to associated type family defaults.

3 years agoTest #10770
Richard Eisenberg [Sat, 19 Sep 2015 19:04:49 +0000 (15:04 -0400)] 
Test #10770

3 years agoUpdate user guide, fixing #10772
Richard Eisenberg [Sat, 19 Sep 2015 18:45:28 +0000 (14:45 -0400)] 
Update user guide, fixing #10772

3 years agoTest #10347
Richard Eisenberg [Sat, 19 Sep 2015 18:37:54 +0000 (14:37 -0400)] 
Test #10347

3 years agoDriver: --make -o without Main should be an error (#10895)
Thomas Miedema [Sat, 19 Sep 2015 14:14:47 +0000 (16:14 +0200)] 
Driver: --make -o without Main should be an error (#10895)

Reviewed by: austin

Differential Revision:

3 years agoPut stable pointer names in the name cache.
Edward Z. Yang [Sun, 20 Sep 2015 10:19:17 +0000 (12:19 +0200)] 
Put stable pointer names in the name cache.

Test Plan: validate

Reviewers: simonpj, austin, bgamari

Reviewed By: austin, bgamari

Subscribers: thomie

Differential Revision:

3 years agoReplace [PostTc id Type] with PostTc id [Type]
Matthew Pickering [Sun, 20 Sep 2015 10:18:21 +0000 (12:18 +0200)] 
Replace [PostTc id Type] with PostTc id [Type]

This gives a clearer indication as to what gets filled in
when. It was suggested by Richard on D1152.

Test Plan: ./validate

Reviewers: austin, goldfire, bgamari

Reviewed By: goldfire, bgamari

Subscribers: thomie

Differential Revision:

3 years agoAlways run explicitly requested ways (extra_ways) for fast runs.
Edward Z. Yang [Sun, 20 Sep 2015 10:16:50 +0000 (12:16 +0200)] 
Always run explicitly requested ways (extra_ways) for fast runs.

To keep validates fast, we only one run one way.  But I think that
it's important for some tests to run them a few ways, just to
make sure functionality, e.g. the profiler, is working.  This commit
changes the logic so that any way specified in extra_ways is always
run for fast.  The big changes is now profiling tests are run on

I also made it so the G1 garbage collector tests only run on slow.

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

Reviewers: austin, thomie, bgamari

Reviewed By: austin, thomie, bgamari

Subscribers: thomie

Differential Revision:

3 years agoPolish some error messages.
Richard Eisenberg [Sat, 19 Sep 2015 13:56:03 +0000 (09:56 -0400)] 
Polish some error messages.

3 years agoFix #10815 by kind-checking type patterns against known kinds.
Richard Eisenberg [Mon, 31 Aug 2015 17:46:01 +0000 (10:46 -0700)] 
Fix #10815 by kind-checking type patterns against known kinds.

tcFamTyPats now must take information about the instantiation of any
class variables, when checking the instance of an associated type.

Getting this to work out required some unexpected refactoring in
TcDeriv. TcDeriv needs to look at class instances because of the
possibility of associated datatypes with `deriving` specs. TcDeriv
worked over the user-specified instances. But any data family instances
were already processed, and TcDeriv had no way of finding the rep
tycons. Indeed, TcDeriv *re-type-checked* any data family instances
in an attempt to rediscover what GHC already knew. So, this commit
introduces better tracking of compiled data families between TcInstDcls
and TcDeriv to streamline all of this.

3 years agoPass TEST_HC_OPTS in bug1465 and T5792.
Edward Z. Yang [Fri, 18 Sep 2015 02:52:01 +0000 (19:52 -0700)] 
Pass TEST_HC_OPTS in bug1465 and T5792.

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

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision:

3 years agoDocs: make sure all libs are included in index.html (#10879)
Thomas Miedema [Tue, 15 Sep 2015 19:37:38 +0000 (21:37 +0200)] 
Docs: make sure all libs are included in index.html (#10879)

During the build, when HADDOCK_DOCS=YES, the command 'cd libraries && sh
gen_contents_index --intree' is run, which calls haddock to generate the
haddock index at 'libraries/dist-haddock/index.html'.

What it did before was check the ./packages file for all libraries. The
problem is that 'base' and 'ghc-prim' were folded into the main repo
some time ago, hence don't have an entry in the ./packages file anymore.
As a result, 'base' and 'ghc-prim' were missing from the index.html

It now simply runs haddock on all the all the `.haddock` files in the
libraries directory.

The only risk is that this could include the extra libraries in the
index.html, if you ever built them in the past (with
BUILD_EXTRA_PKGS=YES), even though now you want to exclude them (with
BUILD_EXTRA_PKGS=NO). gen_contents_index doesn't have access to build
system variables though (PACKAGES_STAGE1+PACKAGES_STAGE2), so fixing
this would be a little bit fiddly.

Test Plan:
'make libraries/dist-haddock/index.html && grep -q base
libraries/dist-haddock/index.html && echo ok'

Reviewed by: austin

Differential Revision:

3 years agoAdd namePackage function to template-haskell
RyanGlScott [Thu, 17 Sep 2015 21:15:26 +0000 (23:15 +0200)] 
Add namePackage function to template-haskell

Currently there exists a nameBase function (for retrieving a Name's OccName)
and a nameModule function (for retrieving a Name's ModName), but there is no
counterpart for PkgNames.

This would be useful for implementing Template Haskell features which need
to have easy access to a Name's package (e.g., automatically derived Lift

Reviewed By: goldfire, austin, thomie

Differential Revision:

3 years agoApplicativeDo transformation
Simon Marlow [Fri, 13 Mar 2015 16:39:58 +0000 (16:39 +0000)] 
ApplicativeDo transformation

This is an implementation of the ApplicativeDo proposal.  See the Note
[ApplicativeDo] in RnExpr for details on the current implementation,
and the wiki page
for design notes.

Test Plan: validate

Reviewers: simonpj, goldfire, austin

Subscribers: thomie

Differential Revision:

3 years agoShow minimal complete definitions in ghci (#10847)
Moritz Kiefer [Thu, 17 Sep 2015 14:02:06 +0000 (16:02 +0200)] 
Show minimal complete definitions in ghci (#10847)

Show the minimal complete definition on :info in ghci. They
are shown like MINIMAL pragmas in code. If the minimal complete
definition is empty or only a specific method from a class is
requested, nothing is shown.

Reviewed By: simonpj, austin, thomie

Differential Revision:

3 years agoTestsuite: add test for #10781
Thomas Miedema [Thu, 17 Sep 2015 01:25:11 +0000 (03:25 +0200)] 
Testsuite: add test for #10781

3 years agoDynFlags: remove unused sPgm_sysman (#8689)
Thomas Miedema [Wed, 16 Sep 2015 09:01:37 +0000 (11:01 +0200)] 
DynFlags: remove unused sPgm_sysman (#8689)

Something about a long deleted 'system manager' for the 'parallel

Also remove confusing comment in SysTools, that supposedly referred to
sPgm_sysman. See commit 16d5d1c75c999677783c9c1bda519540fa9a6e58.

3 years agoFix `hp2ps -i-`
Thomas Miedema [Tue, 15 Sep 2015 21:20:10 +0000 (23:20 +0200)] 
Fix `hp2ps -i-`

From the help text:
  -i[+|-] sort by identifier string (-i+ gives greatest on top)

Found by David Binderman.

3 years agoPretty: fix unicode arrow operators.
Sebastian Reuße [Tue, 15 Sep 2015 12:20:01 +0000 (14:20 +0200)] 
Pretty: fix unicode arrow operators.

As per issue #10509, the documentation gave the wrong glyphs for Unicode
alternatives to the -< and >- arrow operators (the codepoints were
correct, but the glyphs were not). The incorrect glyphs have also
made it into the error output. This replaces those characters with the
correct versions.

GHC Trac Issues: #10883

3 years agoAccount for stack allocation in the thread's allocation counter
Simon Marlow [Mon, 14 Sep 2015 12:37:38 +0000 (13:37 +0100)] 
Account for stack allocation in the thread's allocation counter

Summary: (see comment for details)

Test Plan: validate

Reviewers: bgamari, ezyang, austin

Subscribers: thomie

Differential Revision:

3 years agoTestsuite: mark T6037 expect_fail on Windows (#6037)
Thomas Miedema [Sat, 12 Sep 2015 21:34:12 +0000 (23:34 +0200)] 
Testsuite: mark T6037 expect_fail on Windows (#6037)

3 years agohpc: use `takeDirectory` instead of `dropWhileEnd (/= '/')`
Thomas Miedema [Sat, 12 Sep 2015 20:41:35 +0000 (22:41 +0200)] 
hpc: use `takeDirectory` instead of `dropWhileEnd (/= '/')`

This fixes some hpc tests on Windows. Update submodule hpc.

3 years agoCodeGen: fix typo in error message
Thomas Miedema [Sat, 12 Sep 2015 18:37:20 +0000 (20:37 +0200)] 
CodeGen: fix typo in error message

3 years agoTestsuite: mark enum01-enum03 expect_broken(#9399) on Windows
Thomas Miedema [Sat, 12 Sep 2015 17:34:16 +0000 (19:34 +0200)] 
Testsuite: mark enum01-enum03 expect_broken(#9399) on Windows

3 years agoTestsuite: normalise slashes in callstack output
Thomas Miedema [Sat, 12 Sep 2015 13:23:12 +0000 (15:23 +0200)] 
Testsuite: normalise slashes in callstack output

This fixes some tests on Windows, for example T2120.

3 years agos/StgArrWords/StgArrBytes/
Siddhanathan Shanmugam [Fri, 11 Sep 2015 21:10:41 +0000 (16:10 -0500)] 

Rename StgArrWords to StgArrBytes (see Trac #8552)

Reviewed By: austin

Differential Revision:

GHC Trac Issues: #8552

3 years agoCode movement
Jan Stolarek [Fri, 11 Sep 2015 22:07:17 +0000 (00:07 +0200)] 
Code movement

3 years agoDead code removal, export cleanup
Jan Stolarek [Fri, 11 Sep 2015 21:55:52 +0000 (23:55 +0200)] 
Dead code removal, export cleanup

3 years agoRemove redundant language extensions
Jan Stolarek [Fri, 11 Sep 2015 21:44:42 +0000 (23:44 +0200)] 
Remove redundant language extensions

3 years agoAdd assertions
Jan Stolarek [Fri, 11 Sep 2015 20:29:02 +0000 (22:29 +0200)] 
Add assertions

3 years agoTestsuite cleanup
Jan Stolarek [Fri, 11 Sep 2015 20:02:35 +0000 (22:02 +0200)] 
Testsuite cleanup

As a result of fixing #10836 it is now possible to merge 11 different
tests for #6018 into one