<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>