Some fixes for building stuff with clang
authorJordan DeLong <jdelong@fb.com>
Wed, 4 Sep 2013 01:52:52 +0000 (18:52 -0700)
committerJordan DeLong <jdelong@fb.com>
Sun, 8 Sep 2013 01:51:20 +0000 (18:51 -0700)
@override-unit-failures

Summary: Not that much.

Test Plan:
Compiled hphp with clang.

Reviewed By: oyamauchi@fb.com

FB internal diff: D954663

folly/Conv.h
folly/FBVector.h
folly/Traits.h

index f5cc23c5cce939f960de63c4dcce232214de9062..28ad844b2cc15a7776cec57e4b315fdd57b132ef 100644 (file)
@@ -861,10 +861,10 @@ to(StringPiece * src) {
     auto t = detail::digits_to<typename std::make_unsigned<Tgt>::type>(b, m);
     if (negative) {
       result = -t;
-      FOLLY_RANGE_CHECK(result <= 0, "Negative overflow");
+      FOLLY_RANGE_CHECK(is_non_positive(result), "Negative overflow");
     } else {
       result = t;
-      FOLLY_RANGE_CHECK(result >= 0, "Overflow");
+      FOLLY_RANGE_CHECK(is_non_negative(result), "Overflow");
     }
   }
   src->advance(m - src->data());
index 7a0cc0f54f0dda23fb3a2e479ed89598d010bd2c..e1319587727099bcad85ec531249d57a8599da0f 100644 (file)
@@ -1653,7 +1653,6 @@ void fbvector<T, Allocator>::emplace_back_aux(Args&&... args) {
     size_type lower = folly::goodMallocSize(sizeof(T) + size() * sizeof(T));
     size_type upper = byte_sz;
     size_type extra = upper - lower;
-    assert(extra >= 0);
 
     void* p = impl_.b_;
     size_t actual;
index 37bd58d389f4114b079be3324a95d1303c2633aa..47092973cc8c5d7d911b2f16cd736ffc8ffe7870 100644 (file)
@@ -402,6 +402,16 @@ constexpr bool is_negative(T x) {
 template <typename T>
 constexpr bool is_non_positive(T x) { return !x || folly::is_negative(x); }
 
+// same as `x > 0`
+template <typename T>
+constexpr bool is_positive(T x) { return !is_non_positive(x); }
+
+// same as `x >= 0`
+template <typename T>
+constexpr bool is_non_negative(T x) {
+  return !x || is_positive(x);
+}
+
 template <typename RHS, RHS rhs, typename LHS>
 bool less_than(LHS const lhs) {
   return detail::less_than_impl<