4 years agoUpdate hsc2hs submodule for de-tabbing
Herbert Valerio Riedel [Sat, 27 Dec 2014 22:39:18 +0000 (23:39 +0100)] 
Update hsc2hs submodule for de-tabbing

4 years agoUse directory-style database for bootstrapping database
Edward Z. Yang [Sat, 27 Dec 2014 15:57:30 +0000 (10:57 -0500)] 
Use directory-style database for bootstrapping database

This allows GHC HEAD to be bootstrapped using 7.10.

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

Reviewers: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9652

4 years agoWe do emit a warning for stdcall now.
Edward Z. Yang [Sat, 27 Dec 2014 15:10:37 +0000 (10:10 -0500)] 
We do emit a warning for stdcall now.

Signed-off-by: Edward Z. Yang <>
4 years agoRun T9762 only if dynamic libraries are available
Joachim Breitner [Sat, 27 Dec 2014 15:01:54 +0000 (16:01 +0100)] 
Run T9762 only if dynamic libraries are available

4 years agoCopy GHC's config.guess/sub over libffi's versions
Herbert Valerio Riedel [Sat, 27 Dec 2014 08:11:16 +0000 (09:11 +0100)] 
Copy GHC's config.guess/sub over libffi's versions

This should address #9924 as GHC's config.guess/sub versions need to be
up to date anyway.

4 years ago2nd attempt to fix T9032 test-case
Herbert Valerio Riedel [Thu, 25 Dec 2014 22:16:28 +0000 (23:16 +0100)] 
2nd attempt to fix T9032 test-case

First attempt via 7a2c9dde24b72f wasn't working properly. This attempt
should work better as it doesn't cause the makefile recipe to fail which
causes `make` to emit additional varying output.

4 years agoFix linker interaction between Template Haskell and HPC (#9762)
Reid Barton [Tue, 23 Dec 2014 21:53:16 +0000 (16:53 -0500)] 
Fix linker interaction between Template Haskell and HPC (#9762)

I'm not really happy about perpetuating the hackish fix for #8696,
but at least in the context of building with -fhpc, the performance
cost should be negligible.

I'm suspicious about PlainModuleInitLabel and the Windows stuff too,
but I don't know what it does / can't test it (respectively) so I'll
leave those alone for now.

Hopefully out-of-process TH will save us from these hacks some day.

The test is an adaptation of T8696. It's a bit more awkward since
I couldn't think of a way to get cross-module tickbox references
without optimizations (inlining), but ghci doesn't permit -O for
some reason.

Test Plan: harbormaster; validate

Reviewers: austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9762


4 years agoMake ghc -e fail on invalid declarations
Reid Barton [Tue, 23 Dec 2014 21:16:29 +0000 (16:16 -0500)] 
Make ghc -e fail on invalid declarations

Note: This commit includes an API change to GhciMonad.runDecls
to allow the caller to determine whether the declarations were
run successfully or not.

Test Plan: harbormaster

Reviewers: austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

4 years agoMake ghc -e not exit on valid import commands (#9905)
Reid Barton [Tue, 23 Dec 2014 20:22:01 +0000 (15:22 -0500)] 
Make ghc -e not exit on valid import commands (#9905)

Some Trues and Falses were mixed up due to Bool being used in
different senses in different parts of GHCi.

Test Plan: harbormaster; validate

Reviewers: austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9905


4 years agoFixup edd233acc19d269385 (T9032 test)
Herbert Valerio Riedel [Tue, 23 Dec 2014 17:10:20 +0000 (18:10 +0100)] 
Fixup edd233acc19d269385 (T9032 test)

This is not a proper fix as the `x` in `make[x]: ...` changes depending on how
the testsuite was called. So this probably only works when invoked via ./validate.

4 years agoTest earlier for self-import (Trac #9032)
Simon Peyton Jones [Tue, 23 Dec 2014 15:59:30 +0000 (15:59 +0000)] 
Test earlier for self-import (Trac #9032)

This patch makes the renamer check for self-import, especially when
dependencies change, because the typechecker can fall over if that

I'm still uneasy about *indirect* self-import, but I'll leave that for
another day

4 years agoAttempt to improve cleaning
Simon Peyton Jones [Tue, 23 Dec 2014 15:45:09 +0000 (15:45 +0000)] 
Attempt to improve cleaning

I found several tests that failed when the interface file format changed,
due to leftover .hi file droppings.

I'm not sure I've done this right, but it should be a bit better

4 years agoA bit of refactoring to TcErrors
Simon Peyton Jones [Tue, 23 Dec 2014 15:44:00 +0000 (15:44 +0000)] 
A bit of refactoring to TcErrors

This replaces a bunch of boolean flags in ReportErrCtxt with
an algebraic data type to say how to handle expression holes
and type holes

No change in functionality; I just found myself unable to understand
the code easily, when thinking about something else.  Result is
quite nice, I think.

4 years agoComments only
Simon Peyton Jones [Tue, 23 Dec 2014 15:41:59 +0000 (15:41 +0000)] 
Comments only

4 years agoAdd a couple of missing cases to isTcReflCo and isTcReflCo_maybe
Simon Peyton Jones [Tue, 23 Dec 2014 15:40:54 +0000 (15:40 +0000)] 
Add a couple of missing cases to isTcReflCo and isTcReflCo_maybe

4 years agoEliminate so-called "silent superclass parameters"
Simon Peyton Jones [Tue, 23 Dec 2014 15:39:50 +0000 (15:39 +0000)] 
Eliminate so-called "silent superclass parameters"

The purpose of silent superclass parameters was to solve the
awkward problem of superclass dictinaries being bound to bottom.
See THE PROBLEM in Note [Recursive superclasses] in TcInstDcls

Although the silent-superclass idea worked,

  * It had non-local consequences, and had effects even in Haddock,
    where we had to discard silent parameters before displaying
    instance declarations

  * It had unexpected peformance costs, shown up by Trac #3064 and its
    test case.  In monad-transformer code, when constructing a Monad
    dictionary you had to pass an Applicative dictionary; and to
    construct that you neede a Functor dictionary. Yet these extra
    dictionaries were often never used.  (All this got much worse when
    we added Applicative as a superclass of Monad.) Test T3064
    compiled *far* faster after silent superclasses were eliminated.

  * It introduced new bugs.  For example SilentParametersOverlapping,
    T5051, and T7862, all failed to compile because of instance overlap
    directly because of the silent-superclass trick.

So this patch takes a new approach, which I worked out with Dimitrios
in the closing hours before Christmas.  It is described in detail
in THE PROBLEM in Note [Recursive superclasses] in TcInstDcls.

Seems to work great!

Quite a bit of knock-on effect

 * The main implementation work is in tcSuperClasses in TcInstDcls
   Everything else is fall-out

 * IdInfo.DFunId no longer needs its n-silent argument
   * Ditto IDFunId in IfaceSyn
   * Hence interface file format changes

 * Now that DFunIds do not have silent superclass parameters, printing
   out instance declarations is simpler. There is tiny knock-on effect
   in Haddock, so that submodule is updated

 * I realised that when computing the "size of a dictionary type"
   in TcValidity.sizePred, we should be rather conservative about
   type functions, which can arbitrarily increase the size of a type.
   Hence the new datatype TypeSize, which has a TSBig constructor for
   "arbitrarily big".

 * instDFunType moves from TcSMonad to Inst

 * Interestingly, CmmNode and CmmExpr both now need a non-silent
   (Ord r) in a couple of instance declarations. These were previously
   silent but must now be explicit.

 * Quite a bit of wibbling in error messages

4 years agoAdd a small comment
Simon Peyton Jones [Mon, 22 Dec 2014 14:35:24 +0000 (14:35 +0000)] 
Add a small comment

4 years agoalways use 'mkdir -p' and fix missing dir (fixes #9876)
Joe Hillenbrand [Tue, 23 Dec 2014 15:15:20 +0000 (09:15 -0600)] 
always use 'mkdir -p' and fix missing dir (fixes #9876)

Summary: Signed-off-by: Joe Hillenbrand <>

Reviewers: thomie, austin

Reviewed By: thomie, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9876

4 years agodwarf: sync getIdFromTrivialExpr with exprIsTrivial (test break028 and others)
Sergei Trofimovich [Tue, 23 Dec 2014 14:55:06 +0000 (08:55 -0600)] 
dwarf: sync getIdFromTrivialExpr with exprIsTrivial (test break028 and others)

The bug manifests when built with
    EXTRA_HC_OPTS += -g

+++ ./ghci.debugger/scripts/ 2014-12-19 23:08:46.199876621 +0000
@@ -0,0 +1,11 @@
+ghc-stage2: panic! (the 'impossible' happened)
+  (GHC version 7.9.20141219 for x86_64-unknown-linux):
+       getIdFromTrivialExpr x_alJ
+Please report this as a GHC bug:
+<interactive>:3:1: Not in scope: ‘g’
+<interactive>:3:3: Not in scope: data constructor ‘False’

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

Reviewed By: scpmw

Subscribers: carter, thomie

Differential Revision:

4 years agoRename NamedWildcards flag to NamedWildCards
Thomas Winant [Tue, 23 Dec 2014 14:48:29 +0000 (08:48 -0600)] 
Rename NamedWildcards flag to NamedWildCards

Mind the capital C. As there is already a flag RecordWildCards with a capital
C, we should at least try to be consistent in the spelling of WildCards.

Test Plan: validate

Reviewers: goldfire, simonpj, austin

Reviewed By: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

4 years agoFix panic on :kind _ in GHCi (Trac #9879)
Thomas Winant [Tue, 23 Dec 2014 14:48:15 +0000 (08:48 -0600)] 
Fix panic on :kind _ in GHCi (Trac #9879)

Running `:kind _` in GHCi produced a panic, fix it by extracting the
wildcards. Now, `:kind _` produces `_ :: k0`. Unfortunately, a `0` is
added after the kind is tidied and I haven't found a way to get rid of

This does not fix the other panic involving TemplateHaskell mentioned
in #9879.

Test Plan: new test GHCiWildcardKind should pass

Reviewers: austin, simonpj

Reviewed By: austin

Subscribers: simonpj, carter, thomie, monoidal

Differential Revision:

GHC Trac Issues: #9879

4 years agodocs: create 7.12.1 relnotes
Austin Seipp [Tue, 23 Dec 2014 14:46:59 +0000 (08:46 -0600)] 
docs: create 7.12.1 relnotes

Signed-off-by: Austin Seipp <>
4 years agofix spInfoSrcLoc field name
Facundo Domínguez [Mon, 22 Dec 2014 21:20:11 +0000 (19:20 -0200)] 
fix spInfoSrcLoc field name

Reviewed By: austin

Differential Revision:

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