User guide typo: Missing ) in #language-pragma
Fix AMP warnings.

Authored-by: David Luposchainsky <dluposchainsky@gmail.com>
Signed-off-by: Austin Seipp <austin@well-typed.com>
Implement the AMP warning (#8004)

This patch implements a warning when definitions conflict with the
Applicative-Monad Proposal (AMP), described in #8004. Namely, this will
cause a warning iff:

    * You have an instance of Monad, but not Applicative
    * You have an instance of MonadPlus, but not Alternative
    * You locally defined a function named join, <*>, or pure.

In GHC 7.10, these warnings will actually be enforced with superclass
constraints through changes in base, so programs will fail to compile
then.

This warning is enabled by default. Unfortunately, not all of
our upstream libraries have accepted the appropriate patches. So we
temporarily fix ./validate by ignoring the AMP warning.

Dan Rosén made an initial implementation of this change, and the
remaining work was finished off by David Luposchainsky. I finally made
some minor refactorings.

Authored-by: Dan Rosén <danr@chalmers.se>
Authored-by: David Luposchainsky <dluposchainsky@gmail.com>
Signed-off-by: Austin Seipp <austin@well-typed.com>
Add missing semicolon in rts/Linker.c (#8271)

And remove some trailing whitespaces from that file.
Improve sinking pass

This commit does two things:

  * Allows duplicating of global registers and literals by inlining
    them. Previously we would only inline global register or literal
    if it was used only once.

  * Changes method of determining conflicts between a node and an
    assignment. New method has two advantages. It relies on
    DefinerOfRegs and UserOfRegs typeclasses, so if a set of registers
    defined or used by a node should ever change, `conflicts` function
    will use the changed definition. This definition also catches
    more cases than the previous one (namely CmmCall and CmmForeignCall)
    which is a step towards making it possible to run sinking pass
    before stack layout (currently this doesn't work).

This patch also adds a lot of comments that are result of about two-week
long investigation of how sinking pass works and why it does what it does.
Add support for evaluation of type-level natural numbers.

This patch implements some simple evaluation of type-level expressions
featuring natural numbers.  We can evaluate *concrete* expressions that
use the built-in type families (+), (*), (^), and (<=?), declared in
GHC.TypeLits.   We can also do some type inference involving these
functions.  For example, if we encounter a constraint such as `(2 + x) ~ 5`
we can infer that `x` must be 3.  Note, however, this is used only to
resolve unification variables (i.e., as a form of a constraint improvement)
and not to generate new facts.  This is similar to how functional
dependencies work in GHC.

The patch adds a new form of coercion, `AxiomRuleCo`, which makes use
of a new form of axiom called `CoAxiomRule`.  This is the form of evidence
generate when we solve a constraint, such as `(1 + 2) ~ 3`.

The patch also adds support for built-in type-families, by adding a new
form of TyCon rhs: `BuiltInSynFamTyCon`.  such built-in type-family
constructors contain a record with functions that are used by the
constraint solver to simplify and improve constraints involving the
built-in function (see `TcInteract`).  The record in defined in `FamInst`.

The type constructors and rules for evaluating the type-level functions
are in a new module called `TcTypeNats`.
Fix static GHCi build (#8270)

When Ryan merged in the atomics branch, he made atomic_inc and
atomic_dec EXTERN_INLINE functions, meaning their definitions
became part of object files in the non-threaded build, instead of being
inlined. As a result, this broke the linker for static GHCi, since it
couldn't properly resolve the now-externally defined functions.

Signed-off-by: Austin Seipp <austin@well-typed.com>
Rename -ddump-cmm-rewrite to -ddump-cmm-sink

This makes it consistent with the corresponding -cmm-sink flag
Replace reference to `Data.Generics` with `Data.Data`

The `Data` definitions were moved from `Data.Generics` to
`Data.Data` via [5a9e76d24776608a3e14ba94f1dfa0cac072c251/base]

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Missing printf path format change
Update Cabal to current upstream `1.18` branch tip

The new commits inlcude AMP-warning fixes and support
for the new `instance Data Data.Version` provided by `base`
Release note for new `instance Data Data.Version`

Implemented in [e17549c80425f3c8a8a672c65bbff00290839f3c/base]

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Allow primclass and class constraints in primops

In preparation for the primitive class Coercible
Expose more in the TcS monad

in preparation for the Coercible class implementation.
Outputable.isOrAre: "is" or "are" for correct grammar
Expose tcTyConsOfType as Types.tyConsOfType

and add related function tyConsOfTyCon.
Introduce coerce :: Coercible a b -> a -> b

This is the result of the design at
http://ghc.haskell.org/trac/ghc/wiki/NewtypeWrappers

The goal is to be able to convert between, say [First Int] and [Last
Int] with zero run-time overhead. To that end, we introduce a special
two parameter type class Coercible whose instances are created
automatically and on-the fly. This relies on and exploits the recent
addition of roles to core.
Fix rebase fallout

To push what was validated, not just what was commited.
Implement .init/.init_array support for ELF.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
Implement .ctor support for PEi386.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>