<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>



<style>img {
max-width: 100%; height: auto;
}
</style>
</head>
<body>
<div class="content">

<h3>
Ben Gamari pushed to branch ghc-8.10
at <a href="https://gitlab.haskell.org/ghc/ghc">Glasgow Haskell Compiler / GHC</a>
</h3>
<h4>
Commits:
</h4>
<ul>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a16c24b7a75210fed9bb188404118e244af4c491">a16c24b7</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:31-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Add getCurrentThreadCPUTime helper

(cherry picked from commit cedd6f3041de6abe64dfa3257bec7730a9dced9f)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d1f9d71115ceb12e680be4391735ab2596a2b126">d1f9d711</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:31-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Prefer darwin-specific getCurrentThreadCPUTime

macOS Catalina now supports a non-POSIX-compliant version of clock_gettime
which cannot use the clock_gettime codepath.

Fixes #17906.

(cherry picked from commit bb586f894532baf1bcb822afd0df7f9fea198671)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/39f3b172d2483a31531814e0ca3a5dabef56ac73">39f3b172</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:31-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving-gc: Track time usage of nonmoving marking

(cherry picked from commit ace618cd2294989e783bd453cee88e0e1c0dad77)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/35f50728804a9951016725d170097326ce75d264">35f50728</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:31-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving: Eagerly flush all capabilities' update remembered sets

(cherry picked from commit 2fa79119570b358a4db61446396889b8260d7957)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/dc26ba8789597b824b5f82da976d1bb50e906698">dc26ba87</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:31-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving: Explicitly memoize block count

A profile cast doubt on whether the compiler hoisted the bound out the
loop as I would have expected here. It turns out it did but nevertheless
it seems clearer to just do this manually.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/ce49860d708d8cf59b83346d5d83c3b914bc4daf">ce49860d</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving: Clear bitmap after initializing block size

Previously nonmovingInitSegment would clear the bitmap before
initializing the segment's block size. This is broken since
nonmovingClearBitmap looks at the segment's block size to determine how
much bitmap to clear.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/1101739abf339a5222a64d72bcaea40c0a7c6a6e">1101739a</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">hadrian: Allow libnuma library path to be specified
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/6e8ede7e08966de426000c60f866cc8e894b7af5">6e8ede7e</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Zero block flags with -DZ

Block flags are very useful for determining the state of a block.
However, some block allocator users don't touch them, leading to
misleading values. Ensure that we zero then when zero-on-gc is set. This
is safe and makes the flags more useful during debugging.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/185a870e642cb7b16f4b8a7ae5b79af4a0f5156b">185a870e</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving: Fix incorrect failed_to_evac value during deadlock gc

Previously we would incorrectly set the failed_to_evac flag if we
evacuated a value due to a deadlock GC. This would cause us to mark more
things as dirty than strictly necessary. It also turned up a nasty but
which I will fix next.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/124a40cccd547178d01b43061fda8c7e04a2852f">124a40cc</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving: Fix handling of dirty objects

Previously we (incorrectly) relied on failed_to_evac to be "precise".
That is, we expected it to only be true if *all* of an object's fields
lived outside of the non-moving heap. However, does not match the
behavior of failed_to_evac, which is true if *any* of the object's
fields weren't promoted (meaning that some others *may* live in the
non-moving heap).

This is problematic as we skip the non-moving write barrier for dirty
objects (which we can only safely do if *all* fields point outside of
the non-moving heap).

Clearly this arises due to a fundamental difference in the behavior
expected of failed_to_evac in the moving and non-moving collector.
e.g., in the moving collector it is always safe to conservatively say
failed_to_evac=true whereas in the non-moving collector the safe value
is false.

This issue went unnoticed as I never wrote down the dirtiness
invariant enforced by the non-moving collector. We now define this
invariant as

    An object being marked as dirty implies that all of its fields are
    on the mark queue (or, equivalently, update remembered set).

To maintain this invariant we teach nonmovingScavengeOne to push the
fields of objects which we fail to evacuate to the update remembered
set. This is a simple and reasonably cheap solution and avoids the
complexity and fragility that other, more strict alternative invariants
would require.

All of this is described in a new Note, Note [Dirty flags in the
non-moving collector] in NonMoving.c.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b23f16d0e01e12e18f1039b1192e45c528b9e178">b23f16d0</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving: Optimise the write barrier

(cherry picked from commit a636eadac1f30bae37aeb6526f94893293f098b8)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d2581e98b75f6ac328aadbae8ca4aefd44e85c78">d2581e98</a></strong>
<div>
<span>by Ömer Sinan Ağacan</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">FastString: fix eager reading of string ptr in hashStr

This read causes NULL dereferencing when len is 0.

Fixes #17909

In the reproducer in #17909 this bug is triggered as follows:

- SimplOpt.dealWithStringLiteral is called with a single-char string
  ("=" in #17909)

- tailFS gets called on the FastString of the single-char string.

- tailFS checks the length of the string, which is 1, and calls
  mkFastStringByteString on the tail of the ByteString, which is an
  empty ByteString as the original ByteString has only one char.

- ByteString's unsafeUseAsCStringLen returns (NULL, 0) for the empty
  ByteString, which is passed to mkFastStringWith.

- mkFastStringWith gets hash of the NULL pointer via hashStr, which
  fails on empty strings because of this bug.

(cherry picked from commit d15b61608a542f6349b42224140b7d227b88ef4e)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/76059e3e471dc03970b1a325ed621370e4ea6982">76059e3e</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Improve error handling for VTA + deferred type errors

This fixes #17792

See Note [VTA for out-of-scope functions] in TcExpr

(cherry picked from commit 335b18bac3c361d243f427b66e67c2c94f5c6494)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a7dd83db50485c11597133e489fcf98281772f76">a7dd83db</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Add a missing zonk in tcHsPartialType

I omitted a vital zonk when refactoring tcHsPartialType in
   commit 48fb3482f8cbc8a4b37161021e846105f980eed4
   Author: Simon Peyton Jones <simonpj@microsoft.com>
   Date:   Wed Jun 5 08:55:17 2019 +0100

   Fix typechecking of partial type signatures

This patch fixes it and adds commentary to explain why.

Fixes #18008

(cherry picked from commit 658bda511237593bb80389280d0364180648058d)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/e3fcf26d43a79616d5ecf687cc8459e9be7f1201">e3fcf26d</a></strong>
<div>
<span>by Sylvain Henry</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Rts: show errno on failure (#18033)

(cherry picked from commit 4875d419ba066e479f7ac07f8b39ebe10c855859)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/ba788d22600950d07c876051c2bdb171eb9c5f85">ba788d22</a></strong>
<div>
<span>by Ryan Scott</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix two ASSERT buglets in reifyDataCon

Two `ASSERT`s in `reifyDataCon` were always using `arg_tys`, but
`arg_tys` is not meaningful for GADT constructors. In fact, it's
worse than non-meaningful, since using `arg_tys` when reifying a
GADT constructor can lead to failed `ASSERT`ions, as #17305
demonstrates.

This patch applies the simplest possible fix to the immediate
problem. The `ASSERT`s now use `r_arg_tys` instead of `arg_tys`, as
the former makes sure to give something meaningful for GADT
constructors. This makes the panic go away at the very least. There
is still an underlying issue with the way the internals of
`reifyDataCon` work, as described in
https://gitlab.haskell.org/ghc/ghc/issues/17305#note_227023, but we
leave that as future work, since fixing the underlying issue is
much trickier (see
https://gitlab.haskell.org/ghc/ghc/issues/17305#note_227087).

(cherry picked from commit cfb66d181ac45ce3d934bda3521b94277e6eb683)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/25d84fa215583286e5788ff8f1b4100df822cd9a">25d84fa2</a></strong>
<div>
<span>by Adam Gundry</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Reject all duplicate declarations involving DuplicateRecordFields (fixes #17965)

This fixes a bug that resulted in some programs being accepted that used the same
identifier as a field label and another declaration, depending on the order they
appeared in the source code.

(cherry picked from commit 0d8c7a6c7c3513089668f49efb0a2dd8b4bbe74a)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/646648a9e71b6ba81a359445abe0d95b8ba390b2">646648a9</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Ensure that printMinimalImports closes handle

Fixes #18166.

(cherry picked from commit 5afc160dee7142c96a842037fb64bee1429ad9ec)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/123c386bfb0e7742e3ee8ee04c00357cefc79b19">123c386b</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Make non-existent linker search path merely a warning

As noted in #18105, previously this resulted in a rather intrusive error
message. This is in contrast to the general expectation that search
paths are merely places to look, not places that must exist.

Fixes #18105.

(cherry picked from commit 24af9f30681444380c25465f555599da563713cb)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/06f05573892edc33eae634c9b9175aff7c5c4826">06f05573</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">nonmoving: Optimise log2_ceil

(cherry picked from commit 5f69016115414d0dd921e72f3edcd0b365966141)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/dae01c104edbe24be721261443ddd582320a7411">dae01c10</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Enable tracing of nonmoving heap census with -ln

Previously this was not easily available to the user. Fix this.
Non-moving collection lifecycle events are now reported with -lg.

(cherry picked from commit 7bfe9ac514e18c0b0e24ff55230fe98ec9db894c)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/72218602bf3ac1faa1c63b1c6342013c452a7e3d">72218602</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:32-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">users guide: Move eventlog documentation users guide

(cherry picked from commit c560dd07f506810eaabae2f582491138aa224819)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/79da3ca28d12306e5bc073d2f1b7ba130e12cd99">79da3ca2</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-05-24T20:42:33-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">users guide: Add documentation for non-moving GC events

(cherry picked from commit 02543d5ef9bd7a910fc9fece895780583ab9635a)
</pre>
</li>
</ul>
<h4>30 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#86d5486039a2ce83db2b33410cc15bb06e8b7132">
compiler/basicTypes/RdrName.hs
</a>
</li>
<li class="file-stats">
<a href="#3419b48ba29451268a93adc303033d2aabf68179">
compiler/rename/RnNames.hs
</a>
</li>
<li class="file-stats">
<a href="#3668e5951898e1cee434d7e6fb5a139287ebe70d">
compiler/typecheck/TcExpr.hs
</a>
</li>
<li class="file-stats">
<a href="#350c4076427c611b8f14e875a4ca553041c2b847">
compiler/typecheck/TcHsType.hs
</a>
</li>
<li class="file-stats">
<a href="#4f8d5e20ad75b577322cf46f2e146466d905fe43">
compiler/typecheck/TcSplice.hs
</a>
</li>
<li class="file-stats">
<a href="#853e3f0b2adba3af1c88bbccec2b53c4c5532e39">
compiler/utils/FastString.hs
</a>
</li>
<li class="file-stats">
<a href="#87db583be5c13c1f7b3c958b10e03d67b6a2ca06">
configure.ac
</a>
</li>
<li class="file-stats">
<a href="#2c8c4ca2eac2ad8b108ae37fa1b91a9f7676ca1e">
docs/users_guide/conf.py
</a>
</li>
<li class="file-stats">
<a href="#28cb2d1fcbc22664fcf251f87743f25d05fcd16f">
docs/users_guide/eventlog-formats.rst
</a>
</li>
<li class="file-stats">
<a href="#6ae923e173536bf0ddb39552416a7e21767287db">
docs/users_guide/runtime_control.rst
</a>
</li>
<li class="file-stats">
<a href="#4afc83c1ea6eb6b5e1defab5e25e77fde2847739">
hadrian/cfg/system.config.in
</a>
</li>
<li class="file-stats">
<a href="#3fd6f85e1eb999d14a760e95e4292600fd7673c8">
hadrian/src/Oracles/Flag.hs
</a>
</li>
<li class="file-stats">
<a href="#dddc9a1e614b7c087fad91f7b89472aa69ecade4">
hadrian/src/Oracles/Setting.hs
</a>
</li>
<li class="file-stats">
<a href="#d92ed897486e6597b1000abb84a65ad03542615b">
hadrian/src/Settings/Packages.hs
</a>
</li>
<li class="file-stats">
<a href="#f7bfc5e15e7497f29b41f6df46865c151a07955d">
includes/RtsAPI.h
</a>
</li>
<li class="file-stats">
<a href="#debe527847514360ea5e75538c7630ba2dfebba6">
includes/rts/EventLogFormat.h
</a>
</li>
<li class="file-stats">
<a href="#e179be788c7cf4fb635a747fa27d60f9d36c2018">
includes/rts/Time.h
</a>
</li>
<li class="file-stats">
<a href="#023c46971c621e339912811040e9c049ece01475">
libraries/base/GHC/Stats.hsc
</a>
</li>
<li class="file-stats">
<a href="#ab886ab520e51dbacc9947d1586d5257a6037f77">
rts/GetTime.h
</a>
</li>
<li class="file-stats">
<a href="#49d63c99feec397a2d9c3692f6d9f1c7698c81d0">
rts/ProfHeap.c
</a>
</li>
<li class="file-stats">
<a href="#640fc6f2f536ba83f1694f9a7ef3d43e2d0428d3">
rts/RtsFlags.c
</a>
</li>
<li class="file-stats">
<a href="#6c6e266b51f1c94d2ebf5aa2052f408397451f94">
rts/Stats.c
</a>
</li>
<li class="file-stats">
<a href="#b90c7236dd80d0ab7be1156ccd798e69994e38c6">
rts/Stats.h
</a>
</li>
<li class="file-stats">
<a href="#2ffbdc61d9d0e36978f07f62c00c08f33149e335">
rts/Updates.h
</a>
</li>
<li class="file-stats">
<a href="#9670354b74fe55079feca82e1510129734b46f4f">
rts/linker/PEi386.c
</a>
</li>
<li class="file-stats">
<a href="#8d4f2f35ca75df36e543dd637c726b7578faf8be">
rts/posix/GetTime.c
</a>
</li>
<li class="file-stats">
<a href="#ec675bd1dfbb74e562acdc649628789841b48f75">
rts/posix/itimer/Pthread.c
</a>
</li>
<li class="file-stats">
<a href="#a9accda65187a56e0d42dd7fb7a717af6b41d918">
rts/sm/BlockAlloc.c
</a>
</li>
<li class="file-stats">
<a href="#37a93df244a7789fddf557443b6398d06763e9cc">
rts/sm/Evac.c
</a>
</li>
<li class="file-stats">
<a href="#6477e10756faf038741e63d1ad499a1df809fe10">
rts/sm/GC.c
</a>
</li>
</ul>
<h5>The diff was not included because it is too large.</h5>

</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #777;">

<br>
<a href="https://gitlab.haskell.org/ghc/ghc/-/compare/37956be4958a260c884a20e08ca3bf00a9622e6f...79da3ca28d12306e5bc073d2f1b7ba130e12cd99">View it on GitLab</a>.
<br>
You're receiving this email because of your account on gitlab.haskell.org.
If you'd like to receive fewer emails, you can
adjust your notification settings.



</p>
</div>
</body>
</html>