4 years agoPretty: fix potential bad formatting of error message (#10735)
Thomas Miedema [Wed, 5 Aug 2015 08:58:54 +0000 (10:58 +0200)] 
Pretty: fix potential bad formatting of error message (#10735)

This is a backport of a bug fix by Benedikt Huber for the same problem
in the pretty library (#1337), from commit
8d8866a8379c2fe8108ef034893c59e06d5e752f. The original explanation for
the fix is attached below.

Ticket #1776 originally reported an infinite loop when printing error
message. This promptly got fixed in:

  commit 2d52ee06786e5caf0c2d65a4b4bb7c45c6493190
  Author: <unknown>
  Date:   Thu Mar 1 11:45:13 2007 +0000

      Do not go into an infinite loop when pretty-printer finds a
      negative indent (Trac #1176)

SPJ reports in the ticket: "So infinite loop is fixed, but the bad
formatting remains. I've added a test, tcfail177."

tcfail177 however hasn't triggered the formatting problem for years (as
Ian reported in c9e0e6067a47c574d9ff3721afe58e30ca1be3e4).

This patch updates the test to a version that at least still failed with
ghc-7.0 (from #1776#comment:7).


by Benedikt Huber:

    Concerning ticket #1337, we have to change the formal specification of
    fill (it doesn't match the implementation):

    -- Current Specification:
    --   fill []  = empty
    --   fill [p] = p
    --   fill (p1:p2:ps) = oneLiner p1 <#> nest (length p1)
    --                                          (fill (oneLiner p2 : ps))
    --                     `union`
    --                      p1 $$ fill ps

    Problem 1: We want to `unnest' the second argument of (p1 $$ fill ps),
    but not the first one

    In the definition above we have e.g.

    > getSecondLayout $
    >   fillDef False [text "a", text "b", text "a"]

    >> text "ab"; nilabove; nest -1; text "a"; empty
    >> |ab|
    >> |.a|

    Problem 2: The overlapping $$ should only be used for those layouts of
    p1 which aren't one liners (otherwise violating the invariant "Left
    union arg has shorter first line").

    I suggest the following specification (i believe it almost matches the
    current implementation, modulo [fillNB: fix bug #1337] (see below):

    -- Revised Specification:
    --   fill g docs = fill' 0 docs
    --   gap g       = if g then 1 else 0
    --   fill' n []  = []
    --   fill' n [p] = [p]
    --   fill' n (p1:p2:ps) =
    --      oneLiner p1 <g> (fill' (n+length p1+gap g) (oneLiner p2 : ps))
    --        `union`
    --     (p1 $*$ nest (-n) (fill' g ps))
    -- $*$ is defined for layouts (One-Layout Documents) as
    -- layout1 $*$ layout2 | isOneLiner layout1 = layout1 $+$ layout2
    --                     | otherwise          = layout1 $$ layout2

    I've also implemented the specification in HughesPJQuickCheck.hs,
    and checked them against the patched pretty printer.

    Concerning Bug #1337:

    If the above formal specification is fine, it is easy to fix:
    elide the nests of (oneLiner p2) [see attached patch, record bug #1337].

    > PrettyPrint(0) $ ./Bug1337
    > ....ab
    > ...c

    The (long) explanation follows below.


    Explanation of Bug #1337:


    > fcat [ nest 1 $ text "a", nest 2 $ text "b", text "c"]

    --> expected: (nest 1; text "a"; text "b"; nest -3; "c")
    --> actual  : (nest 1; text "a"; text "b"; nest -5; "c")

    === (nest 1; text a) <> (fill (-2) (p2:ps))
    ==>                     (nest 2 (text "b") $+$ text "c")
    ==>                     (nest 2 (text "b")) `nilabove`
                            (nest (-3) (text "c"))
    ==> (nest 1; text a; text b; nest -5 c)

    The problem is that if we decide to layout (p1:p2:ps) as

    | p1 p2
    | ps

    (call it layout A), then we want to have

    > (p1 <> p2) $+$ ps.

    But following law <n6> this means that

    > fcat_A [p1:nest k p2:ps]

    is equivalent to

    > fcat_A [p1,p2,ps]

    so the nest of p2 has to be removed.

    This is somewhat similar to bug #667, but easier to fix
    from a semantic point of view:
    p1,p2 and ps are distinct layouts - we only have to preserve the
    individual layouts, and no combinations of them.

4 years agoPretty: bugfix fillNB (#10735)
Thomas Miedema [Tue, 4 Aug 2015 20:32:06 +0000 (22:32 +0200)] 
Pretty: bugfix fillNB (#10735)

This is a backport of a bug fix by Benedikt Huber (#2393), from commit
1e50748beaa4bd2281d323b18ea51c786bba04a1 in the pretty library.


    Law <l1> states that

    > sep (ps++[empty]++qs)   = sep (ps ++ qs)
    >         ...ditto hsep, hcat, vcat, fill...

    In the current implementation, this fails for the paragraph fill

    > render' $ fsep [ text "c", text "c",empty, text "c", text "b"]
    >   where render' = renderStyle (Style PageMode 7 1.4)
    >> c c c
    >>     b

4 years agoBump template-haskell to new major version 2.11
Herbert Valerio Riedel [Wed, 12 Aug 2015 07:48:53 +0000 (09:48 +0200)] 
Bump template-haskell to new major version 2.11

...since we already have introduced backward compat breakage
that breaks packages such as QuickCheck-2.8.1

Differential Revision:

4 years agoAdd missing </para> to User's guide to fix the build
Thomas Miedema [Tue, 11 Aug 2015 22:34:04 +0000 (00:34 +0200)] 
Add missing </para> to User's guide to fix the build

4 years agoUser manual update, as prodded by #10760.
Richard Eisenberg [Tue, 11 Aug 2015 13:05:30 +0000 (09:05 -0400)] 
User manual update, as prodded by #10760.

This clarifies that kind variables are inputs to type families
and can be used to distinguish instances.

4 years agoReplace HsBang type with HsSrcBang and HsImplBang
Adam Sandberg Eriksson [Mon, 10 Aug 2015 10:55:50 +0000 (12:55 +0200)] 
Replace HsBang type with HsSrcBang and HsImplBang

Updates haddock submodule.

Reviewers: tibbe, goldfire, simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: goldfire, thomie, mpickering

Differential Revision:

4 years agoUpdate testsuite/.gitignore [skip ci]
Thomas Miedema [Sat, 18 Jul 2015 20:14:26 +0000 (22:14 +0200)] 
Update testsuite/.gitignore [skip ci]

4 years agoFix unused-matches warnings in CmmLex.x
Thomas Miedema [Sat, 4 Jul 2015 13:13:19 +0000 (15:13 +0200)] 
Fix unused-matches warnings in CmmLex.x

4 years agoUpdate transformers submodule to release
Herbert Valerio Riedel [Sat, 8 Aug 2015 09:13:52 +0000 (11:13 +0200)] 
Update transformers submodule to release

Differential Revision:

4 years agocmmCreateSwitchPlan: Handle singletons up-front
Joachim Breitner [Fri, 7 Aug 2015 08:56:09 +0000 (10:56 +0200)] 
cmmCreateSwitchPlan: Handle singletons up-front

and make sure these are implemented with an equality check, which is a
shorter instruction. This was suggested by rwbarton in #10677.

Differential Revision:

4 years agoMake oneShot open-kinded
Joachim Breitner [Fri, 7 Aug 2015 08:36:32 +0000 (10:36 +0200)] 
Make oneShot open-kinded

akio wants to use oneShot with unlifted types as well, and there is no
good reason not to let him. This changes the type of the built-in
oneShot definition to open kinds, and also expand the documentation a
little bit.

Differential Revision:

4 years agoSync base/ with GHC 7.10.2 release
Herbert Valerio Riedel [Fri, 7 Aug 2015 15:59:25 +0000 (17:59 +0200)] 
Sync base/ with GHC 7.10.2 release

[skip ci]

4 years agoComments only
Simon Peyton Jones [Fri, 7 Aug 2015 11:32:48 +0000 (12:32 +0100)] 
Comments only

4 years agoTest Trac #10753
Simon Peyton Jones [Fri, 7 Aug 2015 11:32:09 +0000 (12:32 +0100)] 
Test Trac #10753

4 years agoBig batch of Backpack documentation edits.
Edward Z. Yang [Fri, 7 Aug 2015 05:31:17 +0000 (22:31 -0700)] 
Big batch of Backpack documentation edits.

Signed-off-by: Edward Z. Yang <>
4 years agobase: Add missing Traversable instance for ZipList
Ben Gamari [Fri, 7 Aug 2015 03:50:22 +0000 (05:50 +0200)] 
base: Add missing Traversable instance for ZipList

4 years agoRejigger OSMem.my_mmap to allow building on Mac
Richard Eisenberg [Thu, 6 Aug 2015 18:37:53 +0000 (14:37 -0400)] 
Rejigger OSMem.my_mmap to allow building on Mac

Previously, the prot and flags variables were set but never used
on Mac (darwin). This caused a warning, and the build setup stopped
compilation. This commit is intended simply to omit these variables
when building with darwin_HOST_OS set. No change in behavior on any
platform is intended.

4 years agoAdd test for #10600 (exhaustiveness check with --make and -fno-code)
Reid Barton [Thu, 6 Aug 2015 18:12:38 +0000 (14:12 -0400)] 
Add test for #10600 (exhaustiveness check with --make and -fno-code)

4 years agollvmGen: Rework LLVM mangler
Ben Gamari [Thu, 6 Aug 2015 15:30:19 +0000 (17:30 +0200)] 
llvmGen: Rework LLVM mangler

The LLVM mangler does not currently transform AVX instructions on x86-64
platforms, due to a missing #include. Also, it is significantly more
complicated than necessary, due to the file into sections (not needed
anymore), and is sensitive to the details of the whitespace in the

Author: dobenour

Test Plan: Validation on x86-64, x86-32, and ARM

Reviewers: austin

Subscribers: thomie, bgamari, rwbarton

Differential Revision:

GHC Trac Issues: #10394

4 years agobase: Add instances
fumieval [Thu, 6 Aug 2015 15:28:04 +0000 (17:28 +0200)] 
base: Add instances

This patch adds following instances:

* Foldable ZipList
* Traversable ZipList
* Functor Complex
* Applicative Complex
* Monad Complex
* Foldable Complex
* Traversable Complex
* Generic1 Complex
* Monoid a => Monoid (Identity a)
* Storable ()

Reviewers: ekmett, fumieval, hvr, austin

Subscribers: thomie, #core_libraries_committee

Projects: #core_libraries_committee

Differential Revision:

GHC Trac Issues: #10609

4 years agoEnsure DynFlags are consistent
Ben Gamari [Thu, 6 Aug 2015 15:25:46 +0000 (17:25 +0200)] 
Ensure DynFlags are consistent

While we have always had makeDynFlagsConsistent to enforce a variety of
consistency invariants on DynFlags, it hasn't been widely used.
GHC.Main, for instance, ignored it entirely. This leads to issues like
Trac #10549, where an OPTIONS_GHC pragma introduced an inconsistency,
leading to a perplexing crash later in compilation.

Here I add consistency checks in GHC.Main.set{Session,Program}DynFlags,
closing this hole.

Fixes #10549.

Test Plan: Validate with T10549

Reviewers: austin

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10549

4 years agoTest Trac #10742
Simon Peyton Jones [Thu, 6 Aug 2015 13:50:35 +0000 (14:50 +0100)] 
Test Trac #10742

4 years agoT8968-1 and -3 should pass
Simon Peyton Jones [Thu, 6 Aug 2015 13:50:12 +0000 (14:50 +0100)] 
T8968-1 and -3 should pass

See Trac #9953, comment:22.

4 years agoComments only
Simon Peyton Jones [Thu, 6 Aug 2015 13:46:48 +0000 (14:46 +0100)] 
Comments only

4 years agoComents only
Simon Peyton Jones [Thu, 6 Aug 2015 12:40:07 +0000 (13:40 +0100)] 
Coments only

4 years agoFix quantification for inference with sigs
Simon Peyton Jones [Wed, 5 Aug 2015 15:46:16 +0000 (16:46 +0100)] 
Fix quantification for inference with sigs

When we are *inferring* the type of a let-bound function,
we might still have a type signature.  And we must be sure
to quantify over its type variables, else you get the crash
in Trac #10615.

See Note [Which type variables to quantify] in TcSimplify

4 years agoTidy up and refactor wildcard handling
Simon Peyton Jones [Wed, 5 Aug 2015 13:24:54 +0000 (14:24 +0100)] 
Tidy up and refactor wildcard handling

When examining #10615, I found the wildcard handling hard
to understand.  This patch refactors quite a bit, but with
no real change in behaviour.

 * Split out TcIdSigInfo from TcSigInfo, as a separate type,
   like TcPatSynInfo.

 * Make TcIdSigInfo express more invariants by pushing the
   wildard info into TcIdSigBndr

 * Remove all special treatment of unification variables that arise
   from wildcards; so the TauTv of TcType.MetaInfo loses its Bool

A ton of konck on changes.  The result is significantly simpler, I think.

4 years agoMinor refactor to use filterInScope
Simon Peyton Jones [Wed, 5 Aug 2015 13:03:34 +0000 (14:03 +0100)] 
Minor refactor to use filterInScope

4 years agoComments only
Simon Peyton Jones [Wed, 5 Aug 2015 12:56:48 +0000 (13:56 +0100)] 
Comments only

4 years agoWarn about missed specialisations for imports
Simon Peyton Jones [Wed, 5 Aug 2015 12:37:18 +0000 (13:37 +0100)] 
Warn about missed specialisations for imports

This change was provoked by Trac #10720, where a missing
INLINEABLE pragma gave very poor performance.

The change is to warn when an imported function is not specialised
in a situation where the user expects it to be.

New flags

Documented in user manual.
See Note [Warning about missed specialisations]

4 years agoDo not complain about SPECIALISE for INLINE
Simon Peyton Jones [Wed, 5 Aug 2015 12:38:20 +0000 (13:38 +0100)] 
Do not complain about SPECIALISE for INLINE

Fixes Trac #10721.
See Note [SPECIALISE on INLINE functions]

4 years agoAllow proper errors/warnings in core2core passes
Simon Peyton Jones [Wed, 5 Aug 2015 12:31:48 +0000 (13:31 +0100)] 
Allow proper errors/warnings in core2core passes

This patch makes it possible for core-to-core passes to emit
proper error messages and warnings.

  * New function CoreMonad.warnMsg

  * CoreMonad.warnMsg and errorMsg now print a proper warning/error
    message heading.

  * CoreMonad carries a SrcSpan, which is used in warning/error
    messages.  It is initialised to be the source file name, but
    a core-to-core pass could set it more specifically if it had
    better location information.

There was a bit of plumbing needed to get the filename to the
right place.

4 years agoAdd Fixity info for infix types
RyanGlScott [Wed, 5 Aug 2015 12:24:08 +0000 (14:24 +0200)] 
Add Fixity info for infix types

Template Haskell allows reification of fixity for infix functions and
data constructors, and not for infix types. This adds a `Fixity` field
to the relevant `Info` constructors that can have infix types (`ClassI`,
`TyConI`, and `FamilyI`).

I don't think that `VarI` or `PrimTyConI` can be infix, but I could be

Test Plan: ./validate

Reviewers: austin, goldfire, bgamari

Reviewed By: goldfire, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10704

4 years agoAdditions to users' guide and release notes
RyanGlScott [Wed, 5 Aug 2015 12:23:32 +0000 (14:23 +0200)] 
Additions to users' guide and release notes

This makes two changes to the documentation:

* Adds a comment in the release notes about the ability to
  quote primitive chars and strings in TH (see D1054)
* Removes an outdated comment in the users' guide about TH not
  being able to handle `PartialTypeSignatures` (which was fixed in

Reviewers: goldfire, austin, simonpj, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie

Differential Revision:

4 years agoMake sure that `all`, `any`, `and`, and `or` fuse (#9848)
Takano Akio [Wed, 5 Aug 2015 12:23:22 +0000 (14:23 +0200)] 
Make sure that `all`, `any`, `and`, and `or` fuse (#9848)

Test Plan: validate

Reviewers: hvr, austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #9848

4 years agoMake Exception datatypes into newtypes
RyanGlScott [Wed, 5 Aug 2015 12:23:12 +0000 (14:23 +0200)] 
Make Exception datatypes into newtypes

Certain instances of `Exception` are simply datatypes with only one
argument, which should be `newtype`s.

Reviewers: ekmett, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10738

4 years agoMake -fcpr-off a dynamic flag
Christiaan Baaij [Wed, 5 Aug 2015 12:22:14 +0000 (14:22 +0200)] 
Make -fcpr-off a dynamic flag

Test Plan: validate

Reviewers: austin, goldfire, simonpj, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

GHC Trac Issues: #10706

4 years agoDrop custom mapM impl for []
Ben Gamari [Wed, 5 Aug 2015 12:21:47 +0000 (14:21 +0200)] 
Drop custom mapM impl for []

for motivation.

This fixes #10457

Test Plan: Validate

Reviewers: hvr, austin

Subscribers: simonmar, thomie, dolio

Differential Revision:

GHC Trac Issues: #10457

4 years agousers_guide: Add note about #367 to Bugs section
Ben Gamari [Wed, 5 Aug 2015 12:21:28 +0000 (14:21 +0200)] 
users_guide: Add note about #367 to Bugs section

This is a long-standing bug and should be mentioned in the users guide,
as noted in #10639.

Test Plan: Carefully check language.

Reviewers: simonpj, rwbarton, austin

Subscribers: rwbarton, thomie

Differential Revision:

GHC Trac Issues: #10639, #367

4 years agoAdd framework flags when linking a dynamic library
Christiaan Baaij [Wed, 5 Aug 2015 12:20:56 +0000 (14:20 +0200)] 
Add framework flags when linking a dynamic library

This fixes the GHC side of trac #10568. So `cabal install
--ghc-options="-framework GLUT" GLUT` creates a correctly linked
GLUT.dylib. We still need to explictly pass `--ghc-options="-framework
GLUT"` because the Cabal side #10568 is not fixed.

Update: the Cabal side of #10568 is fixed by

Test Plan: validate

Reviewers: austin, rwbarton, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

GHC Trac Issues: #10568

4 years agoPretty: use replicate for spaces and multi_ch (#10735)
Thomas Miedema [Tue, 4 Aug 2015 16:32:09 +0000 (18:32 +0200)] 
Pretty: use replicate for spaces and multi_ch (#10735)

Similar changes were made to pretty in commit

4 years agoPretty: mimic pretty API more closely (#10735)
Thomas Miedema [Tue, 4 Aug 2015 14:20:08 +0000 (16:20 +0200)] 
Pretty: mimic pretty API more closely (#10735)

Refactoring only. Nothing much to see here.

4 years agoPretty: use BangPatterns instead of manual unboxing Ints (#10735)
Thomas Miedema [Mon, 3 Aug 2015 18:16:58 +0000 (20:16 +0200)] 
Pretty: use BangPatterns instead of manual unboxing Ints (#10735)

Follow same style as libraries/pretty, although some of it is pretty
archaic, and could be improved with BangPatterns:
   * `get w _ | w == 0 && False = undefined`
   * `mkNest k _ | k `seq` False = undefined`

4 years agoPretty: Args of NilAbove/TextBeside/Nest/Union are always RDocs (#10735)
Thomas Miedema [Mon, 3 Aug 2015 17:34:36 +0000 (19:34 +0200)] 
Pretty: Args of NilAbove/TextBeside/Nest/Union are always RDocs (#10735)

Just following libraries/pretty.

4 years agoPretty: kill code that has been dead since 1997 (#10735)
Thomas Miedema [Mon, 3 Aug 2015 17:23:21 +0000 (19:23 +0200)] 
Pretty: kill code that has been dead since 1997 (#10735)

4 years agoPretty: remove superfluous parenthesis (#10735)
Thomas Miedema [Mon, 3 Aug 2015 16:57:06 +0000 (18:57 +0200)] 
Pretty: remove superfluous parenthesis (#10735)

4 years agoPretty: improve error messages (#10735)
Thomas Miedema [Mon, 3 Aug 2015 16:27:07 +0000 (18:27 +0200)] 
Pretty: improve error messages (#10735)

Again, following libraries/pretty.

4 years agoPretty: rename variables to the ones used by libraries/pretty (#10735)
Thomas Miedema [Mon, 3 Aug 2015 16:05:28 +0000 (18:05 +0200)] 
Pretty: rename variables to the ones used by libraries/pretty (#10735)

4 years agoPretty: reformat using style from libraries/pretty (#10735)
Thomas Miedema [Mon, 3 Aug 2015 14:36:42 +0000 (16:36 +0200)] 
Pretty: reformat using style from libraries/pretty (#10735)

This commit copies the code structure (what goes where), whitespace layout
and comments from libraries/pretty/src/Text/PrettyPrint/HughesPJ.hs,
with the intention to be able to later more easily compare the two
files, and port bug fixes.

I'm sorry this messes up git blame history, but there's no other way.

4 years agoTest #9233 in perf/compiler/T9233
Richard Eisenberg [Mon, 3 Aug 2015 15:11:04 +0000 (11:11 -0400)] 
Test #9233 in perf/compiler/T9233

Ideally, we could use Phab's numbers to set the perf
test correctly. But even if that's not possible, then I need help
writing my `all.T`. With the version you see here, I get the following

Traceback (most recent call last):
  File "/Users/rae/Documents/ghc-valid/testsuite/driver/", line 801, in do_test
    result = func(*[name,way] + args)
TypeError: multimod_compile() takes exactly 4 arguments (6 given)

I don't know how to fix this.

Test Plan: validate

Reviewers: austin, bgamari, thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9233

4 years agoFix #10713.
Richard Eisenberg [Mon, 3 Aug 2015 12:53:03 +0000 (08:53 -0400)] 
Fix #10713.

When doing the apartness/flattening thing, we really only need to
eliminate non-generative tycons, not *all* families. (Data families
are indeed generative!)

4 years agoRemoved deprecated syntax for GADT constuctors.
Ulya Trofimovich [Mon, 3 Aug 2015 15:45:56 +0000 (17:45 +0200)] 
Removed deprecated syntax for GADT constuctors.

Old syntax was deprecated 6 years ago in this commit
432b9c9322181a3644083e3c19b7e240d90659e7 by simonpj:"New syntax for
GADT-style record declarations, and associated refactoring" discussed
in Trac #3306.

This patch removes 2 reduce/reduce conflicts in parser. Conflicting
productions were:

    gadt_constr -> con_list '::' sigtype
    gadt_constr -> oqtycon '{' fielddecls '}' '::' sigtype

Recursive inlining of `con_list` and `oqtycon` helped reveal the

    gadt_constr -> '(' CONSYM ')' '::' sigtype
    gadt_constr -> '(' CONSYM ')' '{' fielddecls '}' '::' sigtype

between two types of GADT constructors (second form stands for
deprecated syntax).

Test Plan: `make fasttest`, one breakage TEST="records-fail" (parse
error instead of typecheck error due to removal of deprecated syntax).
Updated test.

Reviewers: simonmar, bgamari, austin, simonpj

Reviewed By: simonpj

Subscribers: thomie, mpickering, trofi

Differential Revision:

GHC Trac Issues: #3306

4 years agoCmmParse: Don't force alignment in memcpy-ish operations
Ben Gamari [Mon, 3 Aug 2015 13:31:03 +0000 (15:31 +0200)] 
CmmParse: Don't force alignment in memcpy-ish operations

This was initially made in 681973c31c614185229bdae4f6b7ab4f6e64753d.
Here I wanted to enforce that the alignment passed to %memcpy was a
constant expression, as this is required by LLVM. However, this breaks
the knot-tying done in `loopDecls`, causing T8131 to hang.

Here I remove the `seq` and mark T8131 as `expect_broken` in the case
of the NCG, which doesn't force the alignment in this case.

Fixes #10664.

4 years agoTypos in comments [skip ci]
Gabor Greif [Mon, 3 Aug 2015 11:38:48 +0000 (13:38 +0200)] 
Typos in comments [skip ci]

4 years agoSupport wild cards in data/type family instances
Thomas Winant [Mon, 3 Aug 2015 12:57:40 +0000 (14:57 +0200)] 
Support wild cards in data/type family instances

Handle anonymous wild cards in type or data family instance
declarations like
unnamed type variables. For instance (pun intented):

    type family F (a :: *) (b :: *) :: *
    type instance F Int _ = Int

Is now the same as:

    type family F (a :: *) (b :: *) :: *
    type instance F Int x = Int

Note that unlike wild cards in partial type signatures, no errors (or
with -XPartialTypeSignatures) are generated for these wild cards, as
there is
nothing interesting to report to the user, i.e. the inferred kind.

Only anonymous wild cards are supported here, named and
extra-constraints wild
card are not.

Test Plan: pass new tests

Reviewers: goldfire, austin, simonpj, bgamari

Reviewed By: simonpj, bgamari

Subscribers: goldfire, thomie

Differential Revision:

GHC Trac Issues: #3699, #10586

4 years ago4 reduce/reduce parser conflicts resolved
Ulya Trofimovich [Mon, 3 Aug 2015 12:56:16 +0000 (14:56 +0200)] 
4 reduce/reduce parser conflicts resolved

As GHC documentation (section 7.4.4, Type operators) says:
> "There is now some potential ambiguity in import and export lists;
for example if you write import M( (+) ) do you mean the function (+)
or the type constructor (+)? The default is the former, but with
-XExplicitNamespaces (which is implied by -XExplicitTypeOperators) GHC
allows you to specify the latter by preceding it with the keyword type"

Turns out this ambiguity causes 4 of 6 reduce/reduce conflicts in GHC
parser.  All 4 conflicts arise from a single production:

        :  qvar
        |  oqtycon

Recursive inlining of 'qvar' and 'oqtycon' helps reveal the faulty

        | '(' QVARSYM ')'
        | '(' VARSYM ')'
        | '(' '*'    ')'
        | '(' '-'    ')'

These productions can either be parsed as variable or type constructor,
but variable constuctor is always preferred. My patch removes ambiguity
while preserving the existing behaviour:

  - all unambigous productions are left as-is
  - ambigous productions for variable constuctors are left
  - ambigous productions for type constructors are removed (there's no
    way they could be triggered)

Updated comment.

Test Plan: Tested with 'make fasttest'

Reviewers: austin, simonpj, trofi, bgamari, simonmar

Reviewed By: trofi, bgamari, simonmar

Subscribers: thomie, mpickering

Projects: #ghc

Differential Revision:

4 years agoTest Trac #10134
Simon Peyton Jones [Mon, 3 Aug 2015 12:39:56 +0000 (13:39 +0100)] 
Test Trac #10134

4 years agoMinor improvement to user guide
Simon Peyton Jones [Mon, 3 Aug 2015 10:07:08 +0000 (11:07 +0100)] 
Minor improvement to user guide

Specify that the type variables for a class/instance decl scope
over the body even without a 'forall'.

Provoked by Trac #10722.

4 years agoTypos in comments
Simon Peyton Jones [Mon, 3 Aug 2015 10:04:22 +0000 (11:04 +0100)] 
Typos in comments

4 years agoFix incorrect stack pointer usage in StgRun() on x86_64
Ben Gamari [Mon, 3 Aug 2015 06:42:00 +0000 (08:42 +0200)] 
Fix incorrect stack pointer usage in StgRun() on x86_64

The STG_RETURN code from StgCRun.c is incorrect for x86_64 variants
where the ABI doesn't impose a mandatory red zone for the stack, like on
Windows or Xen/HaLVM. The current implementation restores the stack
pointer first, which effectively marks the area with the saved registers
as reusable. Later, the CPU registers are restored from this "free"

This ordering happens to work by accident on operating systems that
strictly adhere to the System V ABI, because any interrupt/signal
delivery is guaranteed to leave the first 128 bytes past the stack
pointer untouched (red zone). On other systems this might result in
corrupted CPU registers if an interruption happens just after restoring
the stack pointer.

The red zone is usually only used by small leaf functions to avoid
updates to the stack pointer and exploiting it doesn't give us any
advantage in this case.

Reviewers: austin, rwbarton

Reviewed By: rwbarton

Subscribers: thomie, simonmar

Differential Revision:

GHC Trac Issues: #10155

4 years agoUpdate parallel submodule, and re-enable warnings
Simon Marlow [Mon, 3 Aug 2015 06:41:45 +0000 (08:41 +0200)] 
Update parallel submodule, and re-enable warnings

Test Plan: using remote validate

Reviewers: austin, hvr, simonpj, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agoSupport MO_U_QuotRem2 in LLVM backend
Michal Terepeta [Mon, 3 Aug 2015 06:41:13 +0000 (08:41 +0200)] 
Support MO_U_QuotRem2 in LLVM backend

This adds support for MO_U_QuotRem2 in LLVM backend.  Similarly to
MO_U_Mul2 we use the standard LLVM instructions (in this case 'udiv'
and 'urem') but do the computation on double the word width (e.g., for
64-bit we will do them on 128 registers).

Test Plan: validate

Reviewers: rwbarton, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9430

4 years agoMake BranchFlag a new kind
Gabor Greif [Sat, 1 Aug 2015 08:52:39 +0000 (10:52 +0200)] 
Make BranchFlag a new kind

this is resolving an old TODO comment

4 years agoTypo in comment
Gabor Greif [Sun, 2 Aug 2015 17:26:04 +0000 (19:26 +0200)] 
Typo in comment

4 years agoReplace (SourceText,FastString) with StringLiteral data type
Alan Zimmerman [Sun, 2 Aug 2015 08:26:59 +0000 (10:26 +0200)] 
Replace (SourceText,FastString) with StringLiteral data type

Phab:D907 introduced SourceText for a number of data types, by replacing
FastString with (SourceText,FastString). Since this has an Outputable
instance, no warnings are generated when ppr is called on it, but
unexpected output is generated. See Phab:D1096 for an example of this.

Replace the (SourceText,FastString) tuples with a new data type,
data StringLiteral = StringLiteral SourceText FastString

Update haddock submodule accordingly

Test Plan: ./validate

Reviewers: hvr, austin, rwbarton, trofi, bgamari

Reviewed By: trofi, bgamari

Subscribers: thomie, trofi, rwbarton, mpickering

Differential Revision:

GHC Trac Issues: #10692

4 years agoTypos in comments
Gabor Greif [Sat, 1 Aug 2015 15:31:42 +0000 (17:31 +0200)] 
Typos in comments

4 years agoGive raise# a return type of open kind (#10481)
Reid Barton [Fri, 31 Jul 2015 21:09:45 +0000 (17:09 -0400)] 
Give raise# a return type of open kind (#10481)

Test Plan: validate

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #10481

4 years agoTypos in comments
Gabor Greif [Thu, 30 Jul 2015 22:37:34 +0000 (00:37 +0200)] 
Typos in comments

4 years agoRemove checked-in PDFs.
Edward Z. Yang [Fri, 31 Jul 2015 18:56:43 +0000 (11:56 -0700)] 
Remove checked-in PDFs.

Signed-off-by: Edward Z. Yang <>
4 years agoFix #7919 (again)
Simon Marlow [Thu, 30 Jul 2015 14:34:43 +0000 (07:34 -0700)] 
Fix #7919 (again)

The fix is a bit clunky, and is perhaps not the best fix, but I'm not
sure how much work it would be to fix it the other way (see comments
for more info).

Test Plan: T7919 doesn't crash

Reviewers: austin, rwbarton, ezyang, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #7919

4 years agoUser's guide: delete ancient "Core syntax" example
Thomas Miedema [Fri, 31 Jul 2015 15:15:10 +0000 (17:15 +0200)] 
User's guide: delete ancient "Core syntax" example

4 years agoBuild system: remove function keyword from (#10705)
Thomas Miedema [Fri, 31 Jul 2015 10:45:44 +0000 (12:45 +0200)] 
Build system: remove function keyword from (#10705)

This fixes the FreeBSD build.

4 years agoBackpack docs on renamer and depsolver, also s/package/unit/.
Edward Z. Yang [Fri, 31 Jul 2015 06:43:52 +0000 (23:43 -0700)] 
Backpack docs on renamer and depsolver, also s/package/unit/.

Signed-off-by: Edward Z. Yang <>
4 years agoTestsuite: T10245 is passing for WAY=ghci (#10245)
Thomas Miedema [Thu, 30 Jul 2015 23:08:09 +0000 (01:08 +0200)] 
Testsuite: T10245 is passing for WAY=ghci (#10245)

Needed to get closer to passing `validate --slow`.

4 years agoTestsuite: add typecheck/should_fail/T8034 (#8034)
Thomas Miedema [Mon, 27 Jul 2015 22:15:51 +0000 (00:15 +0200)] 
Testsuite: add typecheck/should_fail/T8034 (#8034)

4 years agoTestsuite: add typecheck/should_fail/T9260 (#9260)
Thomas Miedema [Mon, 27 Jul 2015 20:07:00 +0000 (22:07 +0200)] 
Testsuite: add typecheck/should_fail/T9260 (#9260)

4 years agoTestsuite: add arrows/should_compile/T5333 (#5333)
Thomas Miedema [Mon, 27 Jul 2015 19:46:26 +0000 (21:46 +0200)] 
Testsuite: add arrows/should_compile/T5333 (#5333)

4 years agoTestsuite: skip T10489 unless compiler_debugged (#10489)
Thomas Miedema [Thu, 30 Jul 2015 19:50:10 +0000 (21:50 +0200)] 
Testsuite: skip T10489 unless compiler_debugged (#10489)

4 years agoTestsuite: mark tests recently fixed as passing + accept new stderr
Thomas Miedema [Thu, 30 Jul 2015 19:58:32 +0000 (21:58 +0200)] 
Testsuite: mark tests recently fixed as passing + accept new stderr

Update submodule array.

4 years agoTestsuite: rename rename/should_fail/T5001 to T5001b (#5001)
Thomas Miedema [Thu, 30 Jul 2015 17:27:05 +0000 (19:27 +0200)] 
Testsuite: rename rename/should_fail/T5001 to T5001b (#5001)

Test names should be unique. This fixes a framework failure.

4 years agoFix comment that confused Haddock
Simon Peyton Jones [Thu, 30 Jul 2015 16:52:59 +0000 (17:52 +0100)] 
Fix comment that confused Haddock

I wish Haddock did not fall over when some random non-Haddock comment
contains *'s.  I got

  compiler/rename/RnBinds.hs:732:8: error:
    parse error on input ‘-- *are not* in scope in the SPECIALISE instance pramas; e.g.’

This patch says '-- /are not/ in scope...' to pacify Haddock.

4 years agoTypos in comments and strings
Gabor Greif [Thu, 30 Jul 2015 15:06:33 +0000 (17:06 +0200)] 
Typos in comments and strings

Note: the haddock comment in TyCon.hs seems to be
      garbled syntactically and grammatically

4 years agoImprove error message for newtypes and deriving clauses
John Wiegley [Thu, 30 Jul 2015 13:08:28 +0000 (15:08 +0200)] 
Improve error message for newtypes and deriving clauses

Change the error message generated when a deriving clause related to a newtype
fails to always suggested trying GeneralizedNewtypeDeriving, even in
situations where it may not work. Fixes #9600.

Test Plan: testsuite/deriving/should_fail/9600.hs

Reviewers: austin, bgamari, simonpj

Rebased-by: bgamari
Reviewed By: simonpj

Subscribers: bgamari, hvr, simonmar, carter

Differential Revision:

GHC Trac Issues: #9600

4 years agoFix misspelled function name in a comment
Bartosz Nitka [Thu, 30 Jul 2015 13:05:05 +0000 (15:05 +0200)] 
Fix misspelled function name in a comment

Test Plan: none

Reviewers: austin, simonmar, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

4 years agoMake headers C++ compatible (fixes #10700)
Alexey Shmalko [Thu, 30 Jul 2015 08:37:05 +0000 (10:37 +0200)] 
Make headers C++ compatible (fixes #10700)

Some headers used `new` as parameter name, which is reserved word in
C++. This patch changes these names to `new_`.

Test Plan: validate

Reviewers: austin, ezyang, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10700

4 years agoMake configure error out on missing ghc-tarballs on Windows
Tamar Christina [Thu, 30 Jul 2015 08:36:45 +0000 (10:36 +0200)] 
Make configure error out on missing ghc-tarballs on Windows

Currently checking out the source on windows requires two git
checkouts. One for the GHC sources and one for the GHC-tarballs.

This patch will make configure issue an error if compiling under
windows and the GHC-tarballs folder is missing.

On failure the user is told which command they need to run to get the
tarballs or if they want configure to handle it for them configure
provide the `--enable-tarballs-autodownload` flag.

Test Plan:
1. make sure ghc-tarballs folder is not present
2. run ./configure which should fail giving an error that tarballs is
missing and how to get it
3. run ./configure --enable-tarballs-autodownload and the tarballs
should be downloaded and configure finishes
4. rerun the command in 3, no new download should be done.
5. run configure without --enable-tarballs-autodownload, configure
should finish correctly.

Reviewers: bgamari, austin, thomie

Reviewed By: thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10705

4 years agoDon't allowInterrupt inside uninterruptibleMask
Ben Gamari [Mon, 27 Jul 2015 13:04:43 +0000 (15:04 +0200)] 
Don't allowInterrupt inside uninterruptibleMask

This fixes #9516.

Differential Revision:

Authored-by: Edsko de Vries <>
4 years agoFix missing files
Simon Peyton Jones [Thu, 30 Jul 2015 14:52:09 +0000 (15:52 +0100)] 
Fix missing files

These two testsuite files were correct in my build
tree but not in my source tree; apologies.

4 years agoBetter treatment of signatures in cls/inst
Simon Peyton Jones [Thu, 30 Jul 2015 14:06:55 +0000 (15:06 +0100)] 
Better treatment of signatures in cls/inst

The provoking cause for this patch is Trac #5001, comment:23.  There
was an INLINE pragma in an instance decl, that shouldn't be there.
But there was no complaint, just a  mysterious WARN later.

I ended up having to do some real refactoring but the result is,
I think, simpler and more robust.

4 years agoModify spec002 to be less trivial
Simon Peyton Jones [Tue, 28 Jul 2015 21:24:46 +0000 (22:24 +0100)] 
Modify spec002 to be less trivial

As it stood the main function in the test always returned
bottom, and GHC noticed that and therefore made no attempt
to optimise it, which rather negated the test.

This change makes it non-vacuous.

4 years agoThe parallel package has warnings
Simon Peyton Jones [Thu, 30 Jul 2015 10:01:55 +0000 (11:01 +0100)] 
The parallel package has warnings

This patch suppresses them until they are fixed

libraries/parallel/Control/Parallel/Strategies.hs:513:2: warning:
    Rule "parList/rseq" may never fire
      because ‘rseq’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘rseq’

libraries/parallel/Control/Parallel/Strategies.hs:582:1: warning:
    Rule "evalBuffer/rseq" may never fire
      because ‘rseq’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘rseq’

libraries/parallel/Control/Parallel/Strategies.hs:583:1: warning:
    Rule "parBuffer/rseq" may never fire
      because ‘rseq’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘rseq’

4 years agoFix Trac #10694: CPR analysis
Simon Peyton Jones [Wed, 29 Jul 2015 15:55:24 +0000 (16:55 +0100)] 
Fix Trac #10694: CPR analysis

In this commit
   commit 0696fc6d4de28cb589f6c751b8491911a5baf774
   Author: Simon Peyton Jones <>
   Date:   Fri Jun 26 11:40:01 2015 +0100

I made an error in the is_var_scrut tests in extendEnvForProdAlt.

This patch fixes it, thereby fixing Trac #10694.

4 years agoFix an outright error in competesWith
Simon Peyton Jones [Wed, 29 Jul 2015 15:43:29 +0000 (16:43 +0100)] 
Fix an outright error in competesWith

competesWith is a very recent function, introduced in:

  commit 2d88a531b7e4dbf4016dca4b1ba3b5dc34256cf4
  Author: Simon Peyton Jones <>
  Date:   Fri Jul 24 12:50:42 2015 +0100

      Improve warnings for rules that might not fire

4 years agoSpit out a little more info with -dppr-debug
Simon Peyton Jones [Wed, 29 Jul 2015 15:39:14 +0000 (16:39 +0100)] 
Spit out a little more info with -dppr-debug

4 years agoDefine DsUtils.mkCastDs and use it
Simon Peyton Jones [Wed, 29 Jul 2015 15:38:44 +0000 (16:38 +0100)] 
Define DsUtils.mkCastDs and use it

This change avoids a spurious WARNing from mkCast.  In the output of
the desugarer (only, I think) we can have a cast where the type of the
expression and cast don't syntactically match, because of an enclosing
type-let binding.

4 years agoDeal with phantom type variables in rules
Simon Peyton Jones [Wed, 29 Jul 2015 15:06:29 +0000 (16:06 +0100)] 
Deal with phantom type variables in rules

See Note [Unbound template type variables] in Rules.hs
This fixes Trac #10689.

The problem was a rule LHS that mentioned a type variable
in a phantom argument to a type synonym.  Then matching the
LHS didn't bind the type variable, and the rule matcher

This patch fixes the problem, as described by the Note.

I also went back to not-cloning the template varaibles during
rule matching.  I'm convinced that it's not necessary now
(if it ever was), and cloning makes the fix for #10689 much more

4 years agoComments only
Simon Peyton Jones [Wed, 29 Jul 2015 15:02:25 +0000 (16:02 +0100)] 
Comments only

4 years agoAdd a missing check for -fcpr-off
Reid Barton [Wed, 29 Jul 2015 16:27:50 +0000 (12:27 -0400)] 
Add a missing check for -fcpr-off

Test Plan: validate

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #10696

4 years agoEliminate zero_static_objects_list()
Simon Marlow [Tue, 28 Jul 2015 19:58:25 +0000 (20:58 +0100)] 
Eliminate zero_static_objects_list()

[Revised version of D1076 that was committed and then backed out]

In a workload with a large amount of code, zero_static_objects_list()
takes a significant amount of time, and furthermore it is in the
single-threaded part of the GC.

This patch uses a slightly fiddly scheme for marking objects on the
static object lists, using a flag in the low 2 bits that flips between
two states to indicate whether an object has been visited during this
GC or not.  We also have to take into account objects that have not
been visited yet, which might appear at any time due to runtime linking.

Test Plan: validate

Reviewers: austin, ezyang, rwbarton, bgamari, thomie

Reviewed By: bgamari, thomie

Subscribers: thomie

Differential Revision:

4 years agoFallout from more assiduous RULE warnings
Simon Peyton Jones [Tue, 28 Jul 2015 15:00:20 +0000 (16:00 +0100)] 
Fallout from more assiduous RULE warnings

GHC now warns if rules compete, so that it's not predicatable
which will work and which will not. E.g.

  f (g x) = ...
  g True  = ...

If we had (f (g True)) it's not clear which rule would fire.

This showed up fraility in the libraries.

* Suppress warnigns in Control.Arrow, Control.Category for class
  methods. At the moment we simply don't have a good way to write a
  RULE with a class method in the LHS.  See Trac #1595.  Arrow and
  Category attempt to do so; I have silenced the complaints with
  -fno-warn-inline-rule-shadowing, but it's not a great solution.

* Adjust the NOINLINE pragma on '' to account for the
  map/coerce rule

* Adjust the rewrite rules in Enum, especially for the "literal 1"
  case.  See Note [Enum Integer rules for literal 1].

* Suppress warnings for 'bytestring' e.g.
   libraries/bytestring/Data/ByteString.hs:895:1: warning:
      Rule "ByteString specialise break (x==)" may never fire
        because rule "Class op ==" for ‘==’ might fire first
      Probable fix: add phase [n] or [~n] to the competing rule