2 months agoOnly pass mod_location with HscRecomp instead of the entire ModSummary
Ömer Sinan Ağacan [Mon, 11 Nov 2019 11:15:55 +0000 (14:15 +0300)] 
Only pass mod_location with HscRecomp instead of the entire ModSummary

HscRecomp users only need the ModLocation of the module being compiled,
so only pass that to users instead of the entire ModSummary

Metric Decrease:

2 months agoPrint name prefixly in the Outputable instance for StandaloneKindSig
Ryan Scott [Sun, 10 Nov 2019 16:35:38 +0000 (11:35 -0500)] 
Print name prefixly in the Outputable instance for StandaloneKindSig

Issue #17461 was occurring because the `Outputable` instance for
standalone kind signatures was simply calling `ppr` on the name in
the kind signature, which does not add parentheses to infix names.
The solution is simple: use `pprPrefixOcc` instead.

Fixes #17461.

2 months agousers guide: Fix broken link
Ben Gamari [Mon, 11 Nov 2019 15:45:13 +0000 (10:45 -0500)] 
users guide: Fix broken link

2 months agotestsuite: Add test for #17458
Ben Gamari [Sat, 9 Nov 2019 14:31:09 +0000 (09:31 -0500)] 
testsuite: Add test for #17458

As noted in #17458, QuantifiedConstraints and UndecideableInstances
could previously be used to write programs which can loop at runtime.
This was fixed in !1870.

2 months agohadrian: fix Windows CI script
Alp Mestanogullari [Fri, 8 Nov 2019 23:17:20 +0000 (00:17 +0100)] 
hadrian: fix Windows CI script

By only using 'export' from within bash commands.

2 months agoEnsure that coreView/tcView are able to inline
Ben Gamari [Thu, 7 Nov 2019 19:31:15 +0000 (14:31 -0500)] 
Ensure that coreView/tcView are able to inline

Previously an import cycle between Type and TyCoRep meant that several
functions in TyCoRep ended up SOURCE import coreView. This is quite
unfortunate as coreView is intended to be fused into a larger pattern
match and not incur an extra call.

Fix this with a bit of restructuring:

 * Move the functions in `TyCoRep` which depend upon things in `Type`
   into `Type`
 * Fold contents of `Kind` into `Type` and turn `Kind` into a simple
   wrapper re-exporting kind-ish things from `Type`
 * Clean up the redundant imports that popped up as a result

Closes #17441.

Metric Decrease:

2 months agoDocument CmmTopInfo type
Ömer Sinan Ağacan [Mon, 11 Nov 2019 18:58:24 +0000 (21:58 +0300)] 
Document CmmTopInfo type

[ci skip]

2 months agotestsuite: don't collect compiler stats in collect_runtime_residency
Alp Mestanogullari [Tue, 12 Nov 2019 17:59:07 +0000 (18:59 +0100)] 
testsuite: don't collect compiler stats in collect_runtime_residency

We instead want to collect the runtime stats (with collect_stats, instead of

This should fix a number of perf tests failures we have been seeing, where
we suddenly started measuring metrics we didn't intend to measure, which
tend to fall outside of the acceptance window.

Metric Decrease:

Metric Increase:

2 months agoci: push perf test metrics even when the testsuite doesn't pass
Alp Mestanogullari [Fri, 1 Nov 2019 17:20:34 +0000 (18:20 +0100)] 
ci: push perf test metrics even when the testsuite doesn't pass

The corresponding commit might introduce a regression on a perf test, in which
case we certainly want to record it. The testsuite might also fail because
of a test unrelated to performance, in which case we want to record that the
perf test results were good.

Either way, we likely want to record them under all circumstances but
we don't without this patch.

Metric Decrease:

Metric Increase:

2 months agotestsuite: Disable T4334 in nonmoving_thr way wip/alp/hadrian-ci-metricsfile
Ben Gamari [Mon, 11 Nov 2019 13:50:45 +0000 (08:50 -0500)] 
testsuite: Disable T4334 in nonmoving_thr way

2 months agohadrian: export METRICS_FILE to make it accessible to perf notes script
Alp Mestanogullari [Fri, 8 Nov 2019 16:49:23 +0000 (11:49 -0500)] 
hadrian: export METRICS_FILE to make it accessible to perf notes script

This addresses #17456 and also fixes the --metrics-file argument that Hadrian
passes to the testsuite driver.

2 months agotestsuite: Don't check_stats at runtime if not requested wip/T17387
Ben Gamari [Wed, 6 Nov 2019 20:54:27 +0000 (15:54 -0500)] 
testsuite: Don't check_stats at runtime if not requested

Previously we would call check_stats to check the runtime metrics even
if the test definition hadn't requested it. This would result in an
error since the .stats file doesn't exist.

2 months agotestsuite: Use small allocation area when measuring residency
Ben Gamari [Wed, 30 Oct 2019 23:53:18 +0000 (19:53 -0400)] 
testsuite: Use small allocation area when measuring residency

As suggested in #17387; this helps reduce the variance in our residency

Metric Increase:

Metric Decrease 'compile_time/peak_megabytes_allocated':

Metric Decrease 'runtime/bytes allocated':

Metric Increase 'compile_time/bytes allocated':

Metric Increase 'runtime/peak_megabytes_allocated':

Metric Decrease:

2 months agotestsuite: Mark tests fragile in threaded2 as fragile in all concurrent ways
Ben Gamari [Sat, 9 Nov 2019 14:41:53 +0000 (09:41 -0500)] 
testsuite: Mark tests fragile in threaded2 as fragile in all concurrent ways

2 months agoFix #17405 by not checking imported equations
Richard Eisenberg [Thu, 7 Nov 2019 17:56:16 +0000 (17:56 +0000)] 
Fix #17405 by not checking imported equations

Previously, we checked all imported type family equations
for injectivity. This is very silly. Now, we check only
for conflicts.

Before I could even imagine doing the fix, I needed to untangle
several functions that were (in my opinion) overly complicated.
It's still not quite as perfect as I'd like, but it's good enough
for now.

Test case: typecheck/should_compile/T17405

2 months agoUpdate release notes about #16512 / #17405.
Richard Eisenberg [Thu, 7 Nov 2019 16:06:10 +0000 (16:06 +0000)] 
Update release notes about #16512 / #17405.

2 months agoImprove SPECIALIZE pragma error messages (Fixes #12126)
Alina Banerjee [Sat, 2 Nov 2019 01:34:28 +0000 (01:34 +0000)] 
Improve SPECIALIZE pragma error messages (Fixes #12126)

2 months agoFix incorrect plurals
Brian Wignall [Fri, 8 Nov 2019 18:27:56 +0000 (13:27 -0500)] 
Fix incorrect plurals

2 months agoIncorporate MR review suggestions; add change in changelog
Brian Wignall [Fri, 8 Nov 2019 17:40:43 +0000 (12:40 -0500)] 
Incorporate MR review suggestions; add change in changelog

2 months agoAdd IsList instance for ZipList (closes #17433)
Brian Wignall [Fri, 8 Nov 2019 15:19:13 +0000 (10:19 -0500)] 
Add IsList instance for ZipList (closes #17433)

2 months agoUse the right type in :force
Simon Peyton Jones [Fri, 8 Nov 2019 09:22:02 +0000 (09:22 +0000)] 
Use the right type in :force

A missing prime meant that we were considering the wrong
type in the GHCi debugger, when doing :force on multiple
arguments (issue #17431).

The fix is trivial.

2 months agotestsuite: Mark T16219 as fragile on Windows
Ben Gamari [Thu, 7 Nov 2019 19:32:28 +0000 (14:32 -0500)] 
testsuite: Mark T16219 as fragile on Windows

As noted in #17452, this test produces very long file paths which
exceed the Windows MAX_PATH limitation. Mark the test as fragile for not
until we can come up with a better solution.

2 months agotestsuite: Drop T7995
Ben Gamari [Thu, 7 Nov 2019 16:27:03 +0000 (11:27 -0500)] 
testsuite: Drop T7995

This test is quite sensitive to the build configuration as it requires that ghc
have unfoldings, which isn't true in the quick build flavours. I considered
various options to make the test more robust but none of them seemed
particularly appealing. Moreover, Simon PJ was a bit skeptical of the value of
the test to begin with and I strongly suspect that any regression in #7995
would be accompanied by failures in our other compiler performance tests.

Closes #17399.

2 months agotestsuite: Fix putStrLn in saks028
Ben Gamari [Thu, 7 Nov 2019 15:29:56 +0000 (10:29 -0500)] 
testsuite: Fix putStrLn in saks028

Bizarrely, `saks028` previously failed reliably, but only on Windows
(#17450). The test would exit with a zero exit code but simply didn't
emit the expected text to stderr.

I believe this was due to the fact that the test used `putStrLn`,
resulting in the output ending up on stdout. This worked on other
platforms since (apparently) we redirect stdout to stderr when
evaluating splices. However, on Windows it seems that the redirected
output wasn't flushed as it was on other platforms.

Anyways, it seems like the right thing to do here is to be explicit
about our desire for the output to end up on stderr.

Closes #17450.

2 months agotestsuite: Ignore stderr in PartialDownsweep
Ben Gamari [Thu, 7 Nov 2019 15:09:38 +0000 (10:09 -0500)] 
testsuite: Ignore stderr in PartialDownsweep

As described in #17449, PartialDownsweep is currently fragile due to its
dependence on the error messages produced by the C preprocessor. To eliminate
this dependence we simply ignore stderr output, instead relying on the fact
that the test will exit with a non-zero exit code on failure.

Fixes #17449.

2 months agotestsuite: Mark T17414 as fragile on Windows
Ben Gamari [Thu, 7 Nov 2019 15:01:31 +0000 (10:01 -0500)] 
testsuite: Mark T17414 as fragile on Windows

This consistently times out on Windows as described in #17453. I have tried
increasing the timeout multiplier to two yet it stills fails. Disabling
until we have time to investigate.

2 months agotestsuite: Remove redundant cleaning logic from T16511
Ben Gamari [Thu, 7 Nov 2019 14:57:01 +0000 (09:57 -0500)] 
testsuite: Remove redundant cleaning logic from T16511

The GHCi script for T16511 had some `rm` commands to clean up output
from previous runs. This should be harmless since stderr was redirected
to /dev/null; however, it seems that this redirection doesn't work on
Windows (perhaps because GHCi uses `cmd` to execute the command-line;
I'm not sure). I tried to fix it but was unable to find a sensible

Regardless, the cleaning logic is quite redundant now that we run each
test in a hermetic environment. Let's just remove it.

2 months agotestsuite: Mark T16219 as unbroken
Ben Gamari [Thu, 7 Nov 2019 11:46:15 +0000 (06:46 -0500)] 
testsuite: Mark T16219 as unbroken

This was previously broken due to #16386 yet it passes for me locally.

2 months agotestsuite: Mark T11627b as fragile
Ben Gamari [Thu, 7 Nov 2019 11:44:16 +0000 (06:44 -0500)] 
testsuite: Mark T11627b as fragile

It was previously marked as broken due to #12236 however it passes for
me locally while failing on CI.

2 months agotestsuite: Mark T13676 as broken on Darwin and Windows
Ben Gamari [Thu, 7 Nov 2019 11:18:52 +0000 (06:18 -0500)] 
testsuite: Mark T13676 as broken on Darwin and Windows

Due to #17447.

2 months agotestsuite: Fix header #include order on Windows
Ben Gamari [Thu, 7 Nov 2019 11:09:44 +0000 (06:09 -0500)] 
testsuite: Fix header #include order on Windows

<Rts.h> must always come first.

2 months agogitlab-ci: Don't allow Windows make job to fail
Ben Gamari [Fri, 7 Jun 2019 20:20:01 +0000 (16:20 -0400)] 
gitlab-ci: Don't allow Windows make job to fail

While linking is still slow (#16084) all of the correctness issues which were
preventing us from being able to enforce testsuite-green on Windows are now

2 months agotestsuite: Skip T14931 on Windows
Ben Gamari [Thu, 7 Nov 2019 11:03:48 +0000 (06:03 -0500)] 
testsuite: Skip T14931 on Windows

This test uses -dynamic-too, which is not supported on Windows.

2 months agotestsuite: Skip T16916 on Windows
Ben Gamari [Thu, 7 Nov 2019 11:03:20 +0000 (06:03 -0500)] 
testsuite: Skip T16916 on Windows

The event manager is not supported on Windows.

2 months agotestsuite: Fix Windows cleanup path
Ben Gamari [Thu, 7 Nov 2019 11:02:55 +0000 (06:02 -0500)] 
testsuite: Fix Windows cleanup path

This was a regression introduced with the Path refactoring.

2 months agotemplate-haskell: Fix italics in changelog
Ryan Scott [Fri, 8 Nov 2019 15:54:22 +0000 (10:54 -0500)] 
template-haskell: Fix italics in changelog


2 months agobase: Fix TBA in changelog
Ben Gamari [Sun, 16 Jun 2019 13:13:05 +0000 (09:13 -0400)] 
base: Fix TBA in changelog

2 months agotemplate-haskell: Fix TBAs in changelog
Ben Gamari [Mon, 22 Apr 2019 16:58:14 +0000 (12:58 -0400)] 
template-haskell: Fix TBAs in changelog

2 months agotemplate-haskell: Document assembler foreign file support
Ben Gamari [Wed, 20 Feb 2019 19:38:05 +0000 (14:38 -0500)] 
template-haskell: Document assembler foreign file support

See #16180.

2 months agoBump unix submodule
Ben Gamari [Thu, 7 Nov 2019 16:54:18 +0000 (11:54 -0500)] 
Bump unix submodule

Marks executeFile001 as broken in all concurrent ways.

2 months agorts/nonmoving: Catch failure of createOSThread
Ben Gamari [Thu, 7 Nov 2019 16:45:21 +0000 (11:45 -0500)] 
rts/nonmoving: Catch failure of createOSThread

2 months agotestsuite: Run tests in nonmoving_thr in speed==slow
Ben Gamari [Thu, 7 Nov 2019 01:47:55 +0000 (20:47 -0500)] 
testsuite: Run tests in nonmoving_thr in speed==slow

2 months agoSetLevels: Don't set context level when floating cases
Ben Gamari [Mon, 19 Aug 2019 14:03:35 +0000 (10:03 -0400)] 
SetLevels: Don't set context level when floating cases

When floating a single-alternative case we previously would set the
context level to the level where we were floating the case. However,
this is wrong as we are only moving the case and its binders. This
resulted in #16978, where the disrepancy caused us to
unnecessarily abstract over some free variables of the case body,
resulting in shadowing and consequently Core Lint failures.

(cherry picked from commit a2a0e6f3bb2d02a9347dec4c7c4f6d4480bc2421)

2 months agohadrian: Add enableTickyGhc helper
Ben Gamari [Thu, 7 Nov 2019 12:53:59 +0000 (12:53 +0000)] 
hadrian: Add enableTickyGhc helper

This took a bit of trial-and-error to get working so it seems worth
having in the tree.

2 months agoSet correct length of DWARF .debug_aranges section (fixes #17428)
Szymon Nowicki-Korgol [Sun, 3 Nov 2019 18:12:56 +0000 (10:12 -0800)] 
Set correct length of DWARF .debug_aranges section (fixes #17428)

2 months agoTestsuite: Introduce req_rts_linker
Stefan Schulze Frielinghaus [Wed, 30 Oct 2019 15:42:30 +0000 (16:42 +0100)] 
Testsuite: Introduce req_rts_linker

Some tests depend on the RTS linker. Introduce a modifier to skip such
tests, in case the RTS linker is not available.

2 months agousers_guide: Set flags list file encoding
Ben Gamari [Thu, 7 Nov 2019 03:04:25 +0000 (22:04 -0500)] 
users_guide: Set flags list file encoding

Otherwise this fails on Windows.

2 months agorts/NonMoving: Fix various Windows build issues
Ben Gamari [Thu, 7 Nov 2019 00:20:08 +0000 (19:20 -0500)] 
rts/NonMoving: Fix various Windows build issues

The Windows build seems to be stricter about not providing threading
primitives in the non-threaded RTS.

2 months agobase: Add missing imports in Windows locking implementation
Ben Gamari [Wed, 6 Nov 2019 23:42:03 +0000 (18:42 -0500)] 
base: Add missing imports in Windows locking implementation

2 months agorts: Remove undesireable inline specifier
Ben Gamari [Wed, 6 Nov 2019 23:25:54 +0000 (18:25 -0500)] 
rts: Remove undesireable inline specifier

I have no idea why I marked this as inline originally but clearly it
shouldn't be inlined.

2 months agorts: Ensure that Rts.h is always included first
Ben Gamari [Tue, 5 Nov 2019 23:45:10 +0000 (18:45 -0500)] 
rts: Ensure that Rts.h is always included first

In general this is the convention that we use in the RTS. On Windows
things actually fail if we break it. For instance, you see things like:

   includes\stg\Types.h:26:9: error:
     warning: #warning "Mismatch between __USE_MINGW_ANSI_STDIO
     definitions. If using Rts.h make sure it is the first header
     included." [-Wcpp]

2 months agorts: Fix m32 allocator build on Windows
Ben Gamari [Tue, 5 Nov 2019 23:44:21 +0000 (18:44 -0500)] 
rts: Fix m32 allocator build on Windows

An inconsistency in the name of m32_allocator_flush caused the build to
fail with a missing prototype error.

2 months agoBump hsc2hs submodule
Ben Gamari [Tue, 5 Nov 2019 16:20:51 +0000 (11:20 -0500)] 
Bump hsc2hs submodule

2 months agoBump the process submodule
Ben Gamari [Tue, 5 Nov 2019 13:25:58 +0000 (08:25 -0500)] 
Bump the process submodule

This should fix the #17108 and #17249 with the fix from

2 months agohadrian: fix support for the recording of perf test results
Alp Mestanogullari [Fri, 1 Nov 2019 11:06:05 +0000 (12:06 +0100)] 
hadrian: fix support for the recording of perf test results

Before this patch, Hadrian didn't care about the TEST_ENV and
METRICS_FILE environment variables, that the performance testing
infrastructure uses to record perf tests results from CI jobs.

It now looks them up right before running the testsuite driver,
and passes suitable --test-env/--metrics-file arguments when
these environment variables are set.

2 months agoconfigure: Modify ERROR to WARN for sphinx's python check
Takenobu Tani [Wed, 6 Nov 2019 12:06:58 +0000 (21:06 +0900)] 
configure: Modify ERROR to WARN for sphinx's python check

If sphinx's python version check failed, many people prefer to build
without documents instead of stopping on the error.

So this commit fixes the following:

* Add clearing of SPHINXBUILD variable when check fails

See also !2016.

2 months agoBump libffi-tarballs submodule
Stefan Schulze Frielinghaus [Wed, 6 Nov 2019 08:14:45 +0000 (09:14 +0100)] 
Bump libffi-tarballs submodule

2 months agoFlagChecker: Add ticky flags to hashed flags
Ben Gamari [Tue, 5 Nov 2019 20:58:17 +0000 (15:58 -0500)] 
FlagChecker: Add ticky flags to hashed flags

These affect output and therefore should be part of the flag hash.

2 months agoFor s390x issue a warning if LLVM 9 or older is used
Stefan Schulze Frielinghaus [Mon, 4 Nov 2019 13:18:25 +0000 (14:18 +0100)] 
For s390x issue a warning if LLVM 9 or older is used

For s390x the GHC calling convention is only supported since LLVM
version 10.  Issue a warning in case an older version of LLVM is used.

2 months agoClean up TH's treatment of unary tuples (or, #16881 part two)
Ryan Scott [Thu, 24 Oct 2019 17:52:36 +0000 (13:52 -0400)] 
Clean up TH's treatment of unary tuples (or, #16881 part two)

!1906 left some loose ends in regards to Template Haskell's treatment
of unary tuples. This patch ends to tie up those loose ends:

* In addition to having `TupleT 1` produce unary tuples, `TupE [exp]`
  and `TupP [pat]` also now produce unary tuples.
* I have added various special cases in GHC's pretty-printers to
  ensure that explicit 1-tuples are printed using the `Unit` type.
  See `testsuite/tests/th/T17380`.
* The GHC 8.10.1 release notes entry has been tidied up a little.

Fixes #16881. Fixes #17371. Fixes #17380.

2 months agoAdding examples to Semigroup/monoid
Dan Brooks [Tue, 5 Nov 2019 20:12:18 +0000 (20:12 +0000)] 
Adding examples to Semigroup/monoid

2 months agoconfigure: Add checking python3-sphinx
Takenobu Tani [Sat, 26 Oct 2019 06:18:25 +0000 (15:18 +0900)] 
configure: Add checking python3-sphinx

This checks the configuration about python3-sphinx.
We need python3-sphinx instead of python2-sphinx to build documentation.

The approach is as follows:
* Check python3 version with custom `` invoked from
  sphinx-build` executable
* Place custom `` into new `utils/check-sphinx` directory

If sphinx is for python2 not python3, it's treated as config ERROR
instead of WARN.

See also #17346 and #17356.

2 months agoconfigure: Add --with-libdw-{includes,libraries} flags
Ben Gamari [Thu, 26 Sep 2019 20:06:28 +0000 (16:06 -0400)] 
configure: Add --with-libdw-{includes,libraries} flags

Fixing #17255.

2 months agorts: Drop redundant flags for libffi
Ben Gamari [Fri, 4 Oct 2019 17:45:53 +0000 (13:45 -0400)] 
rts: Drop redundant flags for libffi

These are now handled in the cabal file's include-dirs field.

2 months agoHadrian: enable interpreter for s390x
Stefan Schulze Frielinghaus [Mon, 4 Nov 2019 08:41:49 +0000 (09:41 +0100)] 
Hadrian: enable interpreter for s390x

2 months agoCoreTidy: hide tidyRule
Ömer Sinan Ağacan [Fri, 1 Nov 2019 09:11:17 +0000 (12:11 +0300)] 
CoreTidy: hide tidyRule

2 months agoTidyPgm: replace an explicit loop with mapAccumL
Ömer Sinan Ağacan [Fri, 1 Nov 2019 08:21:49 +0000 (11:21 +0300)] 
TidyPgm: replace an explicit loop with mapAccumL

2 months agoCheck EmptyCase by simply adding a non-void constraint
Sebastian Graf [Fri, 18 Oct 2019 15:06:24 +0000 (16:06 +0100)] 
Check EmptyCase by simply adding a non-void constraint

We can handle non-void constraints since !1733, so we can now express
the strictness of `-XEmptyCase` just by adding a non-void constraint
to the initial Uncovered set.

For `case x of {}` we thus check that the Uncovered set `{ x | x /~ ⊥ }`
is non-empty. This is conceptually simpler than the plan outlined in
 #17376, because it talks to the oracle directly.

In order for this patch to pass the testsuite, I had to fix handling of
newtypes in the pattern-match checker (#17248).

Since we use a different code path (well, the main code path) for
`-XEmptyCase` now, we apparently also handle #13717 correctly.
There's also some dead code that we can get rid off now.

`provideEvidence` has been updated to provide output more in line with
the old logic, which used `inhabitationCandidates` under the hood.

A consequence of the shift away from the `UncoveredPatterns` type is
that we don't report reduced type families for empty case matches,
because the pretty printer is pure and only knows the match variable's

Fixes #13717, #17248, #17386

2 months agotestsuite: skip test requiring RTS linker on PowerPC
Peter Trommler [Sun, 3 Nov 2019 12:54:41 +0000 (13:54 +0100)] 
testsuite: skip test requiring RTS linker on PowerPC

The RTS linker is not available on 64-bit PowerPC. Instead of
marking tests that require the RTS linker as broken on PowerPC
64-bit skip the respective tests on all platforms where the
RTS linker or a statically linked external interpreter is not

Fixes #11259

2 months agorts: Add missing const in HEAP_ALLOCED_GC
Ben Gamari [Sun, 3 Nov 2019 16:58:50 +0000 (11:58 -0500)] 
rts: Add missing const in HEAP_ALLOCED_GC

This was previously unnoticed as this code-path is hit on very few
platforms (e.g. OpenBSD).

2 months agousers-guide: Improve documentaion of CPP extension
Takenobu Tani [Mon, 21 Oct 2019 11:35:22 +0000 (20:35 +0900)] 
users-guide: Improve documentaion of CPP extension

Currently, the description of CPP extension is given in the section of
command-line options.
Therefore, it is a little difficult to understand that it is a language

This commit explicitly adds a description for it.

[skip ci]

2 months agorts/linker: Ensure that code isn't writable
Ben Gamari [Mon, 28 Oct 2019 04:34:09 +0000 (00:34 -0400)] 
rts/linker: Ensure that code isn't writable

For many years the linker would simply map all of its memory with
PROT_READ|PROT_WRITE|PROT_EXEC. However operating systems have been
becoming increasingly reluctant to accept this practice (e.g. #17353
and #12657) and for good reason: writable code is ripe for exploitation.

Consequently mmapForLinker now maps its memory with
PROT_READ|PROT_WRITE.  After the linker has finished filling/relocating
the mapping it must then call mmapForLinkerMarkExecutable on the
sections of the mapping which contain executable code.

Moreover, to make all of this possible it was necessary to redesign the
m32 allocator. First, we gave (in an earlier commit) each ObjectCode its
own m32_allocator. This was necessary since code loading and symbol
resolution/relocation are currently interleaved, meaning that it is not
possible to enforce W^X when symbols from different objects reside in
the same page.

We then redesigned the m32 allocator to take advantage of the fact that
all of the pages allocated with the allocator die at the same time
(namely, when the owning ObjectCode is unloaded). This makes a number of
things simpler (e.g. no more page reference counting; the interface
provided by the allocator for freeing is simpler). See
Note [M32 Allocator] for details.

2 months agoRephrase note on full-laziness
Leif Metcalf [Fri, 25 Oct 2019 20:31:51 +0000 (09:31 +1300)] 
Rephrase note on full-laziness

2 months agoSysTools: Only apply Windows-specific workaround on Windows
Ben Gamari [Tue, 1 Oct 2019 20:23:27 +0000 (16:23 -0400)] 
SysTools: Only apply Windows-specific workaround on Windows

Issue #1110 was apparently due to a bug in Vista which prevented GCC
from finding its binaries unless we explicitly added it to PATH.
However, this workaround was incorrectly applied on non-Windows
platforms as well, resulting in ill-formed PATHs (#17266).

Fixes #17266.

2 months agoUpdate Note references -- comments only
Richard Eisenberg [Fri, 1 Nov 2019 10:52:00 +0000 (10:52 +0000)] 
Update Note references -- comments only

Follow-on from !2041.

2 months agoSeparate `LPat` from `Pat` on the type-level
Sebastian Graf [Thu, 10 Oct 2019 12:44:18 +0000 (14:44 +0200)] 
Separate `LPat` from `Pat` on the type-level

Since the Trees That Grow effort started, we had `type LPat = Pat`.
This is so that `SrcLoc`s would only be annotated in GHC's AST, which is
the reason why all GHC passes use the extension constructor `XPat` to
attach source locations. See #15495 for the design discussion behind

But now suddenly there are `XPat`s everywhere!
There are several functions which dont't cope with `XPat`s by either
crashing (`hsPatType`) or simply returning incorrect results

This issue was raised in #17330. I also came up with a rather clean and
type-safe solution to the problem: We define

type family XRec p (f :: * -> *) = r | r -> p f
type instance XRec (GhcPass p) f = Located (f (GhcPass p))
type instance XRec TH          f =          f p
type LPat p = XRec p Pat

This is a rather modular embedding of the old "ping-pong" style, while
we only pay for the `Located` wrapper within GHC. No ping-ponging in
a potential Template Haskell AST, for example. Yet, we miss no case
where we should've handled a `SrcLoc`: `hsPatType` and
`collectEvVarsPat` are not callable at an `LPat`.

Also, this gets rid of one indirection in `Located` variants:
Previously, we'd have to go through `XPat` and `Located` to get from
`LPat` to the wrapped `Pat`. Now it's just `Located` again.

Thus we fix #17330.

2 months agoAdd +RTS --disable-delayed-os-memory-return. Fixes #17411.
Niklas Hambüchen [Tue, 29 Oct 2019 11:54:10 +0000 (12:54 +0100)] 
Add +RTS --disable-delayed-os-memory-return. Fixes #17411.

Sets `MiscFlags.disableDelayedOsMemoryReturn`.

See the added `Note [MADV_FREE and MADV_DONTNEED]` for details.

2 months agodoc: Fix backticks
Niklas Hambüchen [Thu, 31 Oct 2019 23:37:29 +0000 (00:37 +0100)] 
doc: Fix backticks

2 months agoMake CSE delay inlining less
Simon Peyton Jones [Tue, 29 Oct 2019 09:19:14 +0000 (09:19 +0000)] 
Make CSE delay inlining less

CSE delays inlining a little bit, to avoid losing vital
specialisations; see Note [Delay inlining after CSE] in CSE.

But it was being over-enthusiastic.  This patch makes the
delay only apply to Ids with specialisation rules, which
avoids unnecessary delay (#17409).

2 months agotestsuite: Add test for #17423
Ben Gamari [Thu, 31 Oct 2019 22:38:40 +0000 (18:38 -0400)] 
testsuite: Add test for #17423

2 months agohadrian: Make runtest invocation consistency with Make
Ben Gamari [Thu, 31 Oct 2019 17:54:58 +0000 (13:54 -0400)] 
hadrian: Make runtest invocation consistency with Make

Use True/False instead of 0/1. This shouldn't be a functional change but
we should be consistent.

2 months agotemplate-haskell: require at least 1 GADT constructor name (#17379)
Adam Sandberg Eriksson [Thu, 31 Oct 2019 07:28:21 +0000 (07:28 +0000)] 
template-haskell: require at least 1 GADT constructor name (#17379)

2 months agoDescribe optimisation of demand analysis of noinline
Ben Gamari [Wed, 25 Sep 2019 21:26:56 +0000 (17:26 -0400)] 
Describe optimisation of demand analysis of noinline

As described in #16588.

2 months agotestsuite: Make ExplicitForAllRules1 more robust
Ben Gamari [Mon, 23 Sep 2019 16:11:14 +0000 (12:11 -0400)] 
testsuite: Make ExplicitForAllRules1 more robust

Previously the test relied on `id` not inlining. Fix this.

2 months agobase: Ensure that failIO isn't SOURCE imported
Ben Gamari [Mon, 16 Sep 2019 16:15:28 +0000 (12:15 -0400)] 
base: Ensure that failIO isn't SOURCE imported

failIO has useful information in its demand signature (specifically that
it bottoms) which is hidden if it is SOURCE imported, as noted
in #16588. Rejigger things such that we don't SOURCE import it.

Metric Increase:

2 months agoFix a bad error in tcMatchTy
Simon Peyton Jones [Tue, 29 Oct 2019 15:21:51 +0000 (15:21 +0000)] 
Fix a bad error in tcMatchTy

This patch fixes #17395, a very subtle and hard-to-trigger
bug in tcMatchTy.  It's all explained in
  Note [Matching in the presence of casts (2)]

I have not added a regression test because it is very hard
to trigger it, until we have the upcoming mkAppTyM patch,
after which lacking this patch means you can't even compile
the libraries.

2 months agoAdd another test for #17267
Simon Peyton Jones [Tue, 29 Oct 2019 15:18:22 +0000 (15:18 +0000)] 
Add another test for #17267

This one came in a comment from James Payor

2 months agoMakes Lint less chatty:
Simon Peyton Jones [Tue, 29 Oct 2019 13:28:33 +0000 (13:28 +0000)] 
Makes Lint less chatty:

I found in #17415 that Lint was printing out truly gigantic
warnings, unmanageably huge, with repeated copies of the
same thing.

This patch makes Lint less chatty, especially for warnings:

* For **warnings**, I don't print details of the location,
  unless you add `-dppr-debug`.

* For **errors**, I still print all the info. They are fatal
  and stop exection, whereas warnings appear repeatedly.

* I've made much less use of `AnExpr` in `LintLocInfo`;
  the expression can be gigantic.

2 months agorts: Make m32 allocator per-ObjectCode
Ben Gamari [Mon, 28 Oct 2019 17:37:39 +0000 (13:37 -0400)] 
rts: Make m32 allocator per-ObjectCode

MacOS Catalina is finally going to force our hand in forbidden writable
exeutable mappings. Unfortunately, this is quite incompatible with the
current global m32 allocator, which mixes symbols from various objects
in a single page. The problem here is that some of these symbols may not
yet be resolved (e.g. had relocations performed) as this happens lazily
(and therefore we can't yet make the section read-only and therefore

The easiest way around this is to simply create one m32 allocator per
ObjectCode. This may slightly increase fragmentation for short-running
programs but I suspect will actually improve fragmentation for programs
doing lots of loading/unloading since we can always free all of the
pages allocated to an object when it is unloaded (although this ability
will only be implemented in a later patch).

2 months agommap: Factor out protection flags
Ben Gamari [Mon, 28 Oct 2019 17:37:04 +0000 (13:37 -0400)] 
mmap: Factor out protection flags

2 months agoFix running of ratio test case
taylorfausak [Fri, 4 Oct 2019 16:57:13 +0000 (12:57 -0400)] 
Fix running of ratio test case

2 months agoAdd tests for rounding ratios
taylorfausak [Fri, 4 Oct 2019 12:26:41 +0000 (08:26 -0400)] 
Add tests for rounding ratios

2 months agoFix rounding around 0
taylorfausak [Fri, 4 Oct 2019 02:44:17 +0000 (22:44 -0400)] 
Fix rounding around 0

2 months agoImplement `round` for `Ratio` that doesn't explode with `Natural`s
taylorfausak [Fri, 4 Oct 2019 02:24:55 +0000 (22:24 -0400)] 
Implement `round` for `Ratio` that doesn't explode with `Natural`s

2 months agobase: Various haddock fixes
Ben Gamari [Thu, 31 Oct 2019 00:56:33 +0000 (20:56 -0400)] 
base: Various haddock fixes

Just a few things I found while looking at #17383.

2 months agotestsuite: Add test for #17414
Ben Gamari [Tue, 29 Oct 2019 13:49:29 +0000 (09:49 -0400)] 
testsuite: Add test for #17414

2 months agobase: Clamp IO operation size to 2GB on Darwin
Ben Gamari [Tue, 29 Oct 2019 13:46:10 +0000 (09:46 -0400)] 
base: Clamp IO operation size to 2GB on Darwin

As reported in #17414, Darwin throws EINVAL in response to large

2 months agoRemove redundant 0s in ghc-heap pointer strings
Ömer Sinan Ağacan [Mon, 28 Oct 2019 13:15:24 +0000 (16:15 +0300)] 
Remove redundant 0s in ghc-heap pointer strings

Before: 0x0000004200c86888
After:  0x42000224f8

This is more concise and consistent with the RTS's printer (which uses
%p formatter, and at least on Linux gcc prints the short form) and gdb's
pointer formatter.

2 months agogitlab-ci: Fix the ARMv7 triple
Ben Gamari [Tue, 29 Oct 2019 22:48:50 +0000 (18:48 -0400)] 
gitlab-ci: Fix the ARMv7 triple

Previously we were configuring the ARMv7 builds with a host/target
triple of arm-linux-gnueabihf, which caused us to target ARMv6 and
consequently rely on the old CP15 memory barrier implementation. This
barrier has to be emulated on ARMv8 machines which is glacially slow.

Hopefully this should fix the ARMv7 builds which currently consistently
time out.

2 months agoWhitespace forward compatibility for proposal #229
Vladislav Zavialov [Mon, 7 Oct 2019 10:57:59 +0000 (13:57 +0300)] 
Whitespace forward compatibility for proposal #229

GHC Proposal #229 changes the lexical rules of Haskell, which may
require slight whitespace adjustments in certain cases.

This patch changes formatting in a few places in GHC and its testsuite
in a way that enables it to compile under the proposed rules.