4 years agoGroom comments related to StaticPointers.
Facundo Domínguez [Mon, 22 Dec 2014 21:15:36 +0000 (19:15 -0200)] 
Groom comments related to StaticPointers.

Reviewed By: austin

Differential Revision:

4 years agoExpand notes in TcFlatten
Richard Eisenberg [Mon, 22 Dec 2014 18:23:11 +0000 (13:23 -0500)] 
Expand notes in TcFlatten

4 years agoBump GHC version from 7.9 to 7.11
Herbert Valerio Riedel [Mon, 22 Dec 2014 16:21:49 +0000 (17:21 +0100)] 
Bump GHC version from 7.9 to 7.11

This needs to update the Haddock submodule as well

Signed-off-by: Herbert Valerio Riedel <>
4 years agoFix typo in GLASGOW_HASKELL_PATCHLEVEL2 macro
Herbert Valerio Riedel [Mon, 22 Dec 2014 16:35:39 +0000 (17:35 +0100)] 

This typo slipped in through 3549c952b535803270872adaf87262f2df0295a4

4 years agoRevert "Bump version to 7.11"
Austin Seipp [Mon, 22 Dec 2014 16:02:59 +0000 (10:02 -0600)] 
Revert "Bump version to 7.11"

This reverts commit 18bf6d5de5c8eed68584921f46efca79d7d59d6a.

We forgot to tweak some of the submodule bounds. Fixes incoming soon.

4 years agoBump version to 7.11 ghc-7.11-start
Austin Seipp [Mon, 22 Dec 2014 15:48:13 +0000 (09:48 -0600)] 
Bump version to 7.11

Signed-off-by: Austin Seipp <>
4 years agoComments only
Simon Peyton Jones [Mon, 22 Dec 2014 12:43:58 +0000 (12:43 +0000)] 
Comments only

4 years agoFor :info, return all matching Names, rather than complaining about ambiguity
Simon Peyton Jones [Mon, 22 Dec 2014 12:00:10 +0000 (12:00 +0000)] 
For :info, return all matching Names, rather than complaining about ambiguity

This fixes Trac #9881, and gives more helpful output in the case of ambiguity.
Certainly more helpful than the positively-misleading error we get right now.

4 years agoUpdate containers submodule to release
Herbert Valerio Riedel [Mon, 22 Dec 2014 11:45:34 +0000 (12:45 +0100)] 
Update containers submodule to release

4 years agoUpdate pretty and random submodules
Herbert Valerio Riedel [Mon, 22 Dec 2014 11:44:33 +0000 (12:44 +0100)] 
Update pretty and random submodules

This updates those two packages to their most recent respective proper

4 years agoStrip leading whitespace before checking if a statement looks like a declaration...
Dr. ERDI Gergo [Mon, 22 Dec 2014 11:01:37 +0000 (19:01 +0800)] 
Strip leading whitespace before checking if a statement looks like a declaration (fixes #9914)

4 years agoAdd expected output to T9915 test
Dr. ERDI Gergo [Sun, 21 Dec 2014 08:19:42 +0000 (16:19 +0800)] 
Add expected output to T9915 test

4 years agoCheck dflags for language extensions when deciding if "foreign " and "deriving "
Dr. ERDI Gergo [Sun, 21 Dec 2014 07:07:43 +0000 (15:07 +0800)] 
Check dflags for language extensions when deciding if "foreign " and "deriving "
look like prefixes of valid declarations (fixes #9915)

4 years agotrac #9744, make program name and product version configurable through DynFlags/Settings
Luite Stegeman [Sat, 20 Dec 2014 00:30:08 +0000 (18:30 -0600)] 
trac #9744, make program name and product version configurable through DynFlags/Settings


This allows GHC API clients to use a package database and dynamic
library names that do not clash with those of the host GHC

This also updates the Haddock submodule.

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: thomie, carter

Differential Revision:

4 years agoadd runMeta hook
Luite Stegeman [Sat, 20 Dec 2014 00:28:17 +0000 (18:28 -0600)] 
add runMeta hook

The runMeta hook can be used to override how metaprogramming expressions
are evaluated. It makes the metaprogramming request types explicit and
has access to the TcM monad. This makes it a much more convenient starting
point for implementing out of process Template Haskell than the existing
hscCompileCoreExpr hook.

Reviewers: hvr, edsko, austin, simonpj

Reviewed By: austin

Subscribers: thomie, carter

Differential Revision:

4 years agoUse a new $b prefix for pattern synonym builder names, instead of re-using $W from...
Dr. ERDI Gergo [Sat, 20 Dec 2014 13:34:08 +0000 (21:34 +0800)] 
Use a new $b prefix for pattern synonym builder names, instead of re-using $W from wrappers

4 years agoChange performance numbers for T3064
Richard Eisenberg [Sat, 20 Dec 2014 03:35:03 +0000 (22:35 -0500)] 
Change performance numbers for T3064

4 years agoOptimize flattener by trying to reduce a TF before reducing its args.
Richard Eisenberg [Thu, 18 Dec 2014 04:30:15 +0000 (23:30 -0500)] 
Optimize flattener by trying to reduce a TF before reducing its args.

This has a demonstrated 2x speed boost on the T9872{a,b,c} tests.

4 years agoImproved Backpack IR description. [skip ci]
Edward Z. Yang [Sat, 20 Dec 2014 02:23:52 +0000 (21:23 -0500)] 
Improved Backpack IR description. [skip ci]

Signed-off-by: Edward Z. Yang <>
4 years agoUpdate hoopl submodule to rls
Herbert Valerio Riedel [Fri, 19 Dec 2014 22:36:14 +0000 (23:36 +0100)] 
Update hoopl submodule to rls

[skip ci]

4 years agoUpdate Cabal submodule to latest 1.22 branch tip
Herbert Valerio Riedel [Fri, 19 Dec 2014 20:37:58 +0000 (21:37 +0100)] 
Update Cabal submodule to latest 1.22 branch tip

4 years agoUpdate directory submodule to latest snapshot
Herbert Valerio Riedel [Fri, 19 Dec 2014 20:36:18 +0000 (21:36 +0100)] 
Update directory submodule to latest snapshot

This pulls in

> make `getModificationTime` support sub-second resolution on windows

4 years agoUpdate Cabal submodule to latest 1.22 branch tip
Herbert Valerio Riedel [Fri, 19 Dec 2014 16:35:24 +0000 (17:35 +0100)] 
Update Cabal submodule to latest 1.22 branch tip

4 years agoAdd instance Lift Natural
Richard Eisenberg [Fri, 19 Dec 2014 15:29:54 +0000 (10:29 -0500)] 
Add instance Lift Natural

4 years agoAdd Jan Stolarek's test for Trac #9872
Simon Peyton Jones [Fri, 19 Dec 2014 15:25:51 +0000 (15:25 +0000)] 
Add Jan Stolarek's test for Trac #9872

4 years agoUpdate release notes for recent language and TH changes.
Richard Eisenberg [Fri, 19 Dec 2014 15:19:55 +0000 (10:19 -0500)] 
Update release notes for recent language and TH changes.

4 years agoClarify that declaration splices exist at top level only. (#9880)
Richard Eisenberg [Tue, 16 Dec 2014 22:21:42 +0000 (17:21 -0500)] 
Clarify that declaration splices exist at top level only. (#9880)

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