<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/dbbe63695b82353deb297e066a12a9069ab9ddad">https://github.com/macports/macports-ports/commit/dbbe63695b82353deb297e066a12a9069ab9ddad</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit dbbe63695b82353deb297e066a12a9069ab9ddad
</span>Author: barracuda156 <vital.had@gmail.com>
AuthorDate: Thu Jan 25 03:20:05 2024 +0800
<span style='display:block; white-space:pre;color:#404040;'> folly: update to 2024.01.22.00, support testing
</span>---
devel/folly/Portfile | 57 +++-
devel/folly/files/patch-older-systems.diff | 495 +++++++++++++++++++++++------
2 files changed, 453 insertions(+), 99 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 893c601596c..21288f4aa05 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.01.08.00 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup facebook folly 2024.01.22.00 v
</span> revision 0
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums rmd160 be1a27c48af23af50cee6268fd14a9fbaf5f454b \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 97334f8c7a8dfd933381c0afacd3ab48000f3a90f74d83482b8ec259b997d039 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 3962098
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums rmd160 440ea5d76c1325aa933757de92871a85111c56f0 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 8423580be1c7cd6a60ae3fd7ba8ace5b26e86b80de6933901a219d7027692036 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 3968413
</span>
categories devel
license Apache-2
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -69,19 +69,19 @@ depends_lib-append port:bzip2 \
</span>
cmake.generator Ninja
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/facebook/folly/pull/2124
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/facebook/folly/pull/1907
</span> patchfiles-append patch-older-systems.diff
configure.args-append -DBUILD_SHARED_LIBS=ON \
-DFOLLY_USE_JEMALLOC=0
<span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.thread_local_storage \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ yes
</span> compiler.cxx_standard 2017
configure.cxxflags-append \
-std=c++17
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# error: TARGET_OS_xxx not defined, evaluates to 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configure.cppflags-append \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -Wno-undef-prefix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> # error: typedef redefinition with different types ('uint8_t' (aka 'unsigned char') vs 'enum clockid_t')
compiler.blacklist-append {clang < 1100}
# error: 'path' is unavailable: introduced in macOS 10.15
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -116,9 +116,13 @@ platform darwin {
</span> configure.ldflags-append \
-latomic
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[string match *clang* ${configure.compiler}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # error: TARGET_OS_xxx not defined, evaluates to 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.cppflags-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -Wno-undef-prefix
</span> }
# Fix for building in Rosetta, so that x86 SSE is not invoked:
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if {${os.major} == 10 && ${build_arch} eq "ppc"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${os.major} == 10 && ${configure.build_arch} eq "ppc"} {
</span> configure.args-append -DCMAKE_LIBRARY_ARCHITECTURE="ppc" \
-DIS_X86_64_ARCH=OFF
}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -141,3 +145,38 @@ variant native description {Build with best native support for local CPU capabil
</span> -march=native
}
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# FIXME: at the moment about 90% of tests pass on PowerPC.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This is somewhat worse than Sonoma arm64, where 91% of tests pass.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/facebook/folly/issues/2128
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+variant tests description {Enable testing} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.pre_args-replace -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ configure.args-append -DBUILD_TESTS=ON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ pre-test {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {${os.platform} eq "darwin" && ${configure.cxx_stdlib} ne "libc++"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach testexec [glob ${cmake.build_dir}/*test] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ move ${testexec} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${testexec}-orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set wrapper [open "${testexec}" w 0755]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} "#!/bin/bash"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} {if [ -n "$DYLD_LIBRARY_PATH" ]; then}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} " DYLD_LIBRARY_PATH=${prefix}/lib/libgcc:\./:\${DYLD_LIBRARY_PATH}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} {else}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} " DYLD_LIBRARY_PATH=${prefix}/lib/libgcc:\./"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} {fi}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} {export DYLD_LIBRARY_PATH}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts ${wrapper} {exec "${0}-orig" "$@"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ close $wrapper
</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 infrastructure uses /bin/ps, which is forbidden by sandboxing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append portsandbox_profile " (allow process-exec (literal \"/bin/ps\") (with no-profile))"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ test.run yes
</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-older-systems.diff b/devel/folly/files/patch-older-systems.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index 813b716ec46..4711bd66989 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/devel/folly/files/patch-older-systems.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/devel/folly/files/patch-older-systems.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,64 +1,97 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git folly/io/async/fdsock/AsyncFdSocket.h folly/io/async/fdsock/AsyncFdSocket.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index d3d84bb58..8fbfbd9ba 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- folly/io/async/fdsock/AsyncFdSocket.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ folly/io/async/fdsock/AsyncFdSocket.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -19,6 +19,16 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/async/AsyncSocket.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #include <folly/io/async/fdsock/SocketFds.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if MAC_OS_X_VERSION_MIN_REQUIRED < 110000
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef __DARWIN_ALIGN32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#undef __DARWIN_ALIGN32
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define __DARWIN_ALIGN32(p) ((__darwin_size_t)((__darwin_size_t)(p) + __DARWIN_ALIGNBYTES32) &~ __DARWIN_ALIGNBYTES32)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</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;'>- namespace folly {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- // Including `gtest/gtest_prod.h` would make gtest/gmock a hard dep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span> diff --git CMake/folly-deps.cmake CMake/folly-deps.cmake
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 989259a87..7fa4cb4e5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c72273a73..eb4627637 100644
</span> --- CMake/folly-deps.cmake
+++ CMake/folly-deps.cmake
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -247,7 +250,7 @@ check_cxx_source_compiles("
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -247,7 +247,7 @@ check_cxx_source_compiles("
</span> FOLLY_STDLIB_LIBCPP
)
-if (APPLE)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+if (APPLE AND NOT(CMAKE_CXX_COMPILER_ID STREQUAL "GNU"))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if (APPLE AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
</span> list (APPEND CMAKE_REQUIRED_LIBRARIES c++abi)
list (APPEND FOLLY_LINK_LIBRARIES c++abi)
endif ()
diff --git CMakeLists.txt CMakeLists.txt
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index dfd4c3820..d02121df0 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 01a28eeab..2383b30cb 100644
</span> --- CMakeLists.txt
+++ CMakeLists.txt
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -261,6 +261,16 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -708,7 +708,7 @@ if (BUILD_TESTS OR BUILD_BENCHMARKS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST bits_test_2 SOURCES BitsTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST bitvector_test SOURCES BitVectorCodingTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST dynamic_parser_test SOURCES DynamicParserTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TEST eliasfano_test SOURCES EliasFanoCodingTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TEST eliasfano_test APPLE_DISABLED SOURCES EliasFanoCodingTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST event_count_test SOURCES EventCountTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # FunctionSchedulerTest has a lot of timing-dependent checks,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # and tends to fail on heavily loaded systems.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -993,7 +993,7 @@ if (BUILD_TESTS OR BUILD_BENCHMARKS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST atomic_hash_map_test HANGING
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SOURCES AtomicHashMapTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST atomic_linked_list_test SOURCES AtomicLinkedListTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TEST atomic_unordered_map_test SOURCES AtomicUnorderedMapTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TEST atomic_unordered_map_test APPLE_DISABLED SOURCES AtomicUnorderedMapTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST base64_test SOURCES base64_test.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST clock_gettime_wrappers_test SOURCES ClockGettimeWrappersTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST concurrent_bit_set_test SOURCES ConcurrentBitSetTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1005,7 +1005,7 @@ if (BUILD_TESTS OR BUILD_BENCHMARKS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST cpu_id_test SOURCES CpuIdTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST demangle_test SOURCES DemangleTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST deterministic_schedule_test SOURCES DeterministicScheduleTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- TEST discriminated_ptr_test SOURCES DiscriminatedPtrTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ TEST discriminated_ptr_test APPLE_DISABLED SOURCES DiscriminatedPtrTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST dynamic_test SOURCES DynamicTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST dynamic_converter_test SOURCES DynamicConverterTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST dynamic_other_test SOURCES DynamicOtherTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/ConstexprMath.h folly/ConstexprMath.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5df7ae5a6..6fe2b6430 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/ConstexprMath.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/ConstexprMath.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -42,15 +42,25 @@ using enable_if_floating_t =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ///
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /// mimic: std::numbers::e_v, C++20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <typename T>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__ppc__) || defined(__i386__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++FOLLY_INLINE_VARIABLE constexpr T e_v = detail::enable_if_floating_t<T>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 2.71828182845904523536028747135266250);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ FOLLY_INLINE_VARIABLE constexpr T e_v = detail::enable_if_floating_t<T>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2.71828182845904523536028747135266249775724709369995L);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # base64 SIMD files compilation
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+if (APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc|ppc64")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ message(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ STATUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "PowerPC Big Endian has a limited support, "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ "skipping building Base64SWAR of base64"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ list(REMOVE_ITEM files ${FOLLY_DIR}/detail/base64_detail/Base64SWAR.cpp)
</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;'>- if (NOT(${IS_X86_64_ARCH}))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- message(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- STATUS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /// ln2_v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ///
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /// mimic: std::numbers::ln2_v, C++20
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <typename T>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__ppc__) || defined(__i386__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++FOLLY_INLINE_VARIABLE constexpr T ln2_v = detail::enable_if_floating_t<T>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ 0.693147180559945309417232121458176568);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ FOLLY_INLINE_VARIABLE constexpr T ln2_v = detail::enable_if_floating_t<T>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 0.69314718055994530941723212145817656807550013436025L);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /// e
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ///
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/DiscriminatedPtr.h folly/DiscriminatedPtr.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4284cdf72..582f9a6a7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/DiscriminatedPtr.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/DiscriminatedPtr.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -35,8 +35,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/Portability.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/detail/DiscriminatedPtrDetail.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if !FOLLY_X64 && !FOLLY_AARCH64 && !FOLLY_PPC64 && !FOLLY_RISCV64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#error "DiscriminatedPtr is x64, arm64, ppc64 and riscv64 specific code."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !FOLLY_X64 && !FOLLY_AARCH64 && !FOLLY_PPC && !FOLLY_PPC64 && !FOLLY_RISCV64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#error "DiscriminatedPtr is x64, arm64, ppc, ppc64 and riscv64 specific code."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace folly {
</span> diff --git folly/File.cpp folly/File.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 401eb7a01..c50a6d7e5 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f61fc3cc7..c5c9966d3 100644
</span> --- folly/File.cpp
+++ folly/File.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -120,8 +120,10 @@ File File::dupCloseOnExec() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -118,8 +118,10 @@ File File::dupCloseOnExec() const {
</span> int fd;
#ifdef _WIN32
fd = ::dup(fd_);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -71,10 +104,10 @@ index 401eb7a01..c50a6d7e5 100644
</span> checkUnixError(fd, "dup() failed");
diff --git folly/Portability.h folly/Portability.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 24ba108bb..933d240e7 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 5e1c1dee1..b59bb2358 100644
</span> --- folly/Portability.h
+++ folly/Portability.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -103,12 +103,18 @@ constexpr bool kHasUnalignedAccess = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -115,12 +115,18 @@ constexpr bool kHasUnalignedAccess = false;
</span> #define FOLLY_AARCH64 0
#endif
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -94,15 +127,15 @@ index 24ba108bb..933d240e7 100644
</span> #if defined(__s390x__)
#define FOLLY_S390X 1
#else
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -120,6 +126,7 @@ constexpr bool kIsArchArm = FOLLY_ARM == 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -138,6 +144,7 @@ constexpr bool kIsArchArm = FOLLY_ARM == 1;
</span> constexpr bool kIsArchAmd64 = FOLLY_X64 == 1;
constexpr bool kIsArchAArch64 = FOLLY_AARCH64 == 1;
constexpr bool kIsArchPPC64 = FOLLY_PPC64 == 1;
+constexpr bool kIsArchPPC = FOLLY_PPC == 1;
constexpr bool kIsArchS390X = FOLLY_S390X == 1;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr bool kIsArchRISCV64 = FOLLY_RISCV64 == 1;
</span> } // namespace folly
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -272,6 +279,9 @@ constexpr auto kIsLittleEndian = false;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -302,6 +309,9 @@ constexpr auto kIsLittleEndian = false;
</span> #else
constexpr auto kIsLittleEndian = true;
#endif
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -112,36 +145,92 @@ index 24ba108bb..933d240e7 100644
</span> #else
constexpr auto kIsLittleEndian = __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__;
#endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git folly/detail/base64_detail/Base64Api.cpp folly/detail/base64_detail/Base64Api.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 9c8493c06..4ada55281 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- folly/detail/base64_detail/Base64Api.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ folly/detail/base64_detail/Base64Api.cpp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -31,10 +31,16 @@ Base64RuntimeImpl base64EncodeSelectImplementation() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- base64URLDecodeSWAR};
</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;'>-+#if defined(__POWERPC__) || (defined(__powerpc__) && defined(WORDS_BIGENDIAN)) // PowerPC BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ return {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ base64EncodeScalar,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ base64URLEncode};
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else // Everything but PowerPC BE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- return {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- base64EncodeScalar,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- base64URLEncodeScalar,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- base64DecodeSWAR,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- base64URLDecodeSWAR};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/Synchronized.h folly/Synchronized.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d563e4aec..e55eaefbf 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/Synchronized.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/Synchronized.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1510,8 +1510,10 @@ class LockedPtr {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ SynchronizedType* parent() const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ using simulacrum = typename SynchronizedType::Simulacrum;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(sizeof(simulacrum) == sizeof(SynchronizedType), "mismatch");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(alignof(simulacrum) == alignof(SynchronizedType), "mismatch");
</span> +#endif
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } // namespace folly::detail::base64_detail
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr auto off = offsetof(simulacrum, mutex_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const auto raw = reinterpret_cast<char*>(lock_.mutex());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return reinterpret_cast<SynchronizedType*>(raw - (raw ? off : 0));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/detail/base64_detail/Base64SWAR.cpp folly/detail/base64_detail/Base64SWAR.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 72fc4278c..06d0ce4aa 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/detail/base64_detail/Base64SWAR.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/detail/base64_detail/Base64SWAR.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -103,8 +103,13 @@ constexpr auto kBase64SwarDecodeTable =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <bool isURL>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::uint32_t base64DecodeSWARMainLoop(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ const char*& f, const char* l, char*& o) noexcept {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __POWERPC__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #warning "This code may not work on a Big-endian architecture yet."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ folly::kIsLittleEndian, "Big endian requires a redesigned table");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::uint32_t errorAccumulator = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/experimental/EliasFanoCoding.h folly/experimental/EliasFanoCoding.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 03c266d0f..43d90b8a4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/experimental/EliasFanoCoding.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/experimental/EliasFanoCoding.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -42,7 +42,11 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace folly {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace compression {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static_assert(kIsLittleEndian, "EliasFanoCoding.h requires little endianness");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __POWERPC__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #warning "This code may not work on a Big-endian architecture yet."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ static_assert(kIsLittleEndian, "EliasFanoCoding.h requires little endianness");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr size_t kCacheLineSize = 64;
</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/ChecksumBenchmark.cpp folly/hash/test/ChecksumBenchmark.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index c9a1d7212..1f4061751 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/hash/test/ChecksumBenchmark.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/hash/test/ChecksumBenchmark.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -19,6 +19,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/Benchmark.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/hash/Checksum.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr size_t kBufSize = 512 * 1024;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint8_t* buf;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -58,7 +62,11 @@ int main(int argc, char** argv) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ gflags::ParseCommandLineFlags(&argc, &argv, true);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ google::InitGoogleLogging(argv[0]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED < 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ buf = static_cast<uint8_t*>(malloc(kBufSize + 64));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ buf = static_cast<uint8_t*>(std::aligned_alloc(4096, kBufSize + 64));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::default_random_engine rng(1729); // Deterministic seed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::uniform_int_distribution<uint16_t> dist(0, 255);
</span> diff --git folly/io/async/AsyncUDPSocket.cpp folly/io/async/AsyncUDPSocket.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index ce0e33e96..6748c9aab 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d95698cc8..00421573a 100644
</span> --- folly/io/async/AsyncUDPSocket.cpp
+++ folly/io/async/AsyncUDPSocket.cpp
@@ -262,6 +262,7 @@ void AsyncUDPSocket::init(sa_family_t family, BindOptions bindOptions) {
"failed to set IPV6_RECVTCLASS on the socket",
errno);
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #ifdef IP_RECVTOS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #ifdef IP_RECVTOS
</span> } else if (family == AF_INET) {
if (netops::setsockopt(
socket, IPPROTO_IP, IP_RECVTOS, &flag, sizeof(flag)) != 0) {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -149,10 +238,31 @@ index ce0e33e96..6748c9aab 100644
</span> "failed to set IP_RECVTOS on the socket",
errno);
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span> }
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/io/async/fdsock/AsyncFdSocket.h folly/io/async/fdsock/AsyncFdSocket.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d3d84bb58..8fbfbd9ba 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/io/async/fdsock/AsyncFdSocket.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/io/async/fdsock/AsyncFdSocket.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -19,6 +19,16 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/io/async/AsyncSocket.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/io/async/fdsock/SocketFds.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if MAC_OS_X_VERSION_MIN_REQUIRED < 110000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __DARWIN_ALIGN32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#undef __DARWIN_ALIGN32
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define __DARWIN_ALIGN32(p) ((__darwin_size_t)((__darwin_size_t)(p) + __DARWIN_ALIGNBYTES32) &~ __DARWIN_ALIGNBYTES32)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</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;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Including `gtest/gtest_prod.h` would make gtest/gmock a hard dep
</span> diff --git folly/net/NetOps.h folly/net/NetOps.h
index 674a216a2..c5881a7d9 100644
--- folly/net/NetOps.h
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -188,23 +298,26 @@ index 09a8a9907..d3a6caac4 100644
</span> using tcp_info = ::tcp_connection_info;
const int tcp_info_sock_opt = TCP_CONNECTION_INFO;
diff --git folly/portability/Asm.h folly/portability/Asm.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index e71da91c7..e1924c0e4 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e71da91c7..2fdafe6cf 100644
</span> --- folly/portability/Asm.h
+++ folly/portability/Asm.h
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -43,8 +43,10 @@ inline void asm_volatile_pause() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -43,8 +43,12 @@ inline void asm_volatile_pause() {
</span> asm volatile("isb");
#elif (defined(__arm__) && !(__ARM_ARCH < 7))
asm volatile("yield");
-#elif FOLLY_PPC64
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#elif FOLLY_PPC64 && !(defined(__APPLE__))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- asm volatile("or 27,27,27");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#elif (FOLLY_PPC || FOLLY_PPC64) && defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ __asm__ volatile ("or r27,r27,r27" ::: "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- asm volatile("or 27,27,27");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif FOLLY_PPC || FOLLY_PPC64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ __asm__ volatile ("or r27,r27,r27" ::: "memory");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ asm volatile("or 27,27,27");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #endif
</span> #endif
}
} // namespace folly
diff --git folly/portability/Time.cpp folly/portability/Time.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index 88f00150f..3f882b473 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 4039ea814..1351826ea 100644
</span> --- folly/portability/Time.cpp
+++ folly/portability/Time.cpp
@@ -37,11 +37,13 @@ static void duration_to_ts(
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -230,7 +343,7 @@ index 88f00150f..3f882b473 100644
</span> mach_msg_type_number_t task_basic_info_count = MACH_TASK_BASIC_INFO_COUNT;
kern_result = task_info(
@@ -74,6 +77,18 @@ static int clock_process_cputime(struct timespec* ts) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- if (UNLIKELY(kern_result != KERN_SUCCESS)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (FOLLY_UNLIKELY(kern_result != KERN_SUCCESS)) {
</span> return -1;
}
+#else
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -241,7 +354,7 @@ index 88f00150f..3f882b473 100644
</span> + TASK_BASIC_INFO,
+ (thread_info_t)&task_basic_info,
+ &task_basic_info_count);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ if (UNLIKELY(kern_result != KERN_SUCCESS)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ if (FOLLY_UNLIKELY(kern_result != KERN_SUCCESS)) {
</span> + return -1;
+ }
+#endif
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -303,28 +416,230 @@ index 88f00150f..3f882b473 100644
</span> default:
errno = EINVAL;
return -1;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/synchronization/AtomicRef.h folly/synchronization/AtomicRef.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b4408130c..54772a164 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/synchronization/AtomicRef.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/synchronization/AtomicRef.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -28,7 +28,9 @@ namespace detail {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <typename T>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ struct atomic_ref_base {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(sizeof(T) == sizeof(std::atomic<T>), "size mismatch");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(alignof(T) == alignof(std::atomic<T>), "alignment mismatch");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(is_trivially_copyable_v<T>, "value not trivially-copyable");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ explicit atomic_ref_base(T& ref) : ref_(ref) {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -156,9 +158,11 @@ struct make_atomic_ref_t {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ typename T,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::enable_if_t<
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- is_trivially_copyable_v<T> && sizeof(T) == sizeof(std::atomic<T>) &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- alignof(T) == alignof(std::atomic<T>),
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- int> = 0>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ is_trivially_copyable_v<T> && sizeof(T) == sizeof(std::atomic<T>)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ && alignof(T) == alignof(std::atomic<T>)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ , int> = 0>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ atomic_ref<T> operator()(T& ref) const {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return atomic_ref<T>{ref};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/synchronization/NativeSemaphore.h folly/synchronization/NativeSemaphore.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f894eed63..2d7c195af 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/synchronization/NativeSemaphore.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/synchronization/NativeSemaphore.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -20,13 +20,17 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <limits>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdexcept>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/Utility.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/lang/Exception.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/portability/Windows.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if defined(_WIN32)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#elif defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED > 1050) && !defined(__ppc__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <dispatch/dispatch.h> // @manual
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -94,7 +98,7 @@ class NativeSemaphore {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ HANDLE sem_{INVALID_HANDLE_VALUE};
</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;'>+-#elif defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#elif defined(__APPLE__) && (MAC_OS_X_VERSION_MIN_REQUIRED > 1050) && !defined(__ppc__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ class NativeSemaphore {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ public:
</span> diff --git folly/system/ThreadId.cpp folly/system/ThreadId.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-index e426b39e1..b297d671f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index fa365a641..bd3760921 100644
</span> --- folly/system/ThreadId.cpp
+++ folly/system/ThreadId.cpp
<span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -40,9 +40,17 @@ namespace detail {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -40,9 +40,13 @@ namespace detail {
</span>
uint64_t getOSThreadIDSlow() {
#if __APPLE__
- uint64_t tid;
- pthread_threadid_np(nullptr, &tid);
- return tid;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #if MAC_OS_X_VERSION_MAX_ALLOWED < 1070
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ uint64_t tid;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ tid = pthread_mach_thread_np(pthread_self());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #elif MAC_OS_X_VERSION_MIN_REQUIRED < 1070
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ uint64_t tid;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ tid = pthread_mach_thread_np(pthread_self());
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ #ifndef __POWERPC__
</span> + uint64_t tid;
+ pthread_threadid_np(nullptr, &tid);
+ return tid;
<span style='display:block; white-space:pre;background:#e0ffe0;'>++ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ return 0;
</span> + #endif
#elif defined(_WIN32)
return uint64_t(GetCurrentThreadId());
#elif defined(__FreeBSD__)
<span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/system/ThreadName.cpp folly/system/ThreadName.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6dc5878cc..d61fd49fe 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/system/ThreadName.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/system/ThreadName.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -56,9 +56,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FOLLY_HAS_PTHREAD_SETNAME_NP_THREAD_NAME 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__APPLE__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+- __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && !defined(__POWERPC__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // macOS 10.6+ has pthread_setname_np(const char*) (1 param)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FOLLY_HAS_PTHREAD_SETNAME_NP_NAME 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/test/ConstexprMathTest.cpp folly/test/ConstexprMathTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index db61e050c..c478fc138 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/test/ConstexprMathTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/test/ConstexprMathTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -985,10 +985,12 @@ TEST_F(ConstexprMathTest, constexpr_exp_floating) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr auto a = folly::constexpr_exp(3.3);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ EXPECT_DOUBLE_EQ(std::exp(3.3), a);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr auto a = folly::constexpr_exp(471.L);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ EXPECT_DOUBLE_EQ(std::exp(471.L), a);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr auto a = folly::constexpr_exp(600.);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ EXPECT_NE(lim::infinity(), a);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/test/IteratorsTest.cpp folly/test/IteratorsTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 63195eced..db1235f7e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/test/IteratorsTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/test/IteratorsTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -42,7 +42,9 @@ TEST(IteratorsTest, IterFacadeHasCorrectTraits) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::is_same<TR::iterator_category, std::forward_iterator_tag>::value,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(std::is_same<TR::difference_type, ssize_t>::value, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</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(IteratorsTest, SimpleIteratorFacade) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -85,7 +87,9 @@ TEST(IteratorsTest, IterAdaptorHasCorrectTraits) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ std::is_same<TR::iterator_category, std::forward_iterator_tag>::value,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(std::is_same<TR::difference_type, ssize_t>::value, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</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(IteratorsTest, IterAdaptorWithPointer) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/test/MemsetBenchmark.cpp folly/test/MemsetBenchmark.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 139987d0d..62423f925 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/test/MemsetBenchmark.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/test/MemsetBenchmark.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -25,6 +25,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/Preprocessor.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <folly/portability/GFlags.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DEFINE_uint32(min_size, 1, "Minimum size to benchmark");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DEFINE_uint32(max_size, 32768, "Maximum size to benchmark");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ DEFINE_bool(linear, false, "Test all sizes [min_size, max_size]");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -86,7 +90,11 @@ int main(int argc, char** argv) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ assert(FLAGS_step > 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size_t totalBufSize = (FLAGS_max_size + FLAGS_page_offset + 4095) & ~4095;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED < 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ temp_buf = (uint8_t*)malloc(totalBufSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ temp_buf = (uint8_t*)aligned_alloc(4096, totalBufSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Make sure all pages are allocated
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (size_t i = 0; i < totalBufSize; i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ temp_buf[i] = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/test/MemsetTest.cpp folly/test/MemsetTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index b1deaca05..b65b53acd 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/test/MemsetTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/test/MemsetTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -21,6 +21,10 @@
</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;'>++#ifdef __APPLE__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr size_t kPageSize = 4096;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr uint8_t kBufEnd = 0xDB;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -45,8 +49,13 @@ void testMemsetImpl(uint8_t* buf, size_t maxLen) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TEST(MemsetAsmTest, alignedBuffer) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ constexpr size_t kMaxSize = 2 * kPageSize;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED < 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint8_t* buf = reinterpret_cast<uint8_t*>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ malloc(kMaxSize + 2 * kPageSize));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint8_t* buf = reinterpret_cast<uint8_t*>(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ aligned_alloc(kPageSize, kMaxSize + 2 * kPageSize));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Get buffer aligned power of 2 from 16 all the way up to a page size
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (size_t alignment = 16; alignment <= kPageSize; alignment <<= 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ testMemsetImpl(buf + (alignment % kPageSize), kMaxSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -55,8 +64,13 @@ TEST(MemsetAsmTest, alignedBuffer) {
</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(MemsetAsmTest, unalignedBuffer) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(__APPLE__) && MAC_OS_X_VERSION_MIN_REQUIRED < 101500
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ uint8_t* buf =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ reinterpret_cast<uint8_t*>(malloc(2 * kPageSize));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint8_t* buf =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ reinterpret_cast<uint8_t*>(aligned_alloc(kPageSize, 2 * kPageSize));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (size_t alignment = 1; alignment <= 192; alignment++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ testMemsetImpl(buf + alignment, 256);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git folly/test/OptionalTest.cpp folly/test/OptionalTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 016b60639..e0123348a 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- folly/test/OptionalTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ folly/test/OptionalTest.cpp
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -56,9 +56,11 @@ struct NoDefault {
</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;'>++#ifndef __ppc__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(sizeof(Optional<char>) == 2, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-static_assert(sizeof(Optional<int>) == 8, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(sizeof(Optional<NoDefault>) == 4, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static_assert(sizeof(Optional<int>) == 8, "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(sizeof(Optional<char>) == sizeof(boost::optional<char>), "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(sizeof(Optional<short>) == sizeof(boost::optional<short>), "");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static_assert(sizeof(Optional<int>) == sizeof(boost::optional<int>), "");
</span></pre><pre style='margin:0'>
</pre>