<pre style='margin:0'>
Herby Gillot (herbygillot) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e15047394daf12601a65bfe782435a2d31b66e5e">https://github.com/macports/macports-ports/commit/e15047394daf12601a65bfe782435a2d31b66e5e</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit e15047394daf12601a65bfe782435a2d31b66e5e
</span>Author: Sergey Fedorov <barracuda@macos-powerpc.org>
AuthorDate: Thu Aug 1 08:29:48 2024 +0800

<span style='display:block; white-space:pre;color:#404040;'>    folly: update to 2024.07.29.00
</span>---
 devel/folly/Portfile                               |  25 ++-
 ...ak-static-trace-point-unused-variable-warn.diff |  67 --------
 ...atch-Revert-breaking-commit-re-threadlocal.diff |  83 ++++++++++
 devel/folly/files/patch-legacy-systems.diff        |  52 +++---
 .../files/patch-revert-MurmurHash-breakage.diff    | 174 +++++++++++++++++++++
 5 files changed, 297 insertions(+), 104 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/folly/Portfile b/devel/folly/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index fb8c062dc3c..96129189275 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/folly/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/folly/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -20,11 +20,11 @@ if {[string match *clang* ${configure.compiler}]} {
</span> # NB: Facebook does not do API stability, apparently, so please don't
 # upgrade without also upgrading its dependents, as listed by:
 # port list rdepends:folly
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup        facebook folly 2024.06.03.00 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        facebook folly 2024.07.29.00 v
</span> revision            0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           rmd160  b80342399a8cc1a63a0a57eea302d0522bc5ee14 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  29c0fb464d081295f2c04c92414802b628e8c1d37b993948d22f62aed8ab2b56 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    4110562
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  e9908da0b839c103e9f329e27366aabe53105687 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  b493b0ca95f3173c748c2b9771b55e9f25d7465e9364c326483bc32655394975 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    4154380
</span> 
 categories          devel
 license             Apache-2
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -73,9 +73,20 @@ cmake.generator     Ninja
</span> # https://github.com/facebook/folly/pull/1907
 patchfiles-append   patch-legacy-systems.diff
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Ironically, commit claiming to fix unsupported platforms does the reverse
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# and breaks build of fizz. Revert it.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles-append   patch-Revert-Break-static-trace-point-unused-variable-warn.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/facebook/folly/issues/2266
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platform darwin {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${os.major} < 20 && ${configure.cxx_stdlib} eq "libc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-Revert-breaking-commit-re-threadlocal.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Broken by https://github.com/facebook/folly/commit/1110819343455b5f698e8d01a951b9da1b3b9c5a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Not macOS-specific.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+platform powerpc {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-revert-MurmurHash-breakage.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
 configure.args-append   -DBUILD_SHARED_LIBS=ON \
                         -DFOLLY_USE_JEMALLOC=0
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/folly/files/patch-Revert-Break-static-trace-point-unused-variable-warn.diff b/devel/folly/files/patch-Revert-Break-static-trace-point-unused-variable-warn.diff
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index d45ccc2ac3f..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/folly/files/patch-Revert-Break-static-trace-point-unused-variable-warn.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,67 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From f2bdbe90056ffe40041c3ecce2aae55c5d18ea3f Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Sergey Fedorov <barracuda@macos-powerpc.org>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Sat, 8 Jun 2024 14:06:58 +0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Revert "Break static trace point unused variable
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- warnings on unsupported platforms"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-This reverts commit b85c08e5e5f2729f2f50dc89b5d464b9f5e58c69.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- folly/tracing/StaticTracepoint.h | 39 ++------------------------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 2 insertions(+), 37 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git folly/tracing/StaticTracepoint.h folly/tracing/StaticTracepoint.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 02e099bb3..ec931da57 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- folly/tracing/StaticTracepoint.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ folly/tracing/StaticTracepoint.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -42,49 +42,14 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define FOLLY_HAVE_SDT 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// Mark variadic macro args as unused from https://stackoverflow.com/a/31470425
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED0()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED1(a) (void)(a)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED2(a, b) (void)(a), FOLLY_UNUSED1(b)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED3(a, b, c) (void)(a), FOLLY_UNUSED2(b, c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED4(a, b, c, d) (void)(a), FOLLY_UNUSED3(b, c, d)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED5(a, b, c, d, e) (void)(a), FOLLY_UNUSED4(b, c, d, e)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED6(a, b, c, d, e, f) (void)(a), FOLLY_UNUSED5(b, c, d, e, f)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED7(a, b, c, d, e, f, g) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  (void)(a), FOLLY_UNUSED6(b, c, d, e, f, g)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_UNUSED8(a, b, c, d, e, f, g, h) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  (void)(a), FOLLY_UNUSED7(b, c, d, e, f, g, h)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_VA_NUM_ARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, N, ...) N
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_VA_NUM_ARGS(...) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  FOLLY_VA_NUM_ARGS_IMPL(100, ##__VA_ARGS__, 8, 7, 6, 5, 4, 3, 2, 1, 0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_ALL_UNUSED_IMPL_(nargs) FOLLY_UNUSED##nargs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_ALL_UNUSED_IMPL(nargs) FOLLY_ALL_UNUSED_IMPL_(nargs)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#if defined(_MSC_VER)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_ALL_UNUSED(...)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#else
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_ALL_UNUSED(...) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  FOLLY_ALL_UNUSED_IMPL(FOLLY_VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define FOLLY_SDT(provider, name, ...) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   do {                                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    FOLLY_ALL_UNUSED(__VA_ARGS__);     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } while (0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define FOLLY_SDT_WITH_SEMAPHORE(provider, name, ...) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   do {                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    FOLLY_ALL_UNUSED(__VA_ARGS__);                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   } while (0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #define FOLLY_SDT_IS_ENABLED(provider, name) (false)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_SDT_SEMAPHORE(provider, name) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  folly_sdt_semaphore_##provider##_##name
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_SDT_DEFINE_SEMAPHORE(provider, name)    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  extern "C" {                                        \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  unsigned short FOLLY_SDT_SEMAPHORE(provider, name); \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define FOLLY_SDT_DECLARE_SEMAPHORE(provider, name) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  extern "C" unsigned short FOLLY_SDT_SEMAPHORE(provider, name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define FOLLY_SDT_DEFINE_SEMAPHORE(provider, name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define FOLLY_SDT_DECLARE_SEMAPHORE(provider, name)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #endif
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/folly/files/patch-Revert-breaking-commit-re-threadlocal.diff b/devel/folly/files/patch-Revert-breaking-commit-re-threadlocal.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..65b736587e2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/folly/files/patch-Revert-breaking-commit-re-threadlocal.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,83 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From ea538d3975c94c5d0a3d2eb2b0ab9f98fa182089 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Thu, 25 Jul 2024 11:10:58 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Revert breaking commit re threadlocal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly/ThreadLocal.h                   | 8 ++++----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly/concurrency/memory/TLRefCount.h | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly/settings/detail/SettingsImpl.h  | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly/test/ThreadLocalTest.cpp        | 2 +-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 4 files changed, 7 insertions(+), 7 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/ThreadLocal.h folly/ThreadLocal.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 114b30f20..a610d3d4f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/ThreadLocal.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/ThreadLocal.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -67,9 +67,9 @@ class ThreadLocalPtr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <class T, class Tag = void, class AccessMode = void>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class ThreadLocal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  public:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  constexpr ThreadLocal() : constructor_([]() { return T(); }) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  constexpr ThreadLocal() : constructor_([]() { return new T(); }) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  template <typename F, std::enable_if_t<is_invocable_r_v<T, F>, int> = 0>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  template <typename F, std::enable_if_t<is_invocable_r_v<T*, F>, int> = 0>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   explicit ThreadLocal(F&& constructor)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       : constructor_(std::forward<F>(constructor)) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -100,13 +100,13 @@ class ThreadLocal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ThreadLocal& operator=(const ThreadLocal&) = delete;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   FOLLY_NOINLINE T* makeTlp() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    auto const ptr = new T(constructor_());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    auto const ptr = static_cast<T*>(constructor_());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     tlp_.reset(ptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return ptr;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   mutable ThreadLocalPtr<T, Tag, AccessMode> tlp_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  std::function<T()> constructor_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  std::function<void*()> constructor_;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/concurrency/memory/TLRefCount.h folly/concurrency/memory/TLRefCount.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 88ecb2666..f0c24c72a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/concurrency/memory/TLRefCount.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/concurrency/memory/TLRefCount.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -27,7 +27,7 @@ class TLRefCount {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   using Int = int64_t;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   TLRefCount()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      : localCount_([&]() { return LocalRefCount(*this); }),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      : localCount_([&]() { return new LocalRefCount(*this); }),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         collectGuard_(this, [](void*) {}) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ~TLRefCount() noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/settings/detail/SettingsImpl.h folly/settings/detail/SettingsImpl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 42ddb3048..740dfe963 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/settings/detail/SettingsImpl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/settings/detail/SettingsImpl.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -387,7 +387,7 @@ class SettingCore : public SettingCoreBase {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         defaultValue_(std::move(defaultValue)),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         trivialStorage_(trivialStorage),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         localValue_([]() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          return cacheline_aligned<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          return new cacheline_aligned<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               std::pair<Version, std::shared_ptr<Contents>>>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               std::in_place, 0, nullptr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/test/ThreadLocalTest.cpp folly/test/ThreadLocalTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f9482538d..4fa1acd1f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/test/ThreadLocalTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/test/ThreadLocalTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -261,7 +261,7 @@ TEST(ThreadLocal, NotDefaultConstructible) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     explicit Object(int v) : value{v} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   std::atomic<int> a{};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  ThreadLocal<Object> o{[&a] { return Object(a++); }};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  ThreadLocal<Object> o{[&a] { return new Object(a++); }};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   EXPECT_EQ(0, o->value);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   std::thread([&] { EXPECT_EQ(1, o->value); }).join();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/folly/files/patch-legacy-systems.diff b/devel/folly/files/patch-legacy-systems.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index 8c4084c6be3..0c55ada4c95 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/folly/files/patch-legacy-systems.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/folly/files/patch-legacy-systems.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -420,48 +420,40 @@ index 12320cb19..d4bac0a87 100644
</span>    return uint64_t(GetCurrentThreadId());
  #elif defined(__FreeBSD__)
 diff --git folly/system/ThreadName.cpp folly/system/ThreadName.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 0701d99f1..2e69750e3 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 52c4ddd64..4cddafe13 100644
</span> --- folly/system/ThreadName.cpp
 +++ folly/system/ThreadName.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -52,9 +52,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -52,7 +52,7 @@
</span>  #define FOLLY_HAS_PTHREAD_SETNAME_NP_THREAD_NAME 0
  #endif
  
 -#if defined(__APPLE__)
<span style='display:block; white-space:pre;background:#ffe0e0;'>--#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__APPLE__) && !defined(__POWERPC__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // macOS 10.6+ has pthread_setname_np(const char*) (1 param)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && !defined(__POWERPC__) && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1060)
</span>  #define FOLLY_HAS_PTHREAD_SETNAME_NP_NAME 1
<span style='display:block; white-space:pre;background:#ffe0e0;'>- #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FOLLY_HAS_PTHREAD_SETNAME_NP_NAME 0
</span> diff --git folly/test/ConstexprMathTest.cpp folly/test/ConstexprMathTest.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index db61e050c..c478fc138 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index bc48de553..ca0577970 100644
</span> --- folly/test/ConstexprMathTest.cpp
 +++ folly/test/ConstexprMathTest.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -985,10 +985,12 @@ TEST_F(ConstexprMathTest, constexpr_exp_floating) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     constexpr auto a = folly::constexpr_exp(3.3);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     EXPECT_DOUBLE_EQ(std::exp(3.3), a);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -987,7 +987,7 @@ TEST_F(ConstexprMathTest, constexpr_exp_floating) {
</span>    }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef __ppc__
</span>    {
      constexpr auto a = folly::constexpr_exp(471.L);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-     EXPECT_DOUBLE_EQ(std::exp(471.L), a);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     constexpr auto a = folly::constexpr_exp(600.);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     EXPECT_NE(lim::infinity(), a);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__APPLE__) && defined(FOLLY_AARCH64)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && (FOLLY_AARCH64 || FOLLY_PPC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     EXPECT_LT( // too inexact for expect-double-eq
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         std::exp(471.L) / a - 1,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         16 * lim::epsilon());
</span> diff --git folly/test/IteratorsTest.cpp folly/test/IteratorsTest.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 63195eced..db1235f7e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 63195eced..21741776a 100644
</span> --- folly/test/IteratorsTest.cpp
 +++ folly/test/IteratorsTest.cpp
 @@ -42,7 +42,9 @@ TEST(IteratorsTest, IterFacadeHasCorrectTraits) {
    static_assert(
        std::is_same<TR::iterator_category, std::forward_iterator_tag>::value,
        "");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !FOLLY_PPC
</span>    static_assert(std::is_same<TR::difference_type, ssize_t>::value, "");
 +#endif
  }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -471,14 +463,14 @@ index 63195eced..db1235f7e 100644
</span>    static_assert(
        std::is_same<TR::iterator_category, std::forward_iterator_tag>::value,
        "");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !FOLLY_PPC
</span>    static_assert(std::is_same<TR::difference_type, ssize_t>::value, "");
 +#endif
  }
  
  TEST(IteratorsTest, IterAdaptorWithPointer) {
 diff --git folly/test/MemsetBenchmark.cpp folly/test/MemsetBenchmark.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 139987d0d..62423f925 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 139987d0d..afe5af1aa 100644
</span> --- folly/test/MemsetBenchmark.cpp
 +++ folly/test/MemsetBenchmark.cpp
 @@ -25,6 +25,10 @@
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -496,7 +488,7 @@ index 139987d0d..62423f925 100644
</span>    assert(FLAGS_step > 0);
  
    size_t totalBufSize = (FLAGS_max_size + FLAGS_page_offset + 4095) & ~4095;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED < 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED < 101500)
</span> +  temp_buf = (uint8_t*)malloc(totalBufSize);
 +#else
    temp_buf = (uint8_t*)aligned_alloc(4096, totalBufSize);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -505,7 +497,7 @@ index 139987d0d..62423f925 100644
</span>    for (size_t i = 0; i < totalBufSize; i++) {
      temp_buf[i] = 0;
 diff --git folly/test/MemsetTest.cpp folly/test/MemsetTest.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index b1deaca05..b65b53acd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b1deaca05..254dafb42 100644
</span> --- folly/test/MemsetTest.cpp
 +++ folly/test/MemsetTest.cpp
 @@ -21,6 +21,10 @@
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -523,7 +515,7 @@ index b1deaca05..b65b53acd 100644
</span>  
  TEST(MemsetAsmTest, alignedBuffer) {
    constexpr size_t kMaxSize = 2 * kPageSize;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED < 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED < 101500)
</span> +  uint8_t* buf = reinterpret_cast<uint8_t*>(
 +      malloc(kMaxSize + 2 * kPageSize));
 +#else
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -537,7 +529,7 @@ index b1deaca05..b65b53acd 100644
</span>  }
  
  TEST(MemsetAsmTest, unalignedBuffer) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED < 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED < 101500)
</span> +  uint8_t* buf =
 +      reinterpret_cast<uint8_t*>(malloc(2 * kPageSize));
 +#else
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -548,14 +540,14 @@ index b1deaca05..b65b53acd 100644
</span>      testMemsetImpl(buf + alignment, 256);
    }
 diff --git folly/test/OptionalTest.cpp folly/test/OptionalTest.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 060b3bd76..057e25034 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 060b3bd76..941750aa8 100644
</span> --- folly/test/OptionalTest.cpp
 +++ folly/test/OptionalTest.cpp
 @@ -74,9 +74,11 @@ struct NoDefault {
  
  } // namespace
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !FOLLY_PPC
</span>  static_assert(sizeof(Optional<char>) == 2, "");
 -static_assert(sizeof(Optional<int>) == 8, "");
  static_assert(sizeof(Optional<NoDefault>) == 4, "");
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/devel/folly/files/patch-revert-MurmurHash-breakage.diff b/devel/folly/files/patch-revert-MurmurHash-breakage.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..e8e4cd32ac2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/folly/files/patch-revert-MurmurHash-breakage.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,174 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 8d9130fc685f2955657ee43ed53cc3019ce3faa8 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Sergey Fedorov <barracuda@macos-powerpc.org>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Thu, 1 Aug 2024 07:21:48 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Unbreak MurmurHash: revert
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1110819343455b5f698e8d01a951b9da1b3b9c5a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly/hash/BUCK                    |  1 -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly/hash/MurmurHash.h            | 27 +++---------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly/hash/test/MurmurHashTest.cpp | 69 ++++++++++++------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 3 files changed, 32 insertions(+), 65 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/hash/BUCK folly/hash/BUCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index af523d04a..e2f156106 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/hash/BUCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/hash/BUCK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -67,6 +67,5 @@ cpp_library(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     exported_deps = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         "//folly:c_portability",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         "//folly/lang:bits",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        "//folly/portability:constexpr",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/hash/MurmurHash.h folly/hash/MurmurHash.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8bdf9e526..82854e72e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/hash/MurmurHash.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/hash/MurmurHash.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -20,7 +20,6 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/CPortability.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/lang/Bits.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#include <folly/portability/Constexpr.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace folly {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace hash {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -32,17 +31,6 @@ FOLLY_ALWAYS_INLINE constexpr std::uint64_t shiftMix(std::uint64_t v) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return v ^ (v >> kShift);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-FOLLY_ALWAYS_INLINE constexpr std::uint64_t constexprLoad64(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const char* s, std::size_t l) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static_assert(kIsLittleEndian);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  std::uint64_t ret = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  for (std::size_t i = 0; i < l; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    ret |= std::uint64_t(static_cast<uint8_t>(s[i])) << (i * 8);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  return ret;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } // namespace detail
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -51,7 +39,7 @@ FOLLY_ALWAYS_INLINE constexpr std::uint64_t constexprLoad64(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  * https://en.wikipedia.org/wiki/MurmurHash
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+  */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-constexpr std::uint64_t murmurHash64(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++inline std::uint64_t murmurHash64(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     const char* key, std::size_t len, std::uint64_t seed) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   constexpr std::uint64_t kMul = 0xc6a4a7935bd1e995UL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -59,19 +47,14 @@ constexpr std::uint64_t murmurHash64(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const char* beg = key;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const char* end = beg + (len & ~0x7);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  const std::size_t tail = len & 0x7;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  for (const char* p = beg; p != end; p += 8) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const std::uint64_t k = folly::is_constant_evaluated_or(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        ? detail::constexprLoad64(p, 8)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        : loadUnaligned<std::uint64_t>(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  for (const char* p = beg; p != end; p += sizeof(std::uint64_t)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const std::uint64_t k = loadUnaligned<std::uint64_t>(p);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     hash = (hash ^ detail::shiftMix(k * kMul) * kMul) * kMul;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (tail != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    const std::uint64_t k = folly::is_constant_evaluated_or(false)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        ? detail::constexprLoad64(end, tail)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        : partialLoadUnaligned<std::uint64_t>(end, tail);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if ((len & 0x7) != 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    const std::uint64_t k = partialLoadUnaligned<std::uint64_t>(end, len & 0x7);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     hash ^= k;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     hash *= kMul;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/hash/test/MurmurHashTest.cpp folly/hash/test/MurmurHashTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 8cd0e5a58..e6e2487eb 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/hash/test/MurmurHashTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/hash/test/MurmurHashTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -21,56 +21,41 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/portability/GTest.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define TEST_CASES(X)                                                      \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /* Empty string */                                                       \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("", UINT64_C(0))                                                       \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /* Short sequences, no execution of primary loop, only tail handling. */ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0", UINT64_C(5533571732986600803))                                    \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("01", UINT64_C(2988402087957123519))                                   \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("012", UINT64_C(18121251311279197961))                                 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123", UINT64_C(3086299600550921888))                                 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("01234", UINT64_C(12373468686010462630))                               \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("012345", UINT64_C(8037360064841115407))                               \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456", UINT64_C(12284635732915976134))                             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /* Only primary loop. */                                                 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("01234567", UINT64_C(9778579411364587418))                             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF", UINT64_C(8277819783762704778))                     \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF01234567", UINT64_C(9980960296277708772))             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /* Primary loop and tail. */                                             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF0", UINT64_C(654503456484488283))                     \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF01", UINT64_C(10240825431821950816))                  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF012", UINT64_C(6811778381211949987))                  \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF0123", UINT64_C(10791461727592423385))                \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF01234", UINT64_C(11236139906480711106))               \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF012345", UINT64_C(8264417865430344363))               \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("0123456789ABCDEF0123456", UINT64_C(2915833106541791378))              \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  /* Sequences with bytes represented as negative chars. */                \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("\x80", UINT64_C(13393303071874499911))                                \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("\x80\x81", UINT64_C(3896321919913970216))                             \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("\x80\x81\x82\x83\x84\x85\x86\x87", UINT64_C(2468552239318681156))     \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  X("\x61\x80\x81\x82\x83\x84\x85\x86\x87\x62", UINT64_C(836019401831928519))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-constexpr std::uint64_t murmurHash64(std::string_view input) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++std::uint64_t murmurHash64(std::string_view input) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return folly::hash::murmurHash64(input.data(), input.size(), /* seed */ 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } // namespace
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-TEST(MurmurHash, Runtime){
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define X(s, expected) EXPECT_EQ(murmurHash64(s), expected);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    TEST_CASES(X)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#undef X
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++TEST(MurmurHash, Empty) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64(""), 0ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++TEST(MurmurHash, Tail) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // Short sequences, no execution of primary loop, only tail handling.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0"), 5533571732986600803ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("01"), 2988402087957123519ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("012"), 18121251311279197961ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123"), 3086299600550921888ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("01234"), 12373468686010462630ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("012345"), 8037360064841115407ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456"), 12284635732915976134ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-TEST(MurmurHash, Constexpr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#define X(s, expected)                      \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  {                                         \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    constexpr uint64_t h = murmurHash64(s); \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    static_assert(h == expected);           \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++TEST(MurmurHash, PrimaryLoop) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("01234567"), 9778579411364587418ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF"), 8277819783762704778ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF01234567"), 9980960296277708772ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  TEST_CASES(X)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#undef X
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++TEST(MurmurHash, PrimaryLoopAndTail) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF0"), 654503456484488283ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF01"), 10240825431821950816ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF012"), 6811778381211949987ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF0123"), 10791461727592423385ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF01234"), 11236139906480711106ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF012345"), 8264417865430344363ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  EXPECT_EQ(murmurHash64("0123456789ABCDEF0123456"), 2915833106541791378ULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span></pre><pre style='margin:0'>

</pre>