From: Yedidya Feldblum Date: Mon, 1 Aug 2016 23:46:59 +0000 (-0700) Subject: Remove the glog header include from Assume.h X-Git-Tag: v2016.08.08.00~40 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=commitdiff_plain;h=a251c84ffc2abb0d2a23ae35f9205b5a2796304f Remove the glog header include from Assume.h 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 --- diff --git a/folly/Assume.cpp b/folly/Assume.cpp new file mode 100644 index 00000000..75692320 --- /dev/null +++ b/folly/Assume.cpp @@ -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 + +#include + +namespace folly { + +namespace detail { + +void assume_check(bool cond) { + CHECK(cond) << "compiler-hint assumption fails at runtime"; +} + +} + +} diff --git a/folly/Assume.h b/folly/Assume.h index c4d8fabb..d1017874 100644 --- a/folly/Assume.h +++ b/folly/Assume.h @@ -19,10 +19,15 @@ #include #include -#include 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() { diff --git a/folly/Makefile.am b/folly/Makefile.am index fe5b0852..15bc5424 100644 --- a/folly/Makefile.am +++ b/folly/Makefile.am @@ -369,6 +369,7 @@ libfollybase_la_SOURCES = \ Unicode.cpp libfolly_la_SOURCES = \ + Assume.cpp \ Bits.cpp \ Checksum.cpp \ ClockGettimeWrappers.cpp \