4 years agoMerge some instances from th-orphans.
Richard Eisenberg [Tue, 16 Dec 2014 22:17:06 +0000 (17:17 -0500)] 
Merge some instances from th-orphans.

4 years agoConsider equality contexts exotic, uninferrable by "deriving"
Richard Eisenberg [Tue, 16 Dec 2014 22:15:49 +0000 (17:15 -0500)] 
Consider equality contexts exotic, uninferrable by "deriving"

See comments in #8984. This takes back the fix for #6088.

4 years agoAdd Data.Version.makeVersion & `IsList Version`
Herbert Valerio Riedel [Fri, 19 Dec 2014 10:08:09 +0000 (11:08 +0100)] 
Add Data.Version.makeVersion & `IsList Version`

These two facilities provide some means to avoid the double-breakage caused by
first by the deprecation (see #2496), and then again by the actual future

See also

for details about this library addition.

Reviewed By: ekmett

Differential Revision:

4 years agoRelocate bash completion scripts to utils/
Jan Stolarek [Fri, 19 Dec 2014 10:10:50 +0000 (11:10 +0100)] 
Relocate bash completion scripts to utils/

4 years agoUpdate process and unix submodules
Herbert Valerio Riedel [Fri, 19 Dec 2014 09:57:03 +0000 (10:57 +0100)] 
Update process and unix submodules

This updates the submodules to the respective final releases,

 - `unix-`, and
 - `process-`

4 years agoSome Dwarf generation fixes
Peter Wortmann [Thu, 18 Dec 2014 20:11:23 +0000 (21:11 +0100)] 
Some Dwarf generation fixes

- Make abbrev offset absolute on Non-Mac systems
- Add another termination byte at the end of the abbrev section
  (readelf complains)
- Scope combination was wrong for the simpler cases
- Shouldn't have a "global/" in front of all scopes

4 years agoUpdate Cabal submodule to 1.22 version
Herbert Valerio Riedel [Thu, 18 Dec 2014 22:15:03 +0000 (23:15 +0100)] 
Update Cabal submodule to 1.22 version

4 years agoUpdate `bytestring` submodule
Herbert Valerio Riedel [Thu, 18 Dec 2014 20:49:17 +0000 (21:49 +0100)] 
Update `bytestring` submodule

this just pulls in the version bump to 0.10.6

4 years agoFix wrong-kind-of-family error message (Trac #9896)
Simon Peyton Jones [Thu, 18 Dec 2014 11:19:14 +0000 (11:19 +0000)] 
Fix wrong-kind-of-family error message (Trac #9896)

4 years agoAmend TcPluginM interface
Adam Gundry [Thu, 18 Dec 2014 08:04:20 +0000 (08:04 +0000)] 
Amend TcPluginM interface

Expose some new functions in TcPluginM and remove one, in the light of
experience writing plugins.  In particular, I've removed lookupRdrName
because using it to import modules containing instances leads to subtle
bugs; I've expanded on the lookupRdrNameInModuleForPlugins comments.

Test Plan: validate

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: goldfire, ezyang, carter, thomie, yav, gridaphobe

Differential Revision:


4 years agoUpdate Haddock submodule
Mateusz Kowalczyk [Thu, 18 Dec 2014 07:32:07 +0000 (07:32 +0000)] 
Update Haddock submodule

4 years agoAdd a provenance field to universal coercions.
Iavor S. Diatchki [Thu, 18 Dec 2014 02:46:36 +0000 (18:46 -0800)] 
Add a provenance field to universal coercions.

Universal coercions allow casting between arbitrary types, so it is a
good idea to keep track where they came from, which now we can do by
using the provenance field in `UnivCo`.

This is also handy for type-checker plugins that provide functionality
beyond what's expressible by GHC's standard coercions:  such plugins
can generate universal coercions, but they should still tag them,
so that if something goes wrong we can link the casts to the plugin.

4 years agoMinor typo in comment
Gabor Greif [Wed, 17 Dec 2014 16:04:24 +0000 (17:04 +0100)] 
Minor typo in comment

4 years agoTypo in note
Gabor Greif [Wed, 17 Dec 2014 15:26:39 +0000 (16:26 +0100)] 
Typo in note

4 years agoTypos in comments
Gabor Greif [Wed, 17 Dec 2014 15:13:26 +0000 (16:13 +0100)] 
Typos in comments

4 years agoPerformance enhancements in TcFlatten.
Richard Eisenberg [Tue, 16 Dec 2014 21:35:43 +0000 (16:35 -0500)] 
Performance enhancements in TcFlatten.

This commit fixes some performance regressions introduced by 0cc47eb,
adding more `Coercible` magic to the solver. See Note
[flatten_many performance] in TcFlatten for more info.

The improvements do not quite restore the old numbers. Given that
the solver is really more involved now, I am accepting this regression.

The way forward (I believe) would be to have *two* flatteners: one
that deals only with nominal equalities and thus never checks roles,
and the more general one. A nice design of keeping this performant
without duplicating code eludes me, but someone else is welcome
to take a stab.

4 years agoWibble error message
Simon Peyton Jones [Wed, 17 Dec 2014 14:30:28 +0000 (14:30 +0000)] 
Wibble error message

4 years agoFix egregious bug in the new canonicalisation code for AppTy
Simon Peyton Jones [Wed, 17 Dec 2014 14:20:51 +0000 (14:20 +0000)] 
Fix egregious bug in the new canonicalisation code for AppTy

Fixes Trac #9892.

Must form part of 7.10.1

4 years agoComment in test
Simon Peyton Jones [Tue, 16 Dec 2014 17:53:15 +0000 (17:53 +0000)] 
Comment in test

4 years agoImprove TidyPgm.hasCafRefs to account for Integer literals (Trac #8525)
Simon Peyton Jones [Tue, 16 Dec 2014 17:53:00 +0000 (17:53 +0000)] 
Improve TidyPgm.hasCafRefs to account for Integer literals (Trac #8525)

See Note [Disgusting computation of CafRefs] in TidyPgm.

Also affects CoreUtils.rhsIsStatic.

The real solution here is to compute CAF and arity information
from the STG-program, and feed it back to tidied program for
the interface file and later GHCi clients.  A battle for another

But at least this commit reduces the number of gratuitous CAFs, and
hence SRT entries.  And kills off a batch of ASSERT failures.

4 years agoFix GHCi/GHC-API tidying and modules (Trac #9424, #9426)
Simon Peyton Jones [Tue, 16 Dec 2014 17:46:06 +0000 (17:46 +0000)] 
Fix GHCi/GHC-API tidying and modules (Trac #9424, #9426)

There were two related bugs here

Trac #9426
   We must increment the ic_mod_index field of the InteractiveContext
   if we have new instances, because we maek DFunIds that should be
   distinct from previous ones.  Previously we were only incrementing
   when defining new user-visible Ids.

   The main change is in HscTypes.extendInteractiveContext, which now
   alwyas bumps the ic_mod_index.  I also added a specialised
   extendInteractiveContextWithIds for the case where we are *only*
   adding new user-visible Ids.

Trac #9424
   In HscMain.hscDeclsWithLocations we were failing to use the
   *tidied* ClsInsts; but the un-tidied ones are LocalIds which
   causes a later ASSERT error.

   On the way I realised that, to behave consistently, the tcg_insts
   and tcg_fam_insts field of TcGblEnv should really only contain
   instances from the current GHCi command, not all the ones to date.
   That in turn meant I had to move the code for deleting replacement
   instances from addLocalInst, addLocalFamInst to

4 years agoUse the new LintFlags to suppress Lint warnings for INLINE loop breakers
Simon Peyton Jones [Tue, 16 Dec 2014 17:36:01 +0000 (17:36 +0000)] 
Use the new LintFlags to suppress Lint warnings for INLINE loop breakers

See Note [Checking for INLINE loop breakers]

4 years agoImprove an ASSERT
Simon Peyton Jones [Tue, 16 Dec 2014 17:34:49 +0000 (17:34 +0000)] 
Improve an ASSERT

4 years agoFix the scope-nesting for arrows
Simon Peyton Jones [Tue, 16 Dec 2014 17:34:26 +0000 (17:34 +0000)] 
Fix the scope-nesting for arrows

Previously we were capturing the *entire environment* when moving under
a 'proc', for the newArrowScope/escapeArrowScope thing.  But that a blunderbuss,
and in any case isn't right (the untouchable-type-varaible invariant gets

So I fixed it to be much more refined: just the LocalRdrEnv and constraints are

I think this is right; but if not we should just add more fields to ArrowCtxt,
not return to the blunderbuss.

This patch fixes the ASSERT failure in Trac #5267

4 years agoRole problems pervent GND from happening
Gabor Greif [Wed, 17 Dec 2014 11:49:51 +0000 (12:49 +0100)] 
Role problems pervent GND from happening

with GHC HEAD. Reworked using deriving instance.

4 years agoTypos in comments
Gabor Greif [Wed, 17 Dec 2014 11:36:07 +0000 (12:36 +0100)] 
Typos in comments

4 years agoUpdate deepseq submodule to release
Herbert Valerio Riedel [Wed, 17 Dec 2014 11:38:51 +0000 (12:38 +0100)] 
Update deepseq submodule to release

4 years agoUpdate stm submodule to 2.4.4 release
Herbert Valerio Riedel [Wed, 17 Dec 2014 11:04:58 +0000 (12:04 +0100)] 
Update stm submodule to 2.4.4 release

4 years agoUpdate Haddock submodule
Herbert Valerio Riedel [Wed, 17 Dec 2014 10:04:55 +0000 (11:04 +0100)] 
Update Haddock submodule

This pulls in the fix for the broken `@since`-rendering

4 years agoGenerate DWARF unwind information
Peter Wortmann [Wed, 10 Dec 2014 11:00:49 +0000 (12:00 +0100)] 
Generate DWARF unwind information

This tells debuggers such as GDB how to "unwind" a program state,
which allows them to walk the stack up.


* The code is quite general, perhaps unnecessarily so. Unless we get
  more unwind information, only the first case of pprSetUnwind will
  get used - and pprUnwindExpr and pprUndefUnwind will never be
  called. It just so happens that this is a point where we can get a
  lot of features cheaply, even if we don't use them.

* When determining what location to show for a return address, most
  debuggers check the map for "rip-1", assuming that's where the
  "call" instruction is. For tables-next-to-code, that happens to
  always be the end of an info table. We therefore cheat a bit here by
  shifting .debug_frame information so it covers the end of the info
  table, as well as generating a .loc directive for the info table

  Debuggers will still show the wrong label for the return address,
  though.  Haven't found a way around that one yet.

(From Phabricator D396)

4 years agoGenerate DWARF info section
Peter Wortmann [Tue, 9 Dec 2014 19:59:07 +0000 (20:59 +0100)] 
Generate DWARF info section

This is where we actually make GHC emit DWARF code. The info section
contains all the general meta information bits as well as an entry for
every block of native code.


* We need quite a few new labels in order to properly address starts
  and ends of blocks.

* Thanks to Nathan Howell for taking the iniative to get our own Haskell
  language ID for DWARF!

(From Phabricator D396)

4 years agoGenerate .loc/.file directives from source ticks
Peter Wortmann [Mon, 8 Dec 2014 15:54:16 +0000 (16:54 +0100)] 
Generate .loc/.file directives from source ticks

This generates DWARF, albeit indirectly using the assembler. This is
the easiest (and, apparently, quite standard) method of generating the
.debug_line DWARF section.


* Note we have to make sure that .file directives appear correctly
  before the respective .loc. Right now we ppr them manually, which makes
  them absent from dumps. Fixing this would require .file to become a
  native instruction.

* We have to pass a lot of things around the native code generator. I
  know Ian did quite a bit of refactoring already, but having one common
  monad could *really* simplify things here...

* To support SplitObjcs, we need to emit/reset all DWARF data at every
  split. We use the occassion to move split marker generation to
  cmmNativeGenStream as well, so debug data extraction doesn't have to
  choke on it.

(From Phabricator D396)

4 years agoParser: use 'error' token in error reporting rules
Sergei Trofimovich [Tue, 16 Dec 2014 22:16:42 +0000 (22:16 +0000)] 
Parser: use 'error' token in error reporting rules

It exempts us from 11 reduce/reduce conflicts and
12 shift/reduce conflicts.

Signed-off-by: Sergei Trofimovich <>
Reviewers: simonpj, mikeizbicki, austin, simonmar

Reviewed By: simonmar

Subscribers: carter, thomie

Differential Revision:

4 years agoupdate containers submodules to release
Herbert Valerio Riedel [Mon, 15 Dec 2014 22:38:13 +0000 (23:38 +0100)] 
update containers submodules to release

4 years agoDebug test case and test suite way
Peter Wortmann [Sun, 7 Dec 2014 00:04:05 +0000 (01:04 +0100)] 
Debug test case and test suite way

Adds a test way for debug (-g -dannot-lint) as well as a test covering
basic source tick functionality.

The debug way fails for a number of test cases because of annotation
linting: Tracing simplification (e.g. rule firings) will see
duplicated output, and sometimes expression matching might take so
long that the test case timeouts. We blacklist these tests.

(From Phabricator D169)

4 years agoDebug data extraction (NCG support)
Peter Wortmann [Fri, 28 Nov 2014 23:07:48 +0000 (00:07 +0100)] 
Debug data extraction (NCG support)

The purpose of the Debug module is to collect all required information
to generate debug information (DWARF etc.) in the back-ends. Our main
data structure is the "debug block", which carries all information we have
about a block of code that is going to get produced.


* Debug blocks are arranged into a tree according to tick scopes. This
  makes it easier to reason about inheritance rules. Note however that
  tick scopes are not guaranteed to form a tree, which requires us to
  "copy" ticks to not lose them.

* This is also where we decide what source location we regard as
  representing a code block the "best". The heuristic is basically that
  we want the most specific source reference that comes from the same file
  we are currently compiling. This seems to be the most useful choice in
  my experience.

* We are careful to not be too lazy so we don't end up breaking streaming.
  Debug data will be kept alive until the end of codegen, after all.

* We change native assembler dumps to happen right away for every Cmm group.
  This simplifies the code somewhat and is consistent with how pretty much
  all of GHC handles dumps with respect to streamed code.

(From Phabricator D169)

4 years agoAdd unwind information to Cmm
Peter Wortmann [Mon, 13 Oct 2014 23:14:14 +0000 (01:14 +0200)] 
Add unwind information to Cmm

Unwind information allows the debugger to discover more information
about a program state, by allowing it to "reconstruct" other states of
the program. In practice, this means that we explain to the debugger
how to unravel stack frames, which comes down mostly to explaining how
to find their Sp and Ip register values.

* We declare yet another new constructor for CmmNode - and this time
  there's actually little choice, as unwind information can and will
  change mid-block. We don't actually make use of these capabilities,
  and back-end support would be tricky (generate new labels?), but it
  feels like the right way to do it.

* Even though we only use it for Sp so far, we allow CmmUnwind to specify
  unwind information for any register. This is pretty cheap and could
  come in useful in future.

* We allow full CmmExpr expressions for specifying unwind values. The
  advantage here is that we don't have to make up new syntax, and can e.g.
  use the WDS macro directly. On the other hand, the back-end will now
  have to simplify the expression until it can sensibly be converted
  into DWARF byte code - a process which might fail, yielding NCG panics.
  On the other hand, when you're writing Cmm by hand you really ought to
  know what you're doing.

(From Phabricator D169)

4 years agoTick scopes
Peter Wortmann [Sat, 6 Dec 2014 16:11:42 +0000 (17:11 +0100)] 
Tick scopes

This patch solves the scoping problem of CmmTick nodes: If we just put
CmmTicks into blocks we have no idea what exactly they are meant to
cover.  Here we introduce tick scopes, which allow us to create
sub-scopes and merged scopes easily.


* Given that the code often passes Cmm around "head-less", we have to
  make sure that its intended scope does not get lost. To keep the amount
  of passing-around to a minimum we define a CmmAGraphScoped type synonym
  here that just bundles the scope with a portion of Cmm to be assembled

* We introduce new scopes at somewhat random places, aligning with
  getCode calls. This works surprisingly well, but we might have to
  add new scopes into the mix later on if we find things too be too

(From Phabricator D169)

4 years agoSource notes (Cmm support)
Peter Wortmann [Tue, 14 Oct 2014 21:11:43 +0000 (23:11 +0200)] 
Source notes (Cmm support)

This patch adds CmmTick nodes to Cmm code. This is relatively
straight-forward, but also not very useful, as many blocks will simply
end up with no annotations whatosever.


* We use this design over, say, putting ticks into the entry node of all
  blocks, as it seems to work better alongside existing optimisations.
  Now granted, the reason for this is that currently GHC's main Cmm
  optimisations seem to mainly reorganize and merge code, so this might
  change in the future.

* We have the Cmm parser generate a few source notes as well. This is
  relatively easy to do - worst part is that it complicates the CmmParse
  implementation a bit.

(From Phabricator D169)

4 years agoStrip source ticks from iface code if DWARF is disabled
Peter Wortmann [Tue, 22 Oct 2013 15:05:16 +0000 (16:05 +0100)] 
Strip source ticks from iface code if DWARF is disabled

They would be unneeded at minimum. Not completely sure this is the right
place to do this.

(From Phabricator D169)

4 years agoSource notes (CorePrep and Stg support)
Peter Wortmann [Tue, 14 Jan 2014 18:25:16 +0000 (18:25 +0000)] 
Source notes (CorePrep and Stg support)

This is basically just about continuing maintaining source notes after
the Core stage. Unfortunately, this is more involved as it might seem,
as there are more restrictions on where ticks are allowed to show up.


* We replace the StgTick / StgSCC constructors with a unified StgTick
  that can carry any tickish.

* For handling constructor or lambda applications, we generally float
  ticks out.

* Note that thanks to the NonLam placement, we know that source notes
  can never appear on lambdas. This means that as long as we are
  careful to always use mkTick, we will never violate CorePrep

* This is however not automatically true for eta expansion, which
  needs to somewhat awkwardly strip, then re-tick the expression in

* Where CorePrep floats out lets, we make sure to wrap them in the
  same spirit as FloatOut.

* Detecting selector thunks becomes a bit more involved, as we can run
  into ticks at multiple points.

(From Phabricator D169)

4 years agoAnnotation linting
Peter Wortmann [Mon, 13 Oct 2014 22:09:59 +0000 (00:09 +0200)] 
Annotation linting

This adds a way by which we can make sure that the Core passes treat
annotations right: We run them twice and compare the results.

The main problem here is that Core equivalence is awkward: We do not
want the comparison to care about the order of, say, top-level or
recursive bindings. This is important even if GHC generally generates
the bindings in the right order - after all, if something goes wrong
we don't want linting to dump out the whole program as the offense.

So instead we do some heuristic matching - first greedily match
everything that's easy, then match the rest by label order. This
should work as long as GHC generates the labels in roughly the same
order for both pass runs.  In practice it seems to work alright.

We also check that IdInfos match, as this might cause hard-to-spot
bugs down the line (I had at least one bug because unfolding guidance
didn't match!). We especially check unfoldings up until the point
where it might get us into an infinite loop.

(From Phabricator D169)

4 years agoGeneralized Coverage pass to allow adding multiple types of Tickishs
Peter Wortmann [Thu, 9 Jan 2014 19:12:30 +0000 (19:12 +0000)] 
Generalized Coverage pass to allow adding multiple types of Tickishs

This allows having, say, HPC ticks, automatic cost centres and source
notes active at the same time. We especially take care to un-tangle the
infrastructure involved in generating them.

(From Phabricator D169)

4 years agoSource notes (Core support)
Peter Wortmann [Mon, 1 Dec 2014 19:21:47 +0000 (20:21 +0100)] 
Source notes (Core support)

This patch introduces "SourceNote" tickishs that link Core to the
source code that generated it. The idea is to retain these source code
links throughout code transformations so we can eventually relate
object code all the way back to the original source (which we can,
say, encode as DWARF information to allow debugging).  We generate
these SourceNotes like other tickshs in the desugaring phase. The
activating command line flag is "-g", consistent with the flag other
compilers use to decide DWARF generation.

Keeping ticks from getting into the way of Core transformations is
tricky, but doable. The changes in this patch produce identical Core
in all cases I tested -- which at this point is GHC, all libraries and
nofib. Also note that this pass creates *lots* of tick nodes, which we
reduce somewhat by removing duplicated and overlapping source
ticks. This will still cause significant Tick "clumps" - a possible
future optimization could be to make Tick carry a list of Tickishs
instead of one at a time.

(From Phabricator D169)

4 years agoMake annotations-literals test case cleaning less aggressive
Joachim Breitner [Tue, 16 Dec 2014 13:41:16 +0000 (14:41 +0100)] 
Make annotations-literals test case cleaning less aggressive

cf. a4ec0c92 and 289e52f8

4 years agoConvert `/Since: .../` to new `@since ...` syntax
Herbert Valerio Riedel [Tue, 16 Dec 2014 11:07:10 +0000 (12:07 +0100)] 
Convert `/Since: .../` to new `@since ...` syntax

Starting with Haddock 2.16 there's a new built-in support for since-annotations

Note: This exposes a bug in the `@since` implementation (see e.g. `Data.Bits`)

4 years agoFix broken Haddock markup in `Monad` documentation
Herbert Valerio Riedel [Tue, 16 Dec 2014 12:27:18 +0000 (13:27 +0100)] 
Fix broken Haddock markup in `Monad` documentation

4 years agoUse llvm-3.5 on Travis
Joachim Breitner [Tue, 16 Dec 2014 09:54:36 +0000 (10:54 +0100)] 
Use llvm-3.5 on Travis

to avoid a build failure with T5681(optllvm). According to Ben Gamari,
llvm-3.4 is known to be not working with GHC HEAD.

4 years ago*Really* Re-Update Haddock submodule
Herbert Valerio Riedel [Tue, 16 Dec 2014 07:56:37 +0000 (08:56 +0100)] 
*Really* Re-Update Haddock submodule

The actual gitlink update got lost in 0c9c2d899e63b810e7ab6b486f7244826b4a2e33

4 years agoTypo in feature description
Gabor Greif [Tue, 16 Dec 2014 09:08:19 +0000 (10:08 +0100)] 
Typo in feature description

4 years agoUpdate process submodule to latest RC
Herbert Valerio Riedel [Tue, 16 Dec 2014 07:05:06 +0000 (08:05 +0100)] 
Update process submodule to latest RC

4 years agoUpdate unix submodule to latest snapshot
Herbert Valerio Riedel [Mon, 15 Dec 2014 22:36:06 +0000 (23:36 +0100)] 
Update unix submodule to latest snapshot

4 years agoUpdate haskeline/terminfo submodules to master
Herbert Valerio Riedel [Mon, 15 Dec 2014 13:42:32 +0000 (14:42 +0100)] 
Update haskeline/terminfo submodules to master

4 years agocomments
Simon Marlow [Fri, 13 Dec 2013 20:06:40 +0000 (20:06 +0000)] 

4 years agocomment about why this program exists
Simon Marlow [Fri, 13 Dec 2013 10:32:29 +0000 (10:32 +0000)] 
comment about why this program exists

4 years agoFix comments (#8254)
Simon Marlow [Tue, 1 Oct 2013 10:25:11 +0000 (11:25 +0100)] 
Fix comments (#8254)

4 years agostm: Update submodule (again) to fix build breakage
Austin Seipp [Mon, 15 Dec 2014 17:52:34 +0000 (11:52 -0600)] 
stm: Update submodule (again) to fix build breakage

Signed-off-by: Austin Seipp <>
4 years agoWibbles to documentation for promoted lists and tuples (Trac #9882)
Simon Peyton Jones [Mon, 15 Dec 2014 17:40:45 +0000 (17:40 +0000)] 
Wibbles to documentation for promoted lists and tuples (Trac #9882)

4 years agoImprove documentation of syntax for promoted lists
Simon Peyton Jones [Mon, 15 Dec 2014 17:08:29 +0000 (17:08 +0000)] 
Improve documentation of syntax for promoted lists

THe documentation in 7.9.4 of promoted list and tuple types was
misleading, which led to Trac #9882.  This patch makes explicit
that only type-level with two or more elements can have the
quote omitted.

4 years agoFix dll-split problem with patch 'Make Core Lint check for locally-bound GlobalId'
Simon Peyton Jones [Mon, 15 Dec 2014 17:03:47 +0000 (17:03 +0000)] 
Fix dll-split problem with patch 'Make Core Lint check for locally-bound GlobalId'

The trouble was that my changes made a lot more files transitively link with
DynFlags, which is the root module for the revolting Windows dll-split stuff.

Anyway this patch fixes it, in a good way:

 - Make GHC/Hooks *not* import DsMonad, because DsMonad imports too
   much other stuff (notably tcLookup variants).  Really, Hooks depends
   only on *types* not *code*.

 - To do this I need the DsM type, and the types it depends on,
   not to be part of DsMonad.  So I moved it to TcRnTypes, which is
   where the similar pieces for the TcM and IfM monads live.

 - We can then delete DsMonad.hs-boot

 - There are a bunch of knock-on change, of no great significance

4 years agoFix panic on [t| _ |] (Trac #9879)
Thomas Winant [Mon, 15 Dec 2014 15:47:07 +0000 (09:47 -0600)] 
Fix panic on [t| _ |] (Trac #9879)

Type brackets containing a wildcard, e.g. `[t| _ |]`, caused a panic.
Fix it by disallowing wildcards in type brackets.

Together with D572, this fixes #9879.

Test Plan: new test WildcardInTypeBrackets should pass

Reviewers: austin

Reviewed By: austin

Subscribers: carter, thomie, monoidal

Differential Revision:

GHC Trac Issues: #9879

4 years agoWrite release notes for -XStaticPointers.
Facundo Domínguez [Mon, 15 Dec 2014 15:44:27 +0000 (09:44 -0600)] 
Write release notes for -XStaticPointers.

Test Plan: ./validate

Reviewers: goldfire, austin

Reviewed By: austin

Subscribers: mboes, carter, thomie

Differential Revision:

GHC Trac Issues: #7015

4 years agoChanging prefetch primops to have a `seq`-like interface
Carter Tazio Schonwald [Mon, 15 Dec 2014 15:42:36 +0000 (09:42 -0600)] 
Changing prefetch primops to have a `seq`-like interface

The current primops for prefetching do not properly work in pure code;
namely, the primops are not 'hoisted' into the correct call sites based
on when arguments are evaluated. Instead, they should use a `seq`-like
interface, which will cause it to be evaluated when the needed term is.

See #9353 for the full discussion.

Test Plan: updated tests for pure prefetch in T8256 to reflect the design changes in #9353

Reviewers: simonmar, hvr, ekmett, austin

Reviewed By: ekmett, austin

Subscribers: merijn, thomie, carter, simonmar

Differential Revision:

GHC Trac Issues: #9353

4 years agostm: update submodule for #9169 addition
Austin Seipp [Mon, 15 Dec 2014 15:34:05 +0000 (09:34 -0600)] 
stm: update submodule for #9169 addition

Signed-off-by: Austin Seipp <>
4 years agoMake Core Lint check for locally-bound GlobalIds
Simon Peyton Jones [Sat, 13 Dec 2014 22:53:54 +0000 (22:53 +0000)] 
Make Core Lint check for locally-bound GlobalIds

There should be no bindings in this module for a GlobalId;
except after CoreTidy, when top-level bindings are globalised.

To check for this, I had to make the CoreToDo pass part of the
environment that Core Lint caries.  But CoreToDo is defined in
CoreMonad, which (before this patch) called CoreLint.

So I had to do quite a bit of refactoring, moving some
lint-invoking code into CoreLint itself.  Crucially, I also
more tcLookupImported_maybe, importDecl, and checkwiredInTyCon
from TcIface (which use CoreLint) to LoadIface (which doesn't).
This is probably better structure anyway.

So most of this patch is refactoring. The actual check for
GlobalIds is in CoreLint.lintAndScopeId

4 years agoPattern-synonym matcher and builder Ids must be *LocalIds*
Simon Peyton Jones [Sat, 13 Dec 2014 22:47:01 +0000 (22:47 +0000)] 
Pattern-synonym matcher and builder Ids must be *LocalIds*

This easy-to-make mistake meant that pattern-synonym matcher and
builder Ids weren't being treated as locally defined by the simpplier.
That meant that we never looked up them up in the environment, got an
out-of-date unfolding, which made the Simplifier fall into an infinite
loop.  This was the cause of Trac #98587, but it was quite tricky to

In a separate patch I'll make Lint check for locally-bound GlobalIds,
since they are always an error.

4 years agoUpdate `bytestring` submodule to RC
Herbert Valerio Riedel [Sun, 14 Dec 2014 19:36:33 +0000 (20:36 +0100)] 
Update `bytestring` submodule to RC

NB: this still carries the wrong version number but will
be released as

4 years agoFixup bad haddock.base perf-num bump in 0c9c2d89
Herbert Valerio Riedel [Sun, 14 Dec 2014 19:35:12 +0000 (20:35 +0100)] 
Fixup bad haddock.base perf-num bump in 0c9c2d89

4 years agoUpdate `binary` submodule to final release
Herbert Valerio Riedel [Sun, 14 Dec 2014 17:59:00 +0000 (18:59 +0100)] 
Update `binary` submodule to final release

This also introduces a "bootstrap" `cabal_macros.h` header to provide
the `MIN_VERSION_base()` macro during Cabal bootstrapping which as it is
now used by `binary`.

4 years agoUpdate `filepath` submodule to current RC
Herbert Valerio Riedel [Sun, 14 Dec 2014 13:01:13 +0000 (14:01 +0100)] 
Update `filepath` submodule to current RC

4 years agoUpdate `time` submodule to final release
Herbert Valerio Riedel [Sun, 14 Dec 2014 09:58:26 +0000 (10:58 +0100)] 
Update `time` submodule to final release

4 years agoRe-Update Haddock submodule to latest `master` tip
Herbert Valerio Riedel [Sun, 14 Dec 2014 09:33:43 +0000 (10:33 +0100)] 
Re-Update Haddock submodule to latest `master` tip

The previous attempt failed, but hopefully this one succeeds...

This also updates the perf-numbers for `haddock.base` and `haddock.Cabal`

NB: this switches from `ghc-head` to `master` branch temporarily
    until GHC 7.10 has been properly branched off.

4 years agopowerpc: fix and enable shared libraries by default on linux
Sergei Trofimovich [Sun, 14 Dec 2014 14:30:12 +0000 (14:30 +0000)] 
powerpc: fix and enable shared libraries by default on linux

And fix things all the way down to it. Namely:
    - remove 'r30' from free registers, it's an .LCTOC1 register
      for gcc. generated .plt stubs expect it to be initialised.
    - fix PicBase computation, which originally forgot to use 'tmp'
      reg in 'initializePicBase_ppc.fetchPC'
    - mark 'ForeighTarget's as implicitly using 'PicBase' register
      (see comment for details)
    - add 64-bit MO_Sub and test on alloclimit3/4 regtests
    - fix dynamic label offsets to match with .LCTOC1 offset

Signed-off-by: Sergei Trofimovich <>
Test Plan: validate passes equal amount of vanilla/dyn tests

Reviewers: simonmar, erikd, austin

Reviewed By: erikd, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #8024, #9831

4 years agoRevert "Update Haddock submodule to latest `master` tip"
Herbert Valerio Riedel [Sun, 14 Dec 2014 12:43:23 +0000 (13:43 +0100)] 
Revert "Update Haddock submodule to latest `master` tip"

This reverts commit 7f634320a2c39f4f81f631deb844acbaebaced66 again for now as
it causes validate's bindist phase to fail with

  haddock: internal error: .../install   dir/lib/ghc-7.9.20141214/html:
     getDirectoryContents: does not exist (No such file or directory)

4 years agoUpdate Haddock submodule to latest `master` tip
Herbert Valerio Riedel [Sun, 14 Dec 2014 09:33:43 +0000 (10:33 +0100)] 
Update Haddock submodule to latest `master` tip

This also updates the perf-numbers for `haddock.base` and `haddock.Cabal`

NB: this switches from `ghc-head` to `master` branch temporarily
    until GHC 7.10 has been properly branched off.

4 years agoOnly use -fasm on platforms with an NCG (Closes: #9884).
Erik de Castro Lopo [Sun, 14 Dec 2014 08:04:28 +0000 (08:04 +0000)] 
Only use -fasm on platforms with an NCG (Closes: #9884).

Summary: Signed-off-by: Erik de Castro Lopo <>

Reviewers: austin, carter

Reviewed By: carter

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9884

4 years agoParser: remove unused rule (copy/paste error)
Sergei Trofimovich [Sat, 13 Dec 2014 21:05:42 +0000 (21:05 +0000)] 
Parser: remove unused rule (copy/paste error)

Found out when tracking down conflicts reported by happy.
It was accidentally introduced in large Api Annotations
patch: 803fc5db31f084b73713342cdceaed5a9c664267

  unused rules: 1
  shift/reduce conflicts:  60
  reduce/reduce conflicts: 16
  shift/reduce conflicts:  60
  reduce/reduce conflicts: 12

Unused rule is seen in happy's --info= output as:
    rule 180 is unused
    decl_cls -> 'default' infixexp '::' sigtypedoc     (180)
    decl_cls -> 'default' infixexp '::' sigtypedoc     (181)

While at it removed 'q' typo in parser conflict log :)

Signed-off-by: Sergei Trofimovich <>
Reviewers: simonmar, austin, alanz

Reviewed By: alanz

Subscribers: carter, thomie

Differential Revision:

4 years agoreduceTyFamApp_maybe should *not* normalise arguments first.
Richard Eisenberg [Sat, 13 Dec 2014 14:54:53 +0000 (09:54 -0500)] 
reduceTyFamApp_maybe should *not* normalise arguments first.

Doing so made the solver gobble up tons of memory, now that matchFam
calls reduceTyFamApp_maybe. But, I don't know why, yet! Will
look more closely at this soon.

4 years agoFlat constraint --> Simple constraint
Richard Eisenberg [Wed, 10 Dec 2014 21:58:09 +0000 (16:58 -0500)] 
Flat constraint --> Simple constraint

4 years agoRewrite `Coercible` solver
Richard Eisenberg [Fri, 12 Dec 2014 22:19:21 +0000 (17:19 -0500)] 
Rewrite `Coercible` solver

This is a rewrite of the algorithm to solve for Coercible "instances".

A preliminary form of these ideas is at

The basic idea here is that the `EqPred` constructor of `PredTree`
now is parameterised by a new type `EqRel` (where
`data EqRel = NomEq | ReprEq`). Thus, every equality constraint can
now talk about nominal equality (the usual case) or representational
equality (the `Coercible` case).

This is a change from the previous
behavior where `Coercible` was just considered a regular class with
a special case in `matchClassInst`.

Because of this change, representational equalities are now
canonicalized just like nominal ones, allowing more equalities
to be solved -- in particular, the case at the top of #9117.

A knock-on effect is that the flattener must be aware of the
choice of equality relation, because the inert set now stores
both representational inert equalities alongside the nominal
inert equalities. Of course, we can use representational equalities
to rewrite only within another representational equality --
thus the parameterization of the flattener.

A nice side effect of this change is that I've introduced a new
type `CtFlavour`, which tracks G vs. W vs. D, removing some ugliness
in the flattener.

This commit includes some refactoring as discussed on D546.
It also removes the ability of Deriveds to rewrite Deriveds.

This fixes bugs #9117 and #8984.

Reviewers: simonpj, austin, nomeata

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9117, #8984

4 years ago32-bit performance changes following constraint solver improvements
Simon Peyton Jones [Thu, 11 Dec 2014 20:32:02 +0000 (20:32 +0000)] 
32-bit performance changes following constraint solver improvements

Things get faster, except T5030

4 years agoFix an obscure but terrible bug in the simplifier (Trac #9567)
Simon Peyton Jones [Thu, 11 Dec 2014 17:12:49 +0000 (17:12 +0000)] 
Fix an obscure but terrible bug in the simplifier (Trac #9567)

The issue was that contInputType simply gave the wrong answer
for type applications.

There was no way to fix contInputType; it just didn't have enough
information.  So I did this:

* Split the ApplyTo constructor of SimplUtils.SimplCont into
  I used record syntax for them; we should do this for some
  of the other constructors too.

* The latter carries a sc_hole_ty, which is the type of the
  continuation's "hole"

* Maintaining this type meant that I had do to something
  similar for SimplUtils.ArgSpec.

* I renamed contInputType to contHoleType for consistency.

* I did a bit of refactoring around the call to tryRules
  in Simplify, which was jolly confusing before.

The resulting code is quite nice now.  And it has the additional
merit that it works.

The tests are simply tc124 and T7891 with -O enabled.

4 years agoTest Trac #9090
Simon Peyton Jones [Thu, 11 Dec 2014 10:44:32 +0000 (10:44 +0000)] 
Test Trac #9090

4 years agoAdd a third test variant to Trac #9872
Simon Peyton Jones [Thu, 11 Dec 2014 10:11:41 +0000 (10:11 +0000)] 
Add a third test variant to Trac #9872

4 years agoWhite space wibble only
Simon Peyton Jones [Thu, 11 Dec 2014 08:39:10 +0000 (08:39 +0000)] 
White space wibble only

4 years agoComments only: move flattening notes to TcFlatten
Simon Peyton Jones [Wed, 10 Dec 2014 14:56:30 +0000 (14:56 +0000)] 
Comments only: move flattening notes to TcFlatten

4 years agoTests for Trac #9872
Simon Peyton Jones [Wed, 10 Dec 2014 14:36:47 +0000 (14:36 +0000)] 
Tests for Trac #9872

4 years agoTestsuite wibbles from constraint-solver improvements
Simon Peyton Jones [Wed, 10 Dec 2014 14:35:54 +0000 (14:35 +0000)] 
Testsuite wibbles from constraint-solver improvements

4 years agoImplement a fast path for new constraints looking like (a~b), namely unifyWanted
Simon Peyton Jones [Wed, 10 Dec 2014 14:11:51 +0000 (14:11 +0000)] 
Implement a fast path for new constraints looking like (a~b), namely unifyWanted

Looking at some typechecker traces I could see places where we were laboriously
creating a Refl coercion.  This patch short-circuits the process.

See TcCanonical:
  Note [unifyWanted and unifyDerived]
  Note [Decomposing TyConApps]

I ended up with some refactoring, notably

  * I moved xCtEvidence, rewriteEvidence, rewriteEqEvidence
    from TcSMonad to TcCanonical

There are some knock-on effects, but only minor ones.

4 years agoWhen flattening, try reducing type-family applications eagerly
Simon Peyton Jones [Wed, 10 Dec 2014 13:54:17 +0000 (13:54 +0000)] 
When flattening, try reducing type-family applications eagerly

This short-cut can improve performance quite a bit, by short-circuiting
the process of creating a fresh constraint and binding for each reduction.

See Note [Reduce type family applications eagerly] in TcFlatten

To do this I had to generalise the inert_flat_cache a bit, so that the
rhs is not necessarily a type variable; but nothing fundamental.

4 years agoFix type-variable details naming (fixes misleading debug output)
Simon Peyton Jones [Wed, 10 Dec 2014 13:12:47 +0000 (13:12 +0000)] 
Fix type-variable details naming (fixes misleading debug output)

4 years agoGet rid of TcMType.newWantedEvVar(s)
Simon Peyton Jones [Wed, 10 Dec 2014 13:12:11 +0000 (13:12 +0000)] 
Get rid of TcMType.newWantedEvVar(s)

Hardly used, not helpful.  Use newEvVar instead.

4 years agoReorganise the work list, so that flattening goals are treated in the right order
Simon Peyton Jones [Tue, 9 Dec 2014 17:38:12 +0000 (17:38 +0000)] 
Reorganise the work list, so that flattening goals are treated in the right order

Trac #9872 showed the importance of processing goals in depth-first, so that
we do not build up a huge pool of suspended function calls, waiting for their
children to fire.  There is a detailed explanation in
     Note [The flattening work list]
in TcFlatten

The effect for Trac #9872 (slow1.hs) is dramatic.  We go from too long
to wait down to 28Gbyte allocation.  GHC 7.8.3 did 116Gbyte allocation!

4 years agoAdd Ord instances to TH
Richard Eisenberg [Tue, 9 Dec 2014 22:39:11 +0000 (17:39 -0500)] 
Add Ord instances to TH

4 years agocompiler: fix trac issue #9817
Marios Titas [Wed, 10 Dec 2014 10:17:22 +0000 (04:17 -0600)] 
compiler: fix trac issue #9817

When we call runHandlers, we must pass it a ForeignPtr. To ensure that
this happens, we introduce a wrapper that receives a plain Ptr and
converts it into a ForeignPtr. Then we adjust startSignalHandlers in
rts/posix/Signals.c to call the wrapper instead of calling runHandlers

Reviewers: hvr, austin, rwbarton, simonmar

Reviewed By: austin, simonmar

Subscribers: simonmar, thomie, carter

Differential Revision:

GHC Trac Issues: #9817

4 years agoOnly run subsections_via_symbols test when LLVM is available.
Edward Z. Yang [Wed, 10 Dec 2014 08:08:31 +0000 (00:08 -0800)] 
Only run subsections_via_symbols test when LLVM is available.

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

Test Plan: validate

Reviewers: austin

Subscribers: carter, thomie

Differential Revision:

4 years agoAdd proper expected output for T5435_dyn_asm on Darwin
Edward Z. Yang [Wed, 10 Dec 2014 07:58:04 +0000 (23:58 -0800)] 
Add proper expected output for T5435_dyn_asm on Darwin

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

Test Plan: validate

Reviewers: austin

Subscribers: carter, thomie

Differential Revision:

4 years agoLink pre-ARMv6 spinlocks into all RTS variants
Joachim Breitner [Wed, 10 Dec 2014 00:18:11 +0000 (18:18 -0600)] 
Link pre-ARMv6 spinlocks into all RTS variants

For compatibility with ARM machines from pre v6, the RTS provides
implementations of certain atomic operations. Previously, these
were only included in the threaded RTS.

But ghc (the library) contains the code in compiler/cbits/genSym.c, which
uses these operations if there is more than one capability. But there is only
one libHSghc, so the linker wants to resolve these symbols in every case.

By providing these operations in all RTSs, the linker is happy. The only
downside is a small amount of dead code in the non-threaded RTS on old ARM

Test Plan: It helped here.

Reviewers: bgamari, austin

Reviewed By: bgamari, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #8951

4 years agoDocument splitAt deviation from the Report
David Feuer [Wed, 10 Dec 2014 00:12:33 +0000 (18:12 -0600)] 
Document splitAt deviation from the Report

`splitAt` is stricter than the Report specifies, so we should
say so.

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: carter, thomie

Projects: #ghc

Differential Revision:

GHC Trac Issues: #9870

4 years agofix misleading error message regarding function arity
Yuras Shumovich [Wed, 10 Dec 2014 00:11:44 +0000 (18:11 -0600)] 
fix misleading error message regarding function arity

The error reports something like:

  The function ‘f’ is applied to three arguments,
  but its type ‘Int -> Float -> Char -> Bool’ has only three

The original type was "Monad m => Int -> Float -> m Bool", but
"m" was unified with "-> Char".

Now it looks better:

  The function ‘f’ is applied to three arguments,
  its type is ‘Int -> Float -> m0 Bool’,
  it is specialized to ‘Int -> Float -> Char -> Bool’

Test Plan: T9605

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9605