From ec9ea66a2bd3b16ed0b110cf82f18c0149438cc1 Mon Sep 17 00:00:00 2001 From: Christopher Wiley Date: Mon, 18 Apr 2016 16:08:19 -0700 Subject: [PATCH] Define LIKELY and UNLIKELY in a vendor friendly way This prevents macro conflicts with vendor code. Bug: 27804373 Change-Id: I759c2b7b611203d0afdc35ddd5c2adb8f942ea17 Test: Compiles when libbinder include path changes to include libbase. --- base/include/android-base/macros.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/base/include/android-base/macros.h b/base/include/android-base/macros.h index 913a9a03e..299ec35a9 100644 --- a/base/include/android-base/macros.h +++ b/base/include/android-base/macros.h @@ -123,8 +123,11 @@ char(&ArraySizeHelper(T(&array)[N]))[N]; // NOLINT(readability/casting) ((sizeof(a) / sizeof(*(a))) / \ static_cast(!(sizeof(a) % sizeof(*(a))))) -#define LIKELY(x) __builtin_expect((x), true) -#define UNLIKELY(x) __builtin_expect((x), false) +// Changing this definition will cause you a lot of pain. A majority of +// vendor code defines LIKELY and UNLIKELY this way, and includes +// this header through an indirect path. +#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) +#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) #define WARN_UNUSED __attribute__((warn_unused_result))