<!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>
Simon Peyton Jones pushed to branch wip/T18891
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/b9d4dd9cbc4f1dd40e6beaf5d8301ac9d3034fca">b9d4dd9c</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:44:17-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">SMP.h: Add C11-style atomic operations
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/ccf2d4b091284a60acc6c16d166ea7cafade209f">ccf2d4b0</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Infrastructure for testing with ThreadSanitizer
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a61f66d6c14762869ad95b7646bce975df9f80f8">a61f66d6</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/CNF: Initialize all bdescrs in group

It seems wise and cheap to ensure that the whole bdescr of all blocks of
a compact group is valid, even if most cases only look at the flags
field.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/65136c134d1b6e2f2c5d7193fade3c99a8cb81c4">65136c13</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Capability: Intialize interrupt field

Previously this was left uninitialized.

Also clarify some comments.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b3ce6acaae1b386aeca6649738cf286ad71ed5cd">b3ce6aca</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Task: Make comments proper Notes
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d3890ac737e282a582f0cc9819dedd2a8c363501">d3890ac7</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/SpinLock: Move to proper atomics

This is fairly straightforward; we just needed to use relaxed operations
for the PROF_SPIN counters and a release store instead of a write
barrier.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/ef88712f5dcc9e245b4e3819be1889e659731b59">ef88712f</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/OSThreads: Fix data race

Previously we would race on the cached processor count. Avoiding this is
straightforward; just use relaxed operations.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/33a719c392be4d8a389a1331c6c88093148f7396">33a719c3</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/ClosureMaros: Use relaxed atomics
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f08951fd0279248bd4e9536e4cf44ba658aaf710">f08951fd</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">configure: Bump minimum-supported gcc version to 4.7

Since the __atomic_* builtins are not supported until gcc 4.7. Given
that this version was released in 2012 I think this is acceptable.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d584923a1e1fe92a4bb38b2cd1f0bf5a3b7802f0">d584923a</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Fix thread leak in hs_try_putmvar00[13]
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/bf1b0bc78da7dbe5f6fbda54b37a9cb165ff857f">bf1b0bc7</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T20:59:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Introduce SET_HDR_RELEASE

Also ensure that we also store the info table pointer last to ensure
that the synchronization covers all stores.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/1a2e9f5e8f125ea47b1d6d2a1740614109488c24">1a2e9f5e</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">gitlab-ci: Add nightly-x86_64-linux-deb9-tsan job
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/58a5b0e55dfb7bbb95f51ade650b1d45dc2d929c">58a5b0e5</a></strong>
<div>
<span>by GHC GitLab CI</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Mark setnumcapabilities001 as broken with TSAN

Due to #18808.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d9bc7dea72e0135cd0e969e8b4e977a33cbec906">d9bc7dea</a></strong>
<div>
<span>by GHC GitLab CI</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Skip divbyzero and derefnull under TSAN

ThreadSanitizer changes the output of these tests.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/fcc42a10ada33f2ad6c344fdd8f8468742bf35cd">fcc42a10</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Skip high memory usage tests with TSAN

ThreadSanitizer significantly increases the memory footprint of tests,
so much so that it can send machines into OOM.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/cae4bb3e0f65016be057db2f1b02f449ba646e74">cae4bb3e</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Mark hie002 as high_memory_usage

This test has a peak residency of 1GByte; this is large enough to
classify as "high" in my book.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/dae1b86abc7c22ae92eba264709546783ac4673f">dae1b86a</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Mark T9872[abc] as high_memory_usage

These all have a maximum residency of over 2 GB.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/c5a0bb22238a437ae050e8cc6120d5a41533866d">c5a0bb22</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">gitlab-ci: Disable documentation in TSAN build

Haddock chews through enough memory to cause the CI builders to OOM and
there's frankly no reason to build documentation in this job anyways.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/4cb1232ec5ad92f40ed494fde4a9f172cc4980fb">4cb1232e</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">TSANUtils: Ensure that C11 atomics are supported
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/7ed15f7f84f43729fd8373b8c6fdd07ede07d05e">7ed15f7f</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Mark T3807 as broken with TSAN

Due to #18883.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f7e6f012bcedbf60fac2631e223b8766c9afa959">f7e6f012</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">testsuite: Mark T13702 as broken with TSAN due to #18884
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/16b136b0c3c79833a1e35305f9c5d1b0511eda9c">16b136b0</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:36-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Factor out logic to identify a good capability for running a task

Not only does this make the control flow a bit clearer but it also
allows us to add a TSAN suppression on this logic, which requires
(harmless) data races.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/2781d68c5d94fd87435d6316c2d4118171e97b14">2781d68c</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:36-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Annotate benign race in waitForCapability
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f6b4b492d9c112c30ddc0bda2338b143b56faf4c">f6b4b492</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:36-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Clarify locking behavior of releaseCapability_
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/65219810a41f1c903838185a766baeba8954cc88">65219810</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:36-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Add assertions for task ownership of capabilities
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/31fa87ecb4ff1abc761d776d48e87cd0fd37bedd">31fa87ec</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:36-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Use relaxed atomics on n_returning_tasks

This mitigates the warning of a benign race on n_returning_tasks in
shouldYieldCapability.

See #17261.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/6517a2ea285688907e8d71e8313f04e919a24445">6517a2ea</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:36-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Mitigate races in capability interruption logic
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/2e9ba3f2881a59fde9932929dce7c42cdcfd4432">2e9ba3f2</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:36-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Capability: Use relaxed operations for last_free_capability
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/e10dde371229d45bcc864207cfb6e022dde51bf9">e10dde37</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:37-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Use relaxed operations for cap->running_task (TODO)

This shouldn't be necessary since only the owning thread of the capability
should be touching this.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/855325cdcad4c10e0f37c10934a62a07c6ec48b2">855325cd</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:37-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Schedule: Use relaxed operations for sched_state
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/811f915db3b682f33aad2c3e6ca039a6e8451c69">811f915d</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:37-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Accept data race in work-stealing implementation

This race is okay since the task is owned by the capability pushing it.
By Note [Ownership of Task] this means that the capability is free to
write to `task->cap` without taking `task->lock`.

Fixes #17276.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/8d2b3c3d1fcb9009b6dfcce85777e04bcec9d219">8d2b3c3d</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:37-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Eliminate data races on pending_sync
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f88710185acc0e02b334b96004f4b8fae38c5eb9">f8871018</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:37-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Schedule: Eliminate data races on recent_activity

We cannot safely use relaxed atomics here.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d079b9435382882b0b069ea40bcd287db18082d3">d079b943</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:37-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Avoid data races in message handling
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/06f80497b8bd5eea93b72989e9b58372ef482ef9">06f80497</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:37-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Messages: Drop incredibly fishy write barrier

executeMessage previously had a write barrier at the beginning of its
loop apparently in an attempt to synchronize with another thread's
writes to the Message. I would guess that the author had intended to use
a load barrier here given that there are no globally-visible writes done
in executeMessage.

I've removed the redundant barrier since the necessary load barrier is
now provided by the ACQUIRE_LOAD.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d4a87779dc691a4db876817e01ba237655768d77">d4a87779</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:38-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/ThreadPaused: Avoid data races
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/56778ab38eeb9fd683250a57c228f3821a444811">56778ab3</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:38-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Schedule: Eliminate data races in run queue management
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/086521f744f989a4f11585989f1304ab1333a61b">086521f7</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:38-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Eliminate shutdown data race on task counters
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/abad977849a70578bca4e5b17a85aff43e3327be">abad9778</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:38-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Threads: Avoid data races (TODO)

Replace barriers with appropriate ordering. Drop redundant barrier in
tryWakeupThread (the RELEASE barrier will be provided by sendMessage's
mutex release).

We use relaxed operations on why_blocked and the stack although it's not
clear to me why this is necessary.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/2f56be8a74f1f012f1756380ae111ec1327ddde0">2f56be8a</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Messages: Annotate benign race
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/7c0cdab17dcf57702bb57e4b9f4136701a33a2e0">7c0cdab1</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/RaiseAsync: Synchronize what_next read
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/6cc2a8a578688e1f0542373d913bc4b171239157">6cc2a8a5</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Task: Move debugTrace to avoid data race

Specifically, we need to hold all_tasks_mutex to read taskCount.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/bbaec97d1d3d9984736d5f6424785b1c95bd8312">bbaec97d</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Disable flawed assertion
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/dd175a926c0e9654cd6ac8d9d26b183540c87331">dd175a92</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:39-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Document schedulePushWork race
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/3416244b736b386f0bbf8369083f90110cd524a2">3416244b</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:40-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Capabiliity: Properly fix data race on n_returning_tasks

There is a real data race but can be made safe by using proper atomic
(but relaxed) accesses.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/dffd943207dd356a113ee8ff3e51227c2655a039">dffd9432</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:40-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Make write of to_cap->inbox atomic

This is necessary since emptyInbox may read from to_cap->inbox without
taking cap->lock.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/1f4cbc2942ad8b757a225b23c9f097f371ca490c">1f4cbc29</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:57-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/BlockAlloc: Use relaxed operations
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d0d07cffeded2b1d1b4ffed1f8b06eddc9f06600">d0d07cff</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:57-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Rework handling of mutlist scavenging statistics
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/9e5c7f6de8e3d4cda0c07e0f210d9d5004fc6131">9e5c7f6d</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:57-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Avoid data races in StablePtr implementation

This fixes two potentially problematic data races in the StablePtr
implementation:

 * We would fail to RELEASE the stable pointer table when enlarging it,
   causing other cores to potentially see uninitialized memory.

 * We would fail to ACQUIRE when dereferencing a stable pointer.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/316add6762aca4a01fbe71d264b0c65c11313929">316add67</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:57-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Storage: Use atomics
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/5c23bc4cd6936840deeb398bbea06165952f17c2">5c23bc4c</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:58-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Updates: Use proper atomic operations
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/3d0f033c5109ae0131b81e6b9aaf2a04ebeba1f4">3d0f033c</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:00:58-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Weak: Eliminate data races

By taking all_tasks_mutex in stat_exit. Also better-document the fact
that the task statistics are protected by all_tasks_mutex.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/edb4b92b218cee5b309866f3d236da30c5621567">edb4b92b</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:01:18-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/WSDeque: Rewrite with proper atomics

After a few attempts at shoring up the previous implementation, I ended
up turning to the literature and now use the proven implementation,

> N.M. Lê, A. Pop, A.Cohen, and F.Z. Nardelli. "Correct and Efficient
> Work-Stealing for Weak Memory Models". PPoPP'13, February 2013,
> ACM 978-1-4503-1922/13/02.

Note only is this approach formally proven correct under C11 semantics
but it is also proved to be a bit faster in practice.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d39bbd3dbd569d60c7f27f68a1f30885a30c3fa3">d39bbd3d</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:01:33-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Use relaxed atomics for whitehole spin stats
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/8f802f386ad5774a863f756f2d8d397903074700">8f802f38</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:01:33-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Avoid lock order inversion during fork

Fixes #17275.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/cef667b081c71008e0633d276349dd863cb46d7f">cef667b0</a></strong>
<div>
<span>by GHC GitLab CI</span>
<i>at 2020-10-24T21:01:34-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Use proper relaxe operations in getCurrentThreadCPUTime

Here we are doing lazy initialization; it's okay if we do the check more
than once, hence relaxed operation is fine.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/8cf50eb1b5f145d7bca9abae6220f4c2622e21b1">8cf50eb1</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:01:54-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/STM: Use atomics

This fixes a potentially harmful race where we failed to synchronize
before looking at a TVar's current_value.

Also did a bit of refactoring to avoid abstract over management of
max_commits.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/88a7ce3893fe16c7d345e91838722b18ad728740">88a7ce38</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:01:54-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/stm: Strengthen orderings to SEQ_CST instead of volatile

Previously the `current_value`, `first_watch_queue_entry`, and
`num_updates` fields of `StgTVar` were marked as `volatile` in an
attempt to provide strong ordering. Of course, this isn't sufficient.

We now use proper atomic operations. In most of these cases I strengthen
the ordering all the way to SEQ_CST although it's possible that some
could be weakened with some thought.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f97c59ce014687979fa731db7227773fa83d2156">f97c59ce</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:11-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Mitigate data races in event manager startup/shutdown
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/c7c3f8aa978dd6230e3b0f2d21dec84a47bd5e7c">c7c3f8aa</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:22-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Accept benign races in Proftimer
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/5a98dfcae41b79bed912521d1eeb2cbc09f0742b">5a98dfca</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:22-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Pause timer while changing capability count

This avoids #17289.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/01d9552509a94d1bd1a717f1730b1c513bf7fea8">01d95525</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:22-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix #17289
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/9a528985e8e738b4987b58938fad5711af81b61a">9a528985</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:23-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">suppress #17289 (ticker) race
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/1726ec419f3c537b28e1290424203c586408bd41">1726ec41</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:23-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Fix timer initialization

Previously `initScheduler` would attempt to pause the ticker and in so
doing acquire the ticker mutex. However, initTicker, which is
responsible for initializing said mutex, hadn't been called
yet.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/bfbe4366e658035a9182500ae286c71fc1ee54fd">bfbe4366</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:23-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Fix races in Pthread timer backend shudown

We can generally be pretty relaxed in the barriers here since the timer
thread is a loop.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/297acc71dbbc0786c55c178d5e5fc453d9f4f2f9">297acc71</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-24T21:02:44-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Stats: Hide a few unused unnecessarily global functions
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/aad1f803471fff1f187b0a0784dc38a867379847">aad1f803</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-30T00:41:14-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/GC: Use atomics
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d0bc05178ba8a36a8c18158a488471d15fbf97d1">d0bc0517</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-30T00:41:14-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Use RELEASE ordering in unlockClosure
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d44f523208d32b599fa7e1260de32515d2ef9944">d44f5232</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-30T00:41:14-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Storage: Accept races on heap size counters
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/4e4a73868488f83aa9d355d147e116408634c140">4e4a7386</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-30T00:41:14-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Join to concurrent mark thread during shutdown

Previously we would take all capabilities but fail to join on the thread
itself, potentially resulting in a leaked thread.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a80cc8577774a744d684cd1f513e373405cd2f2b">a80cc857</a></strong>
<div>
<span>by GHC GitLab CI</span>
<i>at 2020-10-30T00:41:14-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Fix race in GC CPU time accounting

Ensure that the GC leader synchronizes with workers before calling
stat_endGC.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/105d43db7bb7f399be3e5474d207e330d1b2da5a">105d43db</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-30T14:02:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/SpinLock: Separate out slow path

Not only is this in general a good idea, but it turns out that GCC
unrolls the retry loop, resulting is massive code bloat in critical
parts of the RTS (e.g. `evacuate`).
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/f7b45cde43f47f94b77411477aabdb56f8f63d66">f7b45cde</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-10-30T14:02:19-04:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Use relaxed ordering on spinlock counters
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b1dda15324bf08dcd6265e066577c18d4f3f061d">b1dda153</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T12:58:36-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts/Stats: Protect with mutex

While on face value this seems a bit heavy, I think it's far better than
enforcing ordering on every access.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/5c2e6bced838b7d7617af2bfb272889a9af16a76">5c2e6bce</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T12:58:36-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Tear down stats_mutex after exitHeapProfiling

Since the latter wants to call getRTSStats.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/ef25aaa107ae099a2a9bd80d3130664334c69482">ef25aaa1</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:02:11-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Annotate hopefully "benign" races in freeGroup
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/3a18155331e07e53b9f3b1d987ed430066b17aa4">3a181553</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:02:18-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Strengthen ordering in releaseGCThreads
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/af474f6246036d4f904949af96c5c74fb8d1dbe0">af474f62</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:05:38-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Suppress data race due to close

This suppresses the other side of a race during shutdown.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b4686bff56377a583f0605b81fae290d3fee4c4a">b4686bff</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:09:59-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/ci' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b8e66e0eecdc58ec5fea0b2c9a9454d38858886c">b8e66e0e</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:10:01-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/storage' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/375512cfbb968ed0ffbdf33153b71fab4b707dce">375512cf</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:10:02-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/wsdeque' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/65ebf07e459733b9dfb51b02ac987411bd478841">65ebf07e</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:10:03-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/misc' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/55c375d0bc1c7b9f5476d2b074f5da3539386c93">55c375d0</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:10:04-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/stm' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/a9f75fe23b47358bda585e9af3e2b44da7817c37">a9f75fe2</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:10:06-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/event-mgr' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/8325d6585bd1eb440456abcb05a638c44f2aee88">8325d658</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:10:24-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/timer' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/07e82ba52228580cfbd90ff031e657acbecc715b">07e82ba5</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-01T13:10:35-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge branch 'wip/tsan/stats' into wip/tsan/all
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/638f38c50e80a19275f3a06535a0dd8130a17a53">638f38c5</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-08T09:29:16-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Merge remote-tracking branch 'origin/wip/tsan/all'
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/22888798d224f96202480595fc49bc5c4b2f8328">22888798</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-08T12:08:40-05:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix haddock submodule

The previous merge mistakenly reverted it.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/df83bf7bf5ab3bc9e3bb9fac5c91e37064d68b5f">df83bf7b</a></strong>
<div>
<span>by Simon Peyton Jones</span>
<i>at 2020-11-09T13:00:20+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix kind inference for data types. Again.

This patch improves kcConDecls, when we are inferring the kind
of a data type decl.

Fixes #18891
</pre>
</li>
</ul>
<h4>30 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#587d266bb27a4dc3022bbed44dfa19849df3044c">
.gitlab-ci.yml
</a>
</li>
<li class="file-stats">
<a href="#9355bef855426caf5f526925edf351b20f9a86c4">
compiler/GHC/Tc/Gen/HsType.hs
</a>
</li>
<li class="file-stats">
<a href="#83d23a46bb6cdc8b1edc16f1fd2c8f5c53e2c9ca">
compiler/GHC/Tc/TyCl.hs
</a>
</li>
<li class="file-stats">
<a href="#87db583be5c13c1f7b3c958b10e03d67b6a2ca06">
configure.ac
</a>
</li>
<li class="file-stats">
<a href="#2eeb40f0acd6cb433ebe65e34262040b618908a7">
hadrian/hadrian.cabal
</a>
</li>
<li class="file-stats">
<a href="#1655041cfd1add79e4c335c656405ee3eb3bd0dd">
hadrian/src/Flavour.hs
</a>
</li>
<li class="file-stats">
<a href="#704958036ebddd9058fb1367e440b2ea1abb53e9">
hadrian/src/Settings.hs
</a>
</li>
<li class="file-stats">
<a href="#fbf853844dc48d850085cbef14c0af1e474cb087">
<span class="new-file">
+
hadrian/src/Settings/Flavours/ThreadSanitizer.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#40f83a2cddcbc1f8190b0551eb572ccf4ea88cc9">
includes/Rts.h
</a>
</li>
<li class="file-stats">
<a href="#452d5ee18aa2b91b6486a157ecf550dc84081872">
includes/rts/OSThreads.h
</a>
</li>
<li class="file-stats">
<a href="#397950c6118f4b5a74a10249b6bcc322ab8e2e25">
includes/rts/SpinLock.h
</a>
</li>
<li class="file-stats">
<a href="#0e9120c800f0c7864f3631f8fb8d7035a4778f97">
includes/rts/StablePtr.h
</a>
</li>
<li class="file-stats">
<a href="#32b24c17e385bd15c4751ab0da5f55876fd57f51">
<span class="new-file">
+
includes/rts/TSANUtils.h
</span>
</a>
</li>
<li class="file-stats">
<a href="#aa19e824b3a8c24a7bf37f8352997022b14a5a0c">
includes/rts/storage/ClosureMacros.h
</a>
</li>
<li class="file-stats">
<a href="#0ea78c0eb38d298692960f63f47248f6464a0479">
includes/rts/storage/Closures.h
</a>
</li>
<li class="file-stats">
<a href="#94ca41c5afbb3d932bd6f37ee16458322988fb69">
includes/rts/storage/GC.h
</a>
</li>
<li class="file-stats">
<a href="#fbe566a2918ba0562be9aceeb5d07448bf2f9ed0">
includes/stg/SMP.h
</a>
</li>
<li class="file-stats">
<a href="#e5d5c3eb2ba69f9a4ab3f56a8e9dab426c012963">
libraries/base/GHC/Event/Control.hs
</a>
</li>
<li class="file-stats">
<a href="#46661d25ba83700d4344aaa428308c552e201be8">
<span class="new-file">
+
rts/.tsan-suppressions
</span>
</a>
</li>
<li class="file-stats">
<a href="#33249795fee267712d5c3a7ecfa9f2edea260401">
rts/Capability.c
</a>
</li>
<li class="file-stats">
<a href="#62ec5569a8af1e443ae952b393d15b9dd1cea199">
rts/Capability.h
</a>
</li>
<li class="file-stats">
<a href="#63bb2dcb45bf7982130b0b95ecf366bf1a617e82">
rts/Messages.c
</a>
</li>
<li class="file-stats">
<a href="#a3b0919403d8f328f07cda7c4a7f9817c369357c">
rts/Proftimer.c
</a>
</li>
<li class="file-stats">
<a href="#515f190a948b1d6c490c96f75a3f909580e927b0">
rts/RaiseAsync.c
</a>
</li>
<li class="file-stats">
<a href="#9ed11d0519762dae04656481b089dbb5b05acf98">
rts/RtsStartup.c
</a>
</li>
<li class="file-stats">
<a href="#632a1fac336e62e26d0af2de3f023c11a62c927a">
rts/SMPClosureOps.h
</a>
</li>
<li class="file-stats">
<a href="#e137645f8a9be9fa32cc764e19cea2b492e33d9c">
rts/STM.c
</a>
</li>
<li class="file-stats">
<a href="#7d6961cb073b9fe3df3a81f0ad5cf36eed293c42">
rts/Schedule.c
</a>
</li>
<li class="file-stats">
<a href="#52526efc348b52718c69d51f8df6e5425ff68d48">
rts/Schedule.h
</a>
</li>
<li class="file-stats">
<a href="#b1247567bf64d38ef0ee9a14575ac22983232204">
rts/Sparks.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/ae91a8279e2ece465a1b174da90c972c9027e218...df83bf7bf5ab3bc9e3bb9fac5c91e37064d68b5f">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>