Test UnboundedBlockingQueue in ThreadPoolExecutorTest
[folly.git] / folly / Assume.h
index f905dce7ca7528f6a7ae3bb374ab7eb7780b34f9..73b66a500b8b5ed2f47d1fa99bdb0dff2d232a04 100644 (file)
  * limitations under the License.
  */
 
-#pragma once
-
-#include <cstdlib>
-
-#include <folly/Portability.h>
-
-namespace folly {
-
-namespace detail {
-
-extern void assume_check(bool cond);
-
-}
-
-/**
- * Inform the compiler that the argument can be assumed true. It is
- * undefined behavior if the argument is not actually true, so use
- * with care.
- *
- * Implemented as a function instead of a macro because
- * __builtin_assume does not evaluate its argument at runtime, so it
- * cannot be used with expressions that have side-effects.
- */
-
-FOLLY_ALWAYS_INLINE void assume(bool cond) {
-  if (kIsDebug) {
-    detail::assume_check(cond);
-  } else {
-#if defined(__clang__)  // Must go first because Clang also defines __GNUC__.
-    __builtin_assume(cond);
-#elif defined(__GNUC__)
-    if (!cond) { __builtin_unreachable(); }
-#elif defined(_MSC_VER)
-    __assume(cond);
-#else
-    // Do nothing.
-#endif
-  }
-}
-
-[[noreturn]] FOLLY_ALWAYS_INLINE void assume_unreachable() {
-  assume(false);
-  // Do a bit more to get the compiler to understand
-  // that this function really will never return.
-#if defined(__GNUC__)
-  __builtin_unreachable();
-#elif defined(_MSC_VER)
-  __assume(0);
-#else
-  // Well, it's better than nothing.
-  std::abort();
-#endif
-}
-
-}  // namespace folly
+#include <folly/lang/Assume.h> // @shim