Remove the glog header include from Assume.h
authorYedidya Feldblum <yfeldblum@fb.com>
Mon, 1 Aug 2016 23:46:59 +0000 (16:46 -0700)
committerFacebook Github Bot 9 <facebook-github-bot-9-bot@fb.com>
Mon, 1 Aug 2016 23:53:29 +0000 (16:53 -0700)
Summary:
[Folly] Remove the glog header include from `Assume.h`.

Better to avoid unnecessary includes.

Reviewed By: Orvid

Differential Revision: D3652651

fbshipit-source-id: 3fa6256e9571539c692b9c50c1c215b31eef394a

folly/Assume.cpp [new file with mode: 0644]
folly/Assume.h
folly/Makefile.am

diff --git a/folly/Assume.cpp b/folly/Assume.cpp
new file mode 100644 (file)
index 0000000..7569232
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2016 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <folly/Assume.h>
+
+#include <glog/logging.h>
+
+namespace folly {
+
+namespace detail {
+
+void assume_check(bool cond) {
+  CHECK(cond) << "compiler-hint assumption fails at runtime";
+}
+
+}
+
+}
index c4d8fabb609ca36b297595411d86d330e502cca1..d101787499b356d866d8af55acefce26416ded23 100644 (file)
 #include <cstdlib>
 
 #include <folly/Portability.h>
-#include <glog/logging.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
@@ -34,17 +39,19 @@ namespace folly {
  */
 
 FOLLY_ALWAYS_INLINE void assume(bool cond) {
-#ifndef NDEBUG
-  DCHECK(cond);
-#elif defined(__clang__)  // Must go first because Clang also defines __GNUC__.
-  __builtin_assume(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(); }
+    if (!cond) { __builtin_unreachable(); }
 #elif defined(_MSC_VER)
-  __assume(cond);
+    __assume(cond);
 #else
-  // Do nothing.
+    // Do nothing.
 #endif
+  }
 }
 
 [[noreturn]] FOLLY_ALWAYS_INLINE void assume_unreachable() {
index fe5b0852f42a51c686835e4a4b09234bb4250606..15bc5424bf1359f14a2c8cf8e42e10a19edb0a4a 100644 (file)
@@ -369,6 +369,7 @@ libfollybase_la_SOURCES = \
        Unicode.cpp
 
 libfolly_la_SOURCES = \
+       Assume.cpp \
        Bits.cpp \
        Checksum.cpp \
        ClockGettimeWrappers.cpp \