Minor clang compiler fixes
authorGaurav Jain <gjain@fb.com>
Wed, 13 Feb 2013 00:59:25 +0000 (16:59 -0800)
committerJordan DeLong <jdelong@fb.com>
Tue, 19 Mar 2013 00:07:18 +0000 (17:07 -0700)
Summary: Minor clang compiler fixes

Test Plan: - fbmake runtest

Reviewed By: andrewjcg@fb.com

FB internal diff: D707663

folly/Bits.cpp
folly/Optional.h
folly/io/IOBufQueue.cpp

index 1c825d2a1fd1c1e8060d4bcef165acc9483d926a..9513cd33c84df0c325558faf3aaf22925a4f8b00 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2012 Facebook, Inc.
+ * Copyright 2013 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -65,12 +65,22 @@ namespace detail {
 // Call folly_popcount_ifunc on startup to resolve to either popcount_inst
 // or popcount_builtin
 int popcount(unsigned int x)
+// Clang does not support ifuncs, so we call directly for now
+#ifdef __clang__
+{  return popcount_builtin(x); }
+#else
   __attribute__((ifunc("folly_popcount_ifunc")));
+#endif
 
 // Call folly_popcount_ifunc on startup to resolve to either popcountll_inst
 // or popcountll_builtin
 int popcountll(unsigned long long x)
+// Clang does not support ifuncs, so we call directly for now
+#ifdef __clang__
+{  return popcount_builtin(x); }
+#else
   __attribute__((ifunc("folly_popcountll_ifunc")));
+#endif
 
 }  // namespace detail
 }  // namespace folly
index 5b574f5b509dd557189a9aa3eb5f2836b9d4d37a..8abbfbc073862fa811892ada9e71170e0347c3ba 100644 (file)
@@ -69,17 +69,6 @@ typedef int detail::NoneHelper::*None;
 
 const None none = nullptr;
 
-/**
- * gcc-4.7 warns about use of uninitialized memory around the use of storage_
- * even though this is explicitly initialized at each point.
- */
-#ifdef __GNUC__
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wuninitialized"
-# pragma GCC diagnostic ignored "-Wpragmas"
-# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
-#endif // __GNUC__
-
 template<class Value>
 class Optional : boost::totally_ordered<Optional<Value>,
                  boost::totally_ordered<Optional<Value>, Value>> {
@@ -245,8 +234,6 @@ class Optional : boost::totally_ordered<Optional<Value>,
   bool hasValue_;
 };
 
-#pragma GCC diagnostic pop
-
 template<class T>
 const T* get_pointer(const Optional<T>& opt) {
   return opt ? &opt.value() : nullptr;
index a34021eeb505f4f101c6146c94bd4ecafe144afe..35751e03822835df33240869f03f8b870b788c0d 100644 (file)
@@ -37,7 +37,7 @@ const size_t MAX_PACK_COPY = 4096;
  */
 void
 appendToChain(unique_ptr<IOBuf>& dst, unique_ptr<IOBuf>&& src, bool pack) {
-  if (dst == NULL) {
+  if (dst == nullptr) {
     dst = std::move(src);
   } else {
     IOBuf* tail = dst->prev();
@@ -150,7 +150,7 @@ void
 IOBufQueue::append(const void* buf, size_t len) {
   auto src = static_cast<const uint8_t*>(buf);
   while (len != 0) {
-    if ((head_ == NULL) || head_->prev()->isSharedOne() ||
+    if ((head_ == nullptr) || head_->prev()->isSharedOne() ||
         (head_->prev()->tailroom() == 0)) {
       appendToChain(head_, std::move(
           IOBuf::create(std::max(MIN_ALLOC_SIZE,
@@ -183,7 +183,7 @@ IOBufQueue::wrapBuffer(const void* buf, size_t len, uint32_t blockSize) {
 pair<void*,uint32_t>
 IOBufQueue::preallocate(uint32_t min, uint32_t newAllocationSize,
                         uint32_t max) {
-  if (head_ != NULL) {
+  if (head_ != nullptr) {
     // If there's enough space left over at the end of the queue, use that.
     IOBuf* last = head_->prev();
     if (!last->isSharedOne()) {
@@ -213,7 +213,7 @@ unique_ptr<IOBuf>
 IOBufQueue::split(size_t n) {
   unique_ptr<IOBuf> result;
   while (n != 0) {
-    if (head_ == NULL) {
+    if (head_ == nullptr) {
       throw std::underflow_error(
           "Attempt to remove more bytes than are present in IOBufQueue");
     } else if (head_->length() <= n) {