diff --git a/folly/CachelinePadded.h b/folly/CachelinePadded.h
|
|
--- a/folly/CachelinePadded.h
|
|
+++ b/folly/CachelinePadded.h
|
|
@@ -35,10 +35,6 @@
|
|
*/
|
|
template <typename T>
|
|
class CachelinePadded {
|
|
- static_assert(
|
|
- alignof(T) <= max_align_v,
|
|
- "CachelinePadded does not support over-aligned types.");
|
|
-
|
|
public:
|
|
template <typename... Args>
|
|
explicit CachelinePadded(Args&&... args)
|
|
diff --git a/folly/experimental/JSONSchema.cpp b/folly/experimental/JSONSchema.cpp
|
|
--- a/folly/experimental/JSONSchema.cpp
|
|
+++ b/folly/experimental/JSONSchema.cpp
|
|
@@ -25,6 +25,7 @@
|
|
#include <folly/Singleton.h>
|
|
#include <folly/String.h>
|
|
#include <folly/json.h>
|
|
+#include <folly/portability/Math.h>
|
|
|
|
namespace folly {
|
|
namespace jsonschema {
|
|
@@ -141,7 +142,7 @@
|
|
return none;
|
|
}
|
|
if (schema_.isDouble() || value.isDouble()) {
|
|
- const auto rem = std::remainder(value.asDouble(), schema_.asDouble());
|
|
+ const auto rem = folly::remainder(value.asDouble(), schema_.asDouble());
|
|
if (std::abs(rem) > std::numeric_limits<double>::epsilon()) {
|
|
return makeError("a multiple of ", schema_, value);
|
|
}
|
|
diff --git a/folly/external/farmhash/farmhash.cpp b/folly/external/farmhash/farmhash.cpp
|
|
--- a/folly/external/farmhash/farmhash.cpp
|
|
+++ b/folly/external/farmhash/farmhash.cpp
|
|
@@ -181,6 +181,7 @@
|
|
|
|
#undef bswap_32
|
|
#undef bswap_64
|
|
+#undef _BYTESWAP_H
|
|
#include <byteswap.h>
|
|
|
|
#endif
|
|
diff --git a/folly/portability/Math.h b/folly/portability/Math.h
|
|
--- a/folly/portability/Math.h
|
|
+++ b/folly/portability/Math.h
|
|
@@ -20,21 +20,24 @@
|
|
|
|
namespace folly {
|
|
|
|
-#ifndef __ANDROID__
|
|
+#if !defined(__ANDROID__) && !defined(__UCLIBC__)
|
|
|
|
/**
|
|
- * Most platforms hopefully provide std::nextafter.
|
|
+ * Most platforms hopefully provide std::{nextafter,remainder}.
|
|
*/
|
|
|
|
/* using override */ using std::nextafter;
|
|
+/* using override */ using std::remainder;
|
|
|
|
-#else // !__ANDROID__
|
|
+#else // !__ANDROID__ && !__UCLIBC__
|
|
|
|
/**
|
|
* On Android, std::nextafter isn't implemented. However, the C functions and
|
|
* compiler builtins are still provided. Using the GCC builtin is actually
|
|
* slightly faster, as they're constexpr and the use cases within folly are in
|
|
* constexpr context.
|
|
+ *
|
|
+ * UCLIBC doesn't implement std::remainder. Use the builtin versions.
|
|
*/
|
|
|
|
#if defined(__GNUC__) && !defined(__clang__)
|
|
@@ -51,6 +54,18 @@
|
|
return __builtin_nextafterl(x, y);
|
|
}
|
|
|
|
+constexpr float remainder(float x, float y) {
|
|
+ return __builtin_remainderf(x, y);
|
|
+}
|
|
+
|
|
+constexpr double remainder(double x, double y) {
|
|
+ return __builtin_remainder(x, y);
|
|
+}
|
|
+
|
|
+constexpr long double remainder(long double x, long double y) {
|
|
+ return __builtin_remainderl(x, y);
|
|
+}
|
|
+
|
|
#else // __GNUC__
|
|
|
|
inline float nextafter(float x, float y) {
|
|
@@ -65,6 +80,18 @@
|
|
return ::nextafterl(x, y);
|
|
}
|
|
|
|
+inline float remainder(float x, float y) {
|
|
+ return ::remainderf(x, y);
|
|
+}
|
|
+
|
|
+inline double remainder(double x, double y) {
|
|
+ return ::remainder(x, y);
|
|
+}
|
|
+
|
|
+inline long double remainder(long double x, long double y) {
|
|
+ return ::remainderl(x, y);
|
|
+}
|
|
+
|
|
#endif // __GNUC__
|
|
|
|
#endif // __ANDROID__
|