ghc.git
2 years agovalidate: Clean GMP trees
Ben Gamari [Wed, 5 Apr 2017 01:47:05 +0000 (21:47 -0400)] 
validate: Clean GMP trees

For reasons unknown `validate` passed `NO_CLEAN_GMP=YES` to
`maintainer-clean`, leaving a stale `gmp.h` which causes the build to
fail in the event that the uses a tree for validating for two different
target platforms. This is quite unexpected, don't do it.

Reviewers: hvr, austin, rwbarton, dfeuer

Reviewed By: dfeuer

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3409

2 years agoAdd regression test for #7944
Ryan Scott [Wed, 5 Apr 2017 01:46:55 +0000 (21:46 -0400)] 
Add regression test for #7944

Commit b8b3e30a6eedf9f213b8a718573c4827cfa230ba happened to fix the bug
reported in #7944. Let's add a regression test so that it stays that
way.

Fixes #7944.

Test Plan: make test TEST=T7944

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3404

2 years agoUse strict types and folds in CoreStats
Reid Barton [Wed, 5 Apr 2017 01:46:45 +0000 (21:46 -0400)] 
Use strict types and folds in CoreStats

This only has a significant effect when compiling with -v
(or -dshow-passes), but still there's no reason not to do it.

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3401

2 years agobase: Add test for #8684
Ben Gamari [Wed, 5 Apr 2017 00:48:35 +0000 (20:48 -0400)] 
base: Add test for #8684

Reviewers: austin, hvr

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3420

2 years agobase: Add test for #13525
Ben Gamari [Wed, 5 Apr 2017 00:48:20 +0000 (20:48 -0400)] 
base: Add test for #13525

Reviewers: austin, hvr

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3419

2 years agotestsuite: Add test for #13524
Ben Gamari [Wed, 5 Apr 2017 00:47:20 +0000 (20:47 -0400)] 
testsuite: Add test for #13524

Reviewers: austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3418

2 years agotestsuite: Bump up timeout multiplier on T11195
Ben Gamari [Tue, 4 Apr 2017 22:04:07 +0000 (18:04 -0400)] 
testsuite: Bump up timeout multiplier on T11195

This has been failing a bit too often (on CI machines under load).

2 years agorts: Fix lingering #ifs
Ben Gamari [Tue, 4 Apr 2017 20:15:32 +0000 (16:15 -0400)] 
rts: Fix lingering #ifs

These were missed in D3278.

2 years agoEnable new warning for fragile/incorrect CPP #if usage
Erik de Castro Lopo [Tue, 4 Apr 2017 19:53:46 +0000 (05:53 +1000)] 
Enable new warning for fragile/incorrect CPP #if usage

The C code in the RTS now gets built with `-Wundef` and the Haskell code
(stages 1 and 2 only) with `-Wcpp-undef`. We now get warnings whereever
`#if` is used on undefined identifiers.

Test Plan: Validate on Linux and Windows

Reviewers: austin, angerman, simonmar, bgamari, Phyx

Reviewed By: bgamari

Subscribers: thomie, snowleopard

Differential Revision: https://phabricator.haskell.org/D3278

2 years agoHACKING: Update for Phabricator patch workflow
Ben Gamari [Tue, 4 Apr 2017 16:07:25 +0000 (12:07 -0400)] 
HACKING: Update for Phabricator patch workflow

2 years agoRevert "Make raiseIO# produce topRes"
David Feuer [Tue, 4 Apr 2017 02:25:55 +0000 (22:25 -0400)] 
Revert "Make raiseIO# produce topRes"

This reverts commit da4687f63ffe5a6162e3d7856aa53de048dd0f42.

It's not entirely trivial to clean up the dead code this patch
introduced. In particular, when we see

```
case raiseIO# m s of
  s' -> e
```

we want to know that `e` is dead. For scrutinees that are properly
bottom (which we don't want to consider `raiseIO# m s` to be, this
is handled by rewriting `bot` to `case bot of {}`. But if we do
that for `raiseIO#`, we end up with

```
case raiseIO# m s of {}
```

which looks a lot like bottom and could confuse demand analysis.
I think we need to wait with this change until we have a more
complete story.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3413

2 years agocompact: Clarify mutability restriction
Ben Gamari [Mon, 3 Apr 2017 23:27:59 +0000 (19:27 -0400)] 
compact: Clarify mutability restriction

Fixes #13508.

[skip ci]

Test Plan: Read it

Reviewers: austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3407

2 years agoBump Win32 submodule
Ben Gamari [Mon, 3 Apr 2017 23:00:33 +0000 (19:00 -0400)] 
Bump Win32 submodule

Fixes #13514.

2 years agohp2ps: install shell wrapper
Sergei Trofimovich [Mon, 3 Apr 2017 07:55:04 +0000 (08:55 +0100)] 
hp2ps: install shell wrapper

Before this change we installed hp2ps both
to inplace/bin/ and ${prefix}/bin/

In both cases we added $(CrossCompilePrefix) as
a binary prefix. It's incorrect for inplace install
as none of inplace binaries are prefixed.

The change it to track 'hp2ps' as unprefixed binary.
$(CrossCompilePrefix) prefix is only added to the
installed shell wrapper.

Now 'hp2ps' is handled in a similar way to 'hpc' and
'ghc-pkg'.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2 years agoFix validate.
Edward Z. Yang [Mon, 3 Apr 2017 09:21:09 +0000 (02:21 -0700)] 
Fix validate.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agotestsuite: Classify missing expected perf numbers as merely warnings
Ben Gamari [Sun, 2 Apr 2017 21:20:34 +0000 (17:20 -0400)] 
testsuite: Classify missing expected perf numbers as merely warnings

Previously these were considered to be framework failures, meaning that validate
would fail. For better or worse, Windows lacks a good number of metrics and I
don't see this changing any time soon. Let's consider these to be non-fatal.

2 years agoVarious testsuite fixes for 32-bit Windows
Ben Gamari [Sun, 2 Apr 2017 21:10:48 +0000 (17:10 -0400)] 
Various testsuite fixes for 32-bit Windows

2 years agorts: Make out-of-memory errors more consistent
Ben Gamari [Sun, 2 Apr 2017 23:15:45 +0000 (19:15 -0400)] 
rts: Make out-of-memory errors more consistent

This will make it a bit easier to maintain consistent output in the testsuite.

2 years agoarray: Clear up inconsistency in T9220 output
Ben Gamari [Sun, 2 Apr 2017 17:04:26 +0000 (13:04 -0400)] 
array: Clear up inconsistency in T9220 output

ghc-8.2 and master disagreed on the order of the instances. Normalise this
difference away.

Updates array submodule.

2 years agoCorrectly handle wired in unit IDs in -instantiated-with
Edward Z. Yang [Sun, 26 Mar 2017 21:06:12 +0000 (14:06 -0700)] 
Correctly handle wired in unit IDs in -instantiated-with

Summary:
To handle wired in packages, we must rewrite all occurrences
of unit ids like base-4.9.0.0 to base.  However, I forgot
to do this on unit ids that occurred in unit identifiers
passed via -instantiated-with.  This patch handles that case,
plus a test.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3385

2 years agoBetter test coverage for module reexports in signatures.
Edward Z. Yang [Tue, 28 Mar 2017 17:21:15 +0000 (10:21 -0700)] 
Better test coverage for module reexports in signatures.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoExtra docs on tcg_imports.
Edward Z. Yang [Tue, 28 Mar 2017 17:20:44 +0000 (10:20 -0700)] 
Extra docs on tcg_imports.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoExtra docs on exports_from_avail.
Edward Z. Yang [Tue, 28 Mar 2017 17:20:19 +0000 (10:20 -0700)] 
Extra docs on exports_from_avail.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoAdd more documentation on mergeSignatures.
Edward Z. Yang [Tue, 28 Mar 2017 03:00:53 +0000 (20:00 -0700)] 
Add more documentation on mergeSignatures.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agomk/boilerplate.mk defines STAGE1_GHC, not GHC_STAGE1.
Edward Z. Yang [Sun, 26 Mar 2017 21:40:29 +0000 (14:40 -0700)] 
mk/boilerplate.mk defines STAGE1_GHC, not GHC_STAGE1.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoFix recompilation avoidance bug for implementor of hsig.
Edward Z. Yang [Sun, 26 Mar 2017 05:50:55 +0000 (22:50 -0700)] 
Fix recompilation avoidance bug for implementor of hsig.

Summary:
I observed a bug where if I modified the module which implemented
an hsig in another package, GHC would not recompile the signature
in this situation.

The root cause was that we were conflating modules from user
imports, and "system" module dependencies (from signature
merging and instantiation.) So this patch handles them separately.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, bgamari, austin

Subscribers: rwbarton, thomie, snowleopard

Differential Revision: https://phabricator.haskell.org/D3381

2 years agoMinor comment updates on CSE.
Edward Z. Yang [Thu, 23 Mar 2017 02:22:02 +0000 (19:22 -0700)] 
Minor comment updates on CSE.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoDerive the definition of null
David Feuer [Sun, 2 Apr 2017 20:20:20 +0000 (16:20 -0400)] 
Derive the definition of null

We can sometimes produce much better code by deriving the
definition of `null` rather than using the default. For example,
given

    data SnocList a = Lin | Snoc (SnocList a) a

the default definition of `null` will walk the whole list, but of
course we can stop as soon as we see `Snoc`. Similarly, if a
constructor contains some other `Foldable` type, we want to use its
`null` rather than folding over the structure.

Partially fixes Trac #13280

Reviewers: austin, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3402

2 years agoconfigure.ac: add aarch64 to list of registerised
Sergei Trofimovich [Sun, 2 Apr 2017 19:56:40 +0000 (20:56 +0100)] 
configure.ac: add aarch64 to list of registerised

Similar to 'arm' 'aarch64' has working llvm codegen,
no need to fallback to unregisterised buld by default.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2 years agoconfigure.ac: fix NCG support in --target=
Sergei Trofimovich [Sun, 2 Apr 2017 18:38:23 +0000 (19:38 +0100)] 
configure.ac: fix NCG support in --target=

Before this change attempt to build a crosscompiler
on registerised platform (--host=x86_64-pc-linux-gnu)
targeting UNREG platform failed:
    $ ./configure --target=ia64-unknown-linux-gnu

  utils/genapply/../../includes/stg/MachRegs.h:608:2: error:
     #error Cannot find platform to give register info for

The change is to check --target= for NCG availability,
not --host=.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2 years agoUpdate containers submodule to official 0.5.10.2
David Feuer [Sun, 2 Apr 2017 18:39:15 +0000 (14:39 -0400)] 
Update containers submodule to official 0.5.10.2

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3406

2 years agoAdd a perf test for deriving null
David Feuer [Sun, 2 Apr 2017 16:44:07 +0000 (12:44 -0400)] 
Add a perf test for deriving null

Deriving null even helps for a simple list-like type,
presumably because we don't perform the static argument
transformation. Adding this test before the null deriving
patch should give a proper baseline.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3408

2 years agotestsuite: Fix GhciCurDir test
Ben Gamari [Sun, 2 Apr 2017 16:05:09 +0000 (12:05 -0400)] 
testsuite: Fix GhciCurDir test

This was horribly, horribly wrong.

2 years ago:cd affects the iserv process too
Simon Marlow [Sun, 2 Apr 2017 14:43:32 +0000 (10:43 -0400)] 
:cd affects the iserv process too

Test Plan: validate

Reviewers: angerman, austin, bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3395

2 years agoReport heap overflow in the same way as stack overflow
Simon Marlow [Sat, 1 Apr 2017 23:52:40 +0000 (19:52 -0400)] 
Report heap overflow in the same way as stack overflow

Now that we throw an exception for heap overflow, we should only print
the heap overflow message in the main thread when the HeapOverflow
exception is caught, rather than as a side effect in the GC.

Stack overflows were already done this way, I just made heap overflow
consistent with stack overflow, and did some related cleanup.

Fixes broken T2592(profasm) which was reporting the heap overflow
message twice (you would only notice when building with profiling
libs enabled).

Test Plan: validate

Reviewers: bgamari, niteria, austin, DemiMarie, hvr, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3394

2 years agoFastMutInt: fix Int and Ptr sizes when crosscompiling
Sergei Trofimovich [Sun, 2 Apr 2017 15:12:18 +0000 (16:12 +0100)] 
FastMutInt: fix Int and Ptr sizes when crosscompiling

Similar to
  https://ghc.haskell.org/trac/ghc/ticket/13491
  https://phabricator.haskell.org/D3122

SIZEOF_HSINT and SIZEOF_VOID_P are sizes of
target platform. These values are usually
not correct when stage1 is built.

It means the code

```haskell
  newFastMutInt = IO $ \s ->
   case newByteArray# size s of { (# s, arr #) ->
   (# s, FastMutInt arr #) }
   where !(I# size) = SIZEOF_HSINT
```
would try to allocate only 4 bytes on 64-bit-host
targeting 32-bit system.

It does not matter in practice as newByteArray#
implementation rounds up passed value to host's
word size. But one day it might not.

To prevent this class of problems in compiler/
directory 'MachDeps.h' contents is hidden when
ghc-stage1 (-DSTAGE=1) is built.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Reviewers: austin, rwbarton, simonmar, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3405

2 years agocompiler/ghc.mk: fix GhcWithInterpreter=NO build failure
Sergei Trofimovich [Sun, 2 Apr 2017 13:01:19 +0000 (14:01 +0100)] 
compiler/ghc.mk: fix GhcWithInterpreter=NO build failure

When GhcWithInterpreter=NO is set in mk/build.mk build
fails as:

    $ inplace/bin/dll-split compiler/stage2/build/.depend-v-dyn.haskell "DynFlags" ...
    Reachable modules from DynFlags out of date
    Please fix compiler/ghc.mk, or building DLLs on Windows may break (#7780)
    Extra modules: ByteCodeTypes InteractiveEvalTypes

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2 years agoStamp out space leaks from demand analysis
Reid Barton [Sat, 1 Apr 2017 15:51:59 +0000 (11:51 -0400)] 
Stamp out space leaks from demand analysis

This reduces peak memory usage by ~30% on my test case (DynFlags),
and (probably as a result of reduced GC work) decreases compilation
time by a few percent as well.

Also fix a bug in seqStrDmd so that demeand info is fully evaluated.

Reviewers: simonpj, austin, bgamari

Reviewed By: bgamari

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D3400

2 years agoOptimise common cases of GHC.setProgramDynFlags
Simon Marlow [Sat, 1 Apr 2017 15:51:43 +0000 (11:51 -0400)] 
Optimise common cases of GHC.setProgramDynFlags

* If the package flags haven't changed, don't do initPackages (which
  might take multiple seconds in extreme cases)

* Provide a way to change the log_action without invalidating the
  summary cache.

Test Plan: validate

Reviewers: niteria, bgamari, austin, erikd, ezyang

Reviewed By: bgamari

Subscribers: mpickering, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3392

2 years agoDon't derive showList
David Feuer [Sat, 1 Apr 2017 15:12:31 +0000 (11:12 -0400)] 
Don't derive showList

There's no obvious reason to derive the definition of `showList`,
manually inlining the default definition. Let's just use
the default definition in the usual manner.

Garbage collect a few unused `RdrNames` from `PrelNames`:
`showList`, `showList__`, and `/=`.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3403

2 years agotestsuite: Add regression test for #13474
Ben Gamari [Sat, 1 Apr 2017 14:59:53 +0000 (10:59 -0400)] 
testsuite: Add regression test for #13474

2 years agorts: print incorrect prev_what_next
Sergei Trofimovich [Sat, 1 Apr 2017 10:58:55 +0000 (11:58 +0100)] 
rts: print incorrect prev_what_next

Moritz Angermann reports mysterious rts crash:
  A: link: internal error: schedule: invalid what_next field
  A:     (GHC version 8.3.20170321 for arm_none_linux_android)

This change prints actual prev_what_next value.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2 years agoUNREG: ignore -fllvm (Trac #13495)
Sergei Trofimovich [Sat, 1 Apr 2017 09:35:52 +0000 (10:35 +0100)] 
UNREG: ignore -fllvm (Trac #13495)

Unregisterised GHC can only use C as a target backend
(option used to be called -fvia-C). -fasm option was
ignored with a warhing, but not -fllvm.

jms noticed the failure when tried to use quick-cross
build flavour. quick-cross enables -fllvm in makefile.

  "inplace/bin/ghc-stage1" ... -fllvm
  ghc-stage1: panic! (the 'impossible' happened)
    (GHC version 8.0.2 for powerpc-unknown-linux):
          LlvmCodeGen.Ppr: Cross compiling without valid target info.

This change ignores -fllvm as well.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2 years agoRemove Core Lint pass on occurrence analysis output (#13220)
Reid Barton [Sat, 1 Apr 2017 02:48:14 +0000 (22:48 -0400)] 
Remove Core Lint pass on occurrence analysis output (#13220)

It was expensive, as the simplifier runs for many iterations,
and probably not very useful.

Test Plan: harbormaster

Reviewers: austin, bgamari, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D3391

2 years agoaskCc should be using the linker, not the compiler
Simon Marlow [Sat, 1 Apr 2017 02:47:47 +0000 (22:47 -0400)] 
askCc should be using the linker, not the compiler

When GHCi tries to find a shared lib, it calls "gcc --print-file-name"
to ask gcc where to find it.  But since we're looking for libraries,
we're really using the linker here, not the C compiler, so we should be
respecting the values of -pgml and -optl rather than -pgmc and -optc.

Test Plan: validate

Reviewers: bgamari, niteria, austin, hvr, erikd

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3393

2 years agotestsuite: Update Windows allocations for T12234
Ben Gamari [Sat, 1 Apr 2017 02:32:21 +0000 (22:32 -0400)] 
testsuite: Update Windows allocations for T12234

2 years agoFix space leaks in simplifier (#13426)
Reid Barton [Fri, 31 Mar 2017 15:37:38 +0000 (11:37 -0400)] 
Fix space leaks in simplifier (#13426)

The Join points commit (8d5cf8bf) introduced a space leak
somewhere in the simplifier. The extra strictness added in this commit
fixes the leak. Unfortunately I don't really understand the details.

Unfortunately, the extra strictness appears to result in more overall
allocations in some cases, even while the peak heap size decreases in others.

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3399

2 years agoClean up coreView/tcView.
Ben Gamari [Mon, 27 Mar 2017 17:17:00 +0000 (13:17 -0400)] 
Clean up coreView/tcView.

In Core, Constraint should be considered fully equal to
TYPE LiftedRep, in all ways. Accordingly, coreView should
unwrap Constraint to become TYPE LiftedRep. Of course, this
would be a disaster in the type checker.

So, where previously we used coreView in both the type checker
and in Core, we now have coreView and tcView, which differ only
in their treatment of Constraint.

Historical note: once upon a past, we had tcView distinct from
coreView. Back then, it was because newtypes were unwrapped in
Core but not in the type checker. The distinction is back, but
for a different reason than before.

This had a few knock-on effects:

 * The Typeable solver must explicitly handle Constraint to ensure
   that we produce the correct evidence.

 * TypeMap now respects the Constraint/Type distinction

Finished by: bgamari

Test Plan: ./validate

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3316

2 years agoRefactor simplExpr (Type ty)
Simon Peyton Jones [Fri, 31 Mar 2017 16:48:10 +0000 (17:48 +0100)] 
Refactor simplExpr (Type ty)

This small refactoring, provoked by comment:18 on Trac #13426,
makes it so that simplExprF never gets a (Type ty) expression to
simplify, which in turn means that calls to exprType on its argument
will always succeed.

No change in behaviour.

2 years agoDisable bogus lint checks about levity polimorphic coerions
Joachim Breitner [Fri, 31 Mar 2017 13:47:06 +0000 (09:47 -0400)] 
Disable bogus lint checks about levity polimorphic coerions

These checks, introduced in cea7141851ce653cb20207da3591d09e73fa396d
hugely inflated build logs, which incapitated perf.haskell.org.

According to Richard, the checks are useless and wrong, and that Ben
plans to investigate.
(https://phabricator.haskell.org/rGHCcea7141851ce653cb20207da3591d09e73fa396d#64647)

Until that happens, I remove them from the code.

2 years agoDeriving for phantom and empty types
David Feuer [Thu, 30 Mar 2017 17:30:52 +0000 (13:30 -0400)] 
Deriving for phantom and empty types

Make `Functor`, `Foldable`, and `Traversable` take advantage
of the case where the type parameter is phantom. In this case,

* `fmap _ = coerce`
* `foldMap _ _ = mempty`
* `traverse _ x = pure (coerce x)`

For the sake of consistency and especially simplicity, make other types
with no data constructors behave the same:

* `fmap _ x = case x of`
* `foldMap _ _ = mempty`
* `traverse _ x = pure (case x of)`

Similarly, for `Generic`,

* `to x = case x of`
* `from x = case x of`

Give all derived methods for types without constructors appropriate
arities. For example,

```
    compare _ _ = error ...
```

rather than

```
    compare = error ...
```

Fixes #13117 and #13328

Reviewers: austin, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: ekmett, RyanGlScott, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3374

2 years agoTypos in comments [ci skip]
Gabor Greif [Wed, 29 Mar 2017 13:34:32 +0000 (15:34 +0200)] 
Typos in comments [ci skip]

2 years agounique: fix UNIQUE_BITS crosscompilation (Trac #13491)
Sergei Trofimovich [Wed, 29 Mar 2017 21:30:50 +0000 (17:30 -0400)] 
unique: fix UNIQUE_BITS crosscompilation (Trac #13491)

The #13491 manifests best when we try to crosscompile
from 32-bit (i386-linux) to 64-bit (powerpc64-linux)
system:
    ./configure --target=powerpc64-unknown-linux-gnu

The build fails at assembly time:
  "inplace/bin/ghc-stage1" ...  -c rts/StgStartup.cmm
    /tmp/ghc19687_0/ghc_4.s: Assembler messages:

    /tmp/ghc19687_0/ghc_4.s:11:0: error:
         Error: unknown pseudo-op: `.l'
       |
    11 | .L<\x00>4:
       | ^

That happens because UNIQUE_BITS is defined in terms
of WORD_SIZE_IN_BITS macro:
    #define UNIQUE_BITS (WORD_SIZE_IN_BITS - 8)

WORD_SIZE_IN_BITS is 64 bits (equals to target value)
while ghc-stage1 is still running on i386-linux

The fix is to stop relying on target macros and use
host's 'sizeof (HsInt)' and 'finiteBitSize' way to
determine unique layout.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: build i386-to-powerpc64 crosscompiler

Reviewers: rwbarton, austin, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, thomie

Differential Revision: https://phabricator.haskell.org/D3397

2 years agoShow valid substitutions for typed holes
Matthías Páll Gissurarson [Wed, 29 Mar 2017 21:30:28 +0000 (17:30 -0400)] 
Show valid substitutions for typed holes

The idea is to implement a mechanism similar to PureScript, where they
suggest which identifiers in scope would fit the given hole. In
PureScript, they use subsumption (which is what we would like here as
well). For subsumption, we would have to check each type in scope
whether the hole is a subtype of the given type, but that would require
`tcSubType` and constraint satisfiability checking. Currently,
`TcSimplify` uses a lot of functions from `TcErrors`, so that would
require more of a rewrite, I will hold on with that for now, and submit
the more simpler type equality version.

As an example, consider

```
ps :: String -> IO ()
ps = putStrLn

ps2 :: a -> IO ()
ps2 _ = putStrLn "hello, world"

main :: IO ()
main = _ "hello, world"
```

The results would be something like

```
    • Found hole: _ :: [Char] -> IO ()
    • In the expression: _
      In a stmt of a 'do' block: _ "hello, world"
      In the expression:
        do _ "hello, world"
    • Relevant bindings include
        main :: IO () (bound at test.hs:13:1)
        ps :: String -> IO () (bound at test.hs:7:1)
        ps2 :: forall a. a  -> IO () (bound at test.hs:10:1)
      Valid substitutions include
        putStrLn :: String
                    -> IO () (imported from ‘Prelude’ at
test.hs:1:1-14
                              (and originally defined in
‘System.IO’))
        putStr :: String
                  -> IO () (imported from ‘Prelude’ at
test.hs:1:1-14
                            (and originally defined in ‘System.IO’))
```

We'd like here for ps2 to be suggested as well, but for that we require
subsumption.

Reviewers: austin, bgamari, dfeuer, mpickering

Reviewed By: dfeuer, mpickering

Subscribers: mpickering, Wizek, dfeuer, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3361

2 years agoVarious patches to support android cross compilation
Moritz Angermann [Wed, 29 Mar 2017 21:29:58 +0000 (17:29 -0400)] 
Various patches to support android cross compilation

- Better test for SHT_INIT_ARRAY than openbsd_HOST_OS
  This is actually bens patch:
  https://gist.github.com/bgamari/c846e6a5f2cd988716cd5e36c68d5bef
- linux-android defines.
- No need for -lpthread on OSAndroid
  However, I’m confused why we do not use the AC NEED_PTHREAD_LIB
  value here?
- Use mmap on android
- Support `none` vendor.

Reviewers: austin, hvr, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: rwbarton, thomie, erikd

Differential Revision: https://phabricator.haskell.org/D3356

2 years agoCheck TargetPlatform instead of HostPlatform for leading underscore
Moritz Angermann [Wed, 29 Mar 2017 21:28:16 +0000 (17:28 -0400)] 
Check TargetPlatform instead of HostPlatform for leading underscore

Reviewers: austin, hvr, rwbarton, bgamari

Reviewed By: rwbarton, bgamari

Subscribers: rwbarton, thomie, erikd

Differential Revision: https://phabricator.haskell.org/D3348

2 years agoAllow operators as record pattern synonym fields
Matthew Pickering [Wed, 29 Mar 2017 20:09:08 +0000 (16:09 -0400)] 
Allow operators as record pattern synonym fields

Fixes #13454

Reviewers: austin, bgamari, dfeuer

Reviewed By: dfeuer

Subscribers: RyanGlScott, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3379

2 years agoPrint module when dumping rules
Matthew Pickering [Wed, 29 Mar 2017 20:08:40 +0000 (16:08 -0400)] 
Print module when dumping rules

It is sometimes hard to find where a rule is defined. Printing the
module where it comes from will make it much easier to find.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3378

2 years agoFixed error messages for RecursiveDo (#8501)
Rupert Horlick [Wed, 29 Mar 2017 19:26:11 +0000 (15:26 -0400)] 
Fixed error messages for RecursiveDo (#8501)

Changes in a few different places to catch several different
types of error related to RecursiveDo

Signed-off-by: Rupert Horlick <ruperthorlick@gmail.com>
Test Plan: Three test cases, with further tests in comments

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3271

2 years agobase: Check for path separators chars in openTempFile' template string
Ben Gamari [Mon, 27 Mar 2017 16:40:42 +0000 (12:40 -0400)] 
base: Check for path separators chars in openTempFile' template string

This fixes #13489.

2 years agotestsuite: More 32-bit performance changes
Ben Gamari [Mon, 27 Mar 2017 12:16:18 +0000 (08:16 -0400)] 
testsuite: More 32-bit performance changes

2 years agoFix scc001
Simon Marlow [Wed, 29 Mar 2017 13:17:38 +0000 (06:17 -0700)] 
Fix scc001

2 years agocg057: accept output
Simon Marlow [Wed, 29 Mar 2017 13:25:05 +0000 (06:25 -0700)] 
cg057: accept output

2 years agoFix ASSERT failure in TcErrors
Simon Peyton Jones [Wed, 29 Mar 2017 13:57:21 +0000 (14:57 +0100)] 
Fix ASSERT failure in TcErrors

This fixes Trac #13494, by improving

   commit e0ad55f894a8d85dcc099c33c63cfe3d4515d464
   Author: Simon Peyton Jones <simonpj@microsoft.com>
   Date:   Mon Mar 27 10:32:08 2017 +0100

   Fix error-message suppress on given equalities

which in turn was a fix to #13446

2 years agoAdd a couple of HasDebugCallStack contexts
Simon Peyton Jones [Wed, 29 Mar 2017 08:01:58 +0000 (09:01 +0100)] 
Add a couple of HasDebugCallStack contexts

Just for future (and past) debugging...

2 years agoAllow unbound Refl binders in a RULE
Simon Peyton Jones [Wed, 29 Mar 2017 08:00:02 +0000 (09:00 +0100)] 
Allow unbound Refl binders in a RULE

Trac #13410 was failing because we had a RULE with a binder
   (c :: t~t)
and the /occurrences/ of c on the LHS were being optimised to Refl,
leaving a binder that would not be filled in by matching the LHS
of the rule.

I flirted with trying to ensure that occurrences (c :: t~t) are
not optimised to Relf, but that turned out to be fragile; it was
being done, for good reasons, in multiple places, including
  - TyCoRep.substCoVarBndr
  - Simplify.simplCast
  - Corecion.mkCoVarCo

So I fixed it in one place by making Rules.matchN deal happily
with an unbound binder (c :: t~t).  Quite easy.  See "Coercion
variables" in Note [Unbound RULE binders] in Rules.

In addition, I needed to make CoreLint be happy with an bound
RULE binder that is a Relf coercion variable

In debugging this, I was perplexed that occurrences of a variable
(c :: t~t) mysteriously turned into Refl.  I found out how it
was happening, and decided to move it:

* In TyCoRep.substCoVarBndr, do not substitute Refl for a
  binder (c :: t~t).

* In mkCoVarCo do not optimise (c :: t~t) to Refl.

Instead, we do this optimisation in optCoercion (specifically
opt_co4) where, surprisingly, the optimisation was /not/
being done.  This has no effect on what programs compile;
it just moves a relatively-expensive optimisation to optCoercion,
where it seems more properly to belong.  It's actually not clear
to me which is really "better", but this way round is less
surprising.

One small simplifying refactoring

* Eliminate TyCoRep.substCoVarBndrCallback, which was only
  called locally.

2 years agoZap Call Arity info in the simplifier
Joachim Breitner [Tue, 28 Mar 2017 20:19:16 +0000 (16:19 -0400)] 
Zap Call Arity info in the simplifier

As #13479 shows, there are corner cases where the simplifier decides to
not eta-expand a function as much as its call arity would suggest, but
instead transforms the code that the call arity annotation becomes a
lie.

As the call arity information is only meant to be used by the
immediatelly following simplifier run, it makes sense to simply zap the
information there.

Differential Revision: https://phabricator.haskell.org/D3390

2 years agoMake the test fail if compiled without -threaded
Simon Marlow [Mon, 27 Mar 2017 15:09:23 +0000 (16:09 +0100)] 
Make the test fail if compiled without -threaded

Test Plan: validate

Reviewers: bgamari, austin, erikd

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3387

2 years agoFix #13433
Simon Marlow [Mon, 27 Mar 2017 12:15:04 +0000 (13:15 +0100)] 
Fix #13433

Summary: See comments for details.

Test Plan: validate

Reviewers: mpickering, bgamari, austin, erikd

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3386

2 years agoSpelling in comments only [ci skip]
Gabor Greif [Tue, 28 Mar 2017 09:59:48 +0000 (11:59 +0200)] 
Spelling in comments only [ci skip]

2 years agoTest Trac #13490
Simon Peyton Jones [Tue, 28 Mar 2017 07:44:11 +0000 (08:44 +0100)] 
Test Trac #13490

2 years agoComplete the fix for #13441 (pattern synonyms)
Simon Peyton Jones [Tue, 28 Mar 2017 07:23:44 +0000 (08:23 +0100)] 
Complete the fix for #13441 (pattern synonyms)

Do not attempt to typecheck both directions of an
implicitly-bidirectional pattern synonym simultanously,
as we were before.  Instead, the builder is typechecked
when we typecheck the code for the builder, which was
of course happening already, even in both bidirectional
cases.

See Note [Checking against a pattern signature], under
"Existential type variables".

2 years agoFix #13458
Richard Eisenberg [Thu, 23 Mar 2017 02:32:04 +0000 (22:32 -0400)] 
Fix #13458

Core Lint shouldn't check representations of types that don't
have representations.

test case: typecheck/should_compile/T13458

2 years ago-fspec-constr-keen docs typos [skip ci]
Matthew Pickering [Mon, 27 Mar 2017 16:41:41 +0000 (17:41 +0100)] 
-fspec-constr-keen docs typos [skip ci]

2 years agoRemove utterly bogus code
Simon Peyton Jones [Mon, 27 Mar 2017 13:33:55 +0000 (14:33 +0100)] 
Remove utterly bogus code

The commit 6746549772c5cc0ac66c0fce562f297f4d4b80a2
    Author: Richard Eisenberg <eir@cis.upenn.edu>
    Date:   Fri Dec 11 18:19:53 2015 -0500

    Add kind equalities to GHC.

added this entirely bogus code to Simplify.simplLam:

    env' | Coercion co <- arg
         = extendCvSubst env bndr co
         | otherwise
         = env

It's bogus because 'co' is an 'InCoercion', but a CvSubst should have
only OutCoercions in it.  Moreover, completeBind does the job nicely.

This led to an ASSERT failure in an experimental branch; but I have
not got a repro case that works on HEAD.  But still, the patch deletes
code and fixes a bug, so it must be good.

The only mystery is why Richard added it in the first place :-).
I hope I'm not missing anything.  But it validates fine.

2 years agoFix 'unsolved constraints' in GHCi
Simon Peyton Jones [Mon, 27 Mar 2017 13:32:43 +0000 (14:32 +0100)] 
Fix 'unsolved constraints' in GHCi

In initTc, if the computation fails with an exception, we
should not complain about unsolved constraints.

Fixes Trac #13466.

2 years agoFix error-message suppress on given equalities
Simon Peyton Jones [Mon, 27 Mar 2017 09:32:08 +0000 (10:32 +0100)] 
Fix error-message suppress on given equalities

I'd got the logic slightly wrong when reporting type errors
for insoluble 'given' equalities.  We suppress insoluble givens
under some circumstances (see Note [Given errors]), but we then
suppressed subsequent 'wanted' errors because the (suppressed)
'given' error "won".  Result: no errors at all :-(.

This patch fixes it and
 - Renames TcType.isTyVarUnderDatatype to the more
   perspicuous TcType.isInsolubleOccursCheck

In doing this I realise that I don't understand why we need
to keep the insolubles partitioned out separately at all...
but that is for another day.

2 years agoFix explicitly-bidirectional pattern synonyms
Simon Peyton Jones [Mon, 27 Mar 2017 09:22:22 +0000 (10:22 +0100)] 
Fix explicitly-bidirectional pattern synonyms

This partly fixes Trac #13441, at least for the explicitly
bidirectional case.

See Note [Checking against a pattern signature], the part about
"Existential type variables".

Alas, the implicitly-bidirectional case is still not quite right, but
at least there is a workaround by making it explicitly bidirectional.

2 years agoTypechecker comments and debug tracing only
Simon Peyton Jones [Mon, 27 Mar 2017 09:12:53 +0000 (10:12 +0100)] 
Typechecker comments and debug tracing only

2 years agoEliminate a user manual warning
Simon Peyton Jones [Mon, 27 Mar 2017 09:09:37 +0000 (10:09 +0100)] 
Eliminate a user manual warning

I was getting
  docs/users_guide/glasgow_exts.rst:12783:
     WARNING: Title underline too short.

  ``COLUMN`` pragma
  ---------------

So I lengthened the row of hyphens.

2 years agoSimplify the logic for tc_hs_sig_type
Simon Peyton Jones [Mon, 27 Mar 2017 09:05:26 +0000 (10:05 +0100)] 
Simplify the logic for tc_hs_sig_type

In fixing Trac #13337, and introducing solveSomeEqualities,
Richard introduce the higher-order function tc_hs_sig_type_x,
with a solver as its argument.

It turned out that there was a much simpler way to do the
same thing, which this patch implements.  Less code, easier
to grok.  No change in behaviour though.

2 years agoDon't redefine typedef names
Gabor Greif [Mon, 27 Mar 2017 11:33:49 +0000 (13:33 +0200)] 
Don't redefine typedef names

instead define the structs referred to by
 - SectionFormatInfo
 - ObjectCodeFormatInfo

that were only forward-declared earlier.

This fixes redefinition errors with gcc4.4

2 years agoOnly use locally bound variables in pattern synonym declarations
Matthew Pickering [Mon, 27 Mar 2017 10:24:25 +0000 (11:24 +0100)] 
Only use locally bound variables in pattern synonym declarations

Summary:
We were using the unconstrainted `lookupOccRn` function which looked up
any variable in scope. Instead we only want to consider variables brought into
scope by renaming the pattern on the RHS.

A few more changes to make reporting of unbound names suggest the correct
things.

Fixes #13470

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3377

2 years agoRemove unused argument from importSuggestions
Matthew Pickering [Thu, 23 Mar 2017 14:08:26 +0000 (14:08 +0000)] 
Remove unused argument from importSuggestions

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3376

2 years agoAdds aarch64 linker for mach-o files.
Moritz Angermann [Tue, 21 Mar 2017 15:02:20 +0000 (11:02 -0400)] 
Adds aarch64 linker for mach-o files.

This is the final commit that ties them all together. Here we
add the aarch64 linker for macho files.

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
  files.
- In D3252 we refactored most of the MachO.c file to use the
  new types and datastructure.

This commit will than finally add the aarch64 (arm64) linker
for mach-o files to ghc, using the improved foundation we
have constructed above.

The dependency structure therefore is as follows

```
  .- D3240
  v
This <- D3252 <- D3251 <- D3239
  ^
  '- D3238
```

Depends: D3252, D3240, D3238

Test Plan:
To test this with iOS, we also need the remote-iserv
diff D3233. With all that in place, proceed as follows:

- Build ghc for the host

```
  ghc $ ./configure --prefix=/test/opt \
    --disable-large-address-space \
    --with-llc=/path/to/llvm-3.9/bin/llc \
    --with-opt=/path/to/llvm-3.9/bin/opt
  # edit mk/build.mk to specify quick
  ghc $ make && make install
```

- Build ghc for ios

```
  ghc $ ./configure --target=aarch64-apple-darwin14 \
    --prefix=/test/opt \
    --disable-large-address-space \
    --with-llc=/path/to/llvm-3.9/bin/llc \
    --with-opt=/path/to/llvm-3.9/bin/opt \
    --with-ghc=/test/bin/ghc \
    --enable-bootstrap-with-devel-snapshot
  # edit mk/build.mk to specify quick-cross
  ghc $ make && make install

```
- Obtain the iOS wrapper scripts from
https://github.com/angerman/ghc-ios-scripts
  and place them in PATH.

- Build iserv-proxy for the host

```
  ghc/iserv $ cabal install -fproxy -flibrary

```
- Build iserv-library for the target

```
  # build cryptonite without integer-gmp
  ghc/iserv $ aarch64-apple-darwin14-cabal install cryptonite
-f-integer-gmp
  ghc/iserv $ aarch64-apple-darwin14-cabal install -flibrary
```

- Create an iOS application with the following `main.m`:
```
  #import <UIKit/UIKit.h>
  #include "HsFFI.h"
  extern void startSlave(bool, int, const char *);

  int main(int argc, char * argv[]) {
    const char * documents_path = [[[NSFileManager defaultManager]
URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]
firstObject].path.UTF8String;

    hs_init(NULL, NULL);

    startSlave(false, 5000, documents_path);

    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, nil);
    }
  }
```

  and link it with: the iserv archive from
`~/.cabal/lib/aarch64-ios-ghc`
  as well as all dependent archives.

- Build, Install and Launch the iserv-slave application on your iphone

- Compile some Template Haskell code with the
`aarch64-apple-darwin14-ghc`,
  through the `iserv-proxy`

```
  app $ aarch64-apple-darwin14-ghc Module.hs \
   -threaded -staticlib \
   -outputdir build/aarch64 -pgmlibtool libtool-quiet -stubdir . \
   -fexternal-interpreter \
   -pgmi=$HOME/.cabal/bin/iserv-proxy \
   -opti10.0.0.1 \
   -opti5000
```
  where 10.0.0.1 is the ip of your iserv-slave.

  magic.

Reviewers: rwbarton, bgamari, austin, hvr, erikd, simonmar

Subscribers: thomie, erikd, ryantrinkle

Differential Revision: https://phabricator.haskell.org/D3255

2 years agoRefactor MachO.c
Moritz Angermann [Tue, 21 Mar 2017 15:01:40 +0000 (11:01 -0400)] 
Refactor MachO.c

- Rename existing structs with typedefs from MachOTypes.
- Update the following functions to make use of the
  extended ObjectCode structure:
  - ocAllocateSymbolExtras_MachO
  - resolveImports
  - ocGetNames_MachO
  - ocResolve_MachO
  - ocRunInit_MachO
- repalce int with size_t for fread
- Add aarch64 to the 64bit magic header check.

Depends on D3239, D3251

This is just one of the pieces for the rts linker
support for ios (aarch64-macho)

---

The following diagram and legend tries to explain the dependencies a
bit:
```
  .- D3240
  v
D3255 <- This <- D3251 <- D3239
  ^
  '- D3238
```

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
  files.
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: austin, rwbarton, erikd, simonmar, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3252

2 years agoAdd ocInit_MachO
Moritz Angermann [Tue, 21 Mar 2017 15:01:11 +0000 (11:01 -0400)] 
Add ocInit_MachO

This adds ocInit_MachO function, used to populate the extended
ObjectCode structure, and the corresponding stgFree.

It also adds defines for iOS, such that MachO.o is also compiled for iOS
targets.

Depends on D3239

---

This is just one of the pieces for the rts linker
support for ios (aarch64-macho)

---

The following diagram and legend tries to explain the dependencies a
bit:
```
  .- D3240
  v
D3255 <- D3252 <- This <- D3239
  ^
  '- D3238
```

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
  files.
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: rwbarton, bgamari, austin, erikd, simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3251

2 years agorts linker: Introduce MachOTypes
Moritz Angermann [Tue, 21 Mar 2017 14:59:49 +0000 (10:59 -0400)] 
rts linker: Introduce MachOTypes

This diff introduces MachOTypes, to reduce the need to typing `struct`
all the time.  It also coaleces the 64 and non 64 structs. It also adds
additional fiedls to the object code structure for macho, which makes
working with macho object code much simpler and requires less passing
around of variabls or address recomputation for the header, symbol
table, etc...

Furthermore this diff introduces a type for a linked list of stubs.

I had to move the #ifdef from the bottom of the file up, to be able to
extend the object code structure conditional on the use of the macho file format.

This is just one of the pieces for the rts linker
support for ios (aarch64-macho)

---

The following diagram and legend tries to explain the dependencies a
bit:
```
  .- D3240
  v
D3255 <- D3252 <- D3251 <- This
  ^
  '- D3238
```

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
  files.
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: austin, erikd, simonmar, rwbarton, bgamari

Subscribers: rwbarton, thomie, ryantrinkle

Differential Revision: https://phabricator.haskell.org/D3239

2 years agoMake mmap r+w only during preload for iOS.
Moritz Angermann [Tue, 21 Mar 2017 14:58:28 +0000 (10:58 -0400)] 
Make mmap r+w only during preload for iOS.

While we do not yet enable mmap for ios builds.  If we later do, we must
not try to mmap r+w+x, on iOS as that clearly fails.

This diff also adds a check for the successful mmaping.

I don't think we can blanket change this to r+w for every case, unless
we are absolutely sure that we are going to remap this and set +x where
needed.

This is just one of the pieces for the rts linker support for ios
(aarch64-macho)

---

The following diagram and legend tries to explain the dependencies a
bit:
```
  .- D3240
  v
D3255 <- D3252 <- D3251 <- D3239
  ^
  '- This
```

- In D3238 we started allowing preloading object code with mmap
  in iOS, where we can't have r+w+x.
- In D3239 we introduced a richer extension of the object code
  data type to make working with mach-o files easier.
- In D3240 we set the stage to allow loading archives (.a) on iOS
- In D3251 we added init and deinit functions to populate and
  depopulate the enriched object code data structure for mach-o
  files.
- In D3252 we refactored most of the MachO.c file to use the
  new types and data structure.
- in D3255 we finally introduce the aarch64-mach-o linker.

Reviewers: ezyang, austin, erikd, simonmar, bgamari, rwbarton

Reviewed By: bgamari

Subscribers: rwbarton, ryantrinkle, thomie

Differential Revision: https://phabricator.haskell.org/D3238

2 years agotestsuite: Mark T12622 as broken in ghci way
Ben Gamari [Sat, 25 Mar 2017 16:28:59 +0000 (12:28 -0400)] 
testsuite: Mark T12622 as broken in ghci way

See #13481.

2 years agotestsuite: Only run T13143 in optasm way
Ben Gamari [Sat, 25 Mar 2017 16:07:32 +0000 (12:07 -0400)] 
testsuite: Only run T13143 in optasm way

Otherwise we run it in the hpc way, which outputs different Core.

2 years agoRecompile if -fhpc is added or removed (#11798)
Reid Barton [Sat, 25 Mar 2017 14:53:29 +0000 (10:53 -0400)] 
Recompile if -fhpc is added or removed (#11798)

Test Plan: validate

Reviewers: austin, bgamari, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D3368

2 years agoDrop dead code in rts/{Prelude.h,package.conf.in}
Moritz Angermann [Sat, 25 Mar 2017 14:53:17 +0000 (10:53 -0400)] 
Drop dead code in rts/{Prelude.h,package.conf.in}

The endevor to drop the `-Wl,-u,<sym>` requirement for linking the rts,
base, ,... turned out to be less fruitful than I had hoped. However it
did turn up a few dead symbols, that are referenced but for which the
definition seems to have diminished.

Reviewers: austin, rwbarton, geekosaur, erikd, simonmar, bgamari

Reviewed By: geekosaur, simonmar

Subscribers: thomie, snowleopard

Differential Revision: https://phabricator.haskell.org/D3350

2 years agoBump array submodule
Ben Gamari [Sun, 26 Mar 2017 23:06:36 +0000 (19:06 -0400)] 
Bump array submodule

Previous change fix 32-bit systems, but broke 64-bits

2 years agoBump array submodule
Ben Gamari [Sat, 25 Mar 2017 03:15:09 +0000 (23:15 -0400)] 
Bump array submodule

2 years agotestsuite: Add 32-bit output for compact_share test
Ben Gamari [Fri, 24 Mar 2017 18:27:23 +0000 (14:27 -0400)] 
testsuite: Add 32-bit output for compact_share test

2 years agotestsuite: Note x87 terribleness in num009
Ben Gamari [Fri, 24 Mar 2017 17:22:08 +0000 (13:22 -0400)] 
testsuite: Note x87 terribleness in num009

2 years agotestsuite: Update performance numbers for 32-bit platforms
Ben Gamari [Fri, 24 Mar 2017 16:26:03 +0000 (12:26 -0400)] 
testsuite: Update performance numbers for 32-bit platforms

2 years agotestsuite: Allow join007 to pass on 32-bit machines
Ben Gamari [Fri, 24 Mar 2017 16:27:35 +0000 (12:27 -0400)] 
testsuite: Allow join007 to pass on 32-bit machines

The output of the test overflows. Given that the result is stable
regardless of whether it overflows, I just made the expected output
word-size dependent.

2 years agorts: Fix stat output on 32-bit platforms
Ben Gamari [Fri, 24 Mar 2017 18:59:14 +0000 (14:59 -0400)] 
rts: Fix stat output on 32-bit platforms

The formatting strings fell out of sync with the arguments.