Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / base / compiler_specific.h
index 09b4e70..cbb60a0 100644 (file)
 // Use like:
 //   virtual void foo() FINAL;
 //   class B FINAL : public A {};
-#if defined(COMPILER_MSVC)
+#if defined(__clang__)
+#define FINAL final
+#elif defined(COMPILER_MSVC)
 // TODO(jered): Change this to "final" when chromium no longer uses MSVC 2010.
 #define FINAL sealed
-#elif defined(__clang__)
-#define FINAL final
 #elif defined(COMPILER_GCC) && __cplusplus >= 201103 && \
       (__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= 40700
 // GCC 4.7 supports explicit virtual overrides when C++11 support is enabled.
 
 
 // MemorySanitizer annotations.
-#ifdef MEMORY_SANITIZER
-extern "C" {
-void __msan_unpoison(const void *p, unsigned long s);
-}  // extern "C"
+#if defined(MEMORY_SANITIZER) && !defined(OS_NACL)
+#include <sanitizer/msan_interface.h>
 
 // Mark a memory region fully initialized.
 // Use this to annotate code that deliberately reads uninitialized data, for
@@ -220,4 +218,22 @@ void __msan_unpoison(const void *p, unsigned long s);
 #endif  // defined(OS_WIN)
 #endif  // !defined(CDECL)
 
+// Macro for hinting that an expression is likely to be true.
+#if !defined(LIKELY)
+#if defined(COMPILER_GCC)
+#define LIKELY(x) __builtin_expect(!!(x), 1)
+#else
+#define LIKELY(x) (x)
+#endif  // defined(COMPILER_GCC)
+#endif  // !defined(LIKELY)
+
+// Macro for hinting that an expression is likely to be false.
+#if !defined(UNLIKELY)
+#if defined(COMPILER_GCC)
+#define UNLIKELY(x) __builtin_expect(!!(x), 0)
+#else
+#define UNLIKELY(x) (x)
+#endif  // defined(COMPILER_GCC)
+#endif  // !defined(UNLIKELY)
+
 #endif  // BASE_COMPILER_SPECIFIC_H_