#pragma once
#include <folly/portability/Config.h>
#ifndef __GNUC_PREREQ
#if defined __GNUC__ && defined __GNUC_MINOR__
#define __GNUC_PREREQ(maj, min) …
#else
#define __GNUC_PREREQ …
#endif
#endif
#ifndef __CLANG_PREREQ
#if defined __clang__ && defined __clang_major__ && defined __clang_minor__
#define __CLANG_PREREQ(maj, min) …
#else
#define __CLANG_PREREQ …
#endif
#endif
#if defined(__has_builtin)
#define FOLLY_HAS_BUILTIN(...) …
#else
#define FOLLY_HAS_BUILTIN …
#endif
#if defined(__has_feature)
#define FOLLY_HAS_FEATURE(...) …
#else
#define FOLLY_HAS_FEATURE …
#endif
#ifndef FOLLY_SANITIZE_ADDRESS
#if FOLLY_HAS_FEATURE(address_sanitizer) || defined(__SANITIZE_ADDRESS__) || \
FOLLY_HAS_FEATURE(hwaddress_sanitizer)
#define FOLLY_SANITIZE_ADDRESS …
#endif
#endif
#ifdef FOLLY_SANITIZE_ADDRESS
#if defined(__clang__)
#if __has_attribute(__no_sanitize__)
#define FOLLY_DISABLE_ADDRESS_SANITIZER …
#elif __has_attribute(__no_address_safety_analysis__)
#define FOLLY_DISABLE_ADDRESS_SANITIZER …
#elif __has_attribute(__no_sanitize_address__)
#define FOLLY_DISABLE_ADDRESS_SANITIZER …
#endif
#elif defined(__GNUC__)
#define FOLLY_DISABLE_ADDRESS_SANITIZER …
#elif defined(_MSC_VER)
#define FOLLY_DISABLE_ADDRESS_SANITIZER …
#endif
#endif
#ifndef FOLLY_DISABLE_ADDRESS_SANITIZER
#define FOLLY_DISABLE_ADDRESS_SANITIZER
#endif
#ifndef FOLLY_SANITIZE_THREAD
#if FOLLY_HAS_FEATURE(thread_sanitizer) || defined(__SANITIZE_THREAD__)
#define FOLLY_SANITIZE_THREAD …
#endif
#endif
#ifdef FOLLY_SANITIZE_THREAD
#define FOLLY_DISABLE_THREAD_SANITIZER …
#else
#define FOLLY_DISABLE_THREAD_SANITIZER
#endif
#ifndef FOLLY_SANITIZE_MEMORY
#if FOLLY_HAS_FEATURE(memory_sanitizer) || defined(__SANITIZE_MEMORY__)
#define FOLLY_SANITIZE_MEMORY …
#endif
#endif
#ifdef FOLLY_SANITIZE_MEMORY
#define FOLLY_DISABLE_MEMORY_SANITIZER …
#else
#define FOLLY_DISABLE_MEMORY_SANITIZER
#endif
#ifndef FOLLY_SANITIZE_DATAFLOW
#if FOLLY_HAS_FEATURE(dataflow_sanitizer) || defined(__SANITIZE_DATAFLOW__)
#define FOLLY_SANITIZE_DATAFLOW …
#endif
#endif
#ifdef FOLLY_SANITIZE_DATAFLOW
#define FOLLY_DISABLE_DATAFLOW_SANITIZER …
#else
#define FOLLY_DISABLE_DATAFLOW_SANITIZER
#endif
#ifndef FOLLY_SANITIZE_UNDEFINED_BEHAVIOR
#if FOLLY_HAS_FEATURE(undefined_behavior_sanitizer) || \
defined(__SANITIZER_UNDEFINED__)
#define FOLLY_SANITIZE_UNDEFINED_BEHAVIOR …
#endif
#endif
#ifdef FOLLY_SANITIZE_UNDEFINED_BEHAVIOR
#define FOLLY_DISABLE_UNDEFINED_BEHAVIOR_SANITIZER …
#else
#define FOLLY_DISABLE_UNDEFINED_BEHAVIOR_SANITIZER(...) …
#endif
#ifndef FOLLY_SANITIZE
#if defined(FOLLY_SANITIZE_ADDRESS) || defined(FOLLY_SANITIZE_THREAD) || \
defined(FOLLY_SANITIZE_MEMORY) || defined(FOLLY_SANITIZE_DATAFLOW) || \
defined(FOLLY_SANITIZE_UNDEFINED_BEHAVIOR)
#define FOLLY_SANITIZE …
#endif
#endif
#define FOLLY_DISABLE_SANITIZERS …
#if defined(__GNUC__)
#define FOLLY_EXPORT …
#else
#define FOLLY_EXPORT
#endif
#ifdef _MSC_VER
#define FOLLY_NOINLINE …
#elif defined(__HIP_PLATFORM_HCC__)
#define FOLLY_NOINLINE …
#elif defined(__GNUC__)
#define FOLLY_NOINLINE …
#else
#define FOLLY_NOINLINE
#endif
#ifdef _MSC_VER
#define FOLLY_ALWAYS_INLINE …
#elif defined(__GNUC__)
#define FOLLY_ALWAYS_INLINE …
#else
#define FOLLY_ALWAYS_INLINE …
#endif
#if defined(_MSC_VER)
#define FOLLY_ATTR_VISIBILITY_HIDDEN
#elif defined(__GNUC__)
#define FOLLY_ATTR_VISIBILITY_HIDDEN …
#else
#define FOLLY_ATTR_VISIBILITY_HIDDEN
#endif
#if FOLLY_HAVE_WEAK_SYMBOLS
#define FOLLY_ATTR_WEAK …
#else
#define FOLLY_ATTR_WEAK
#endif
#ifndef FOLLY_MICROSOFT_ABI_VER
#ifdef _MSC_VER
#define FOLLY_MICROSOFT_ABI_VER …
#endif
#endif
#define FOLLY_ERASE …
#define FOLLY_ERASE_NOINLINE …
#if defined(__GNUC__) && !defined(__clang__)
#define FOLLY_ERASE_HACK_GCC …
#else
#define FOLLY_ERASE_HACK_GCC …
#endif
#ifdef _MSC_VER
#define FOLLY_ERASE_TRYCATCH …
#else
#define FOLLY_ERASE_TRYCATCH …
#endif
#if defined(__GNUC__) || defined(__clang__)
#define FOLLY_PUSH_WARNING …
#define FOLLY_POP_WARNING …
#define FOLLY_GNU_DISABLE_WARNING_INTERNAL2(warningName) …
#define FOLLY_GNU_DISABLE_WARNING(warningName) …
#ifdef __clang__
#define FOLLY_CLANG_DISABLE_WARNING(warningName) …
#define FOLLY_GCC_DISABLE_WARNING(warningName) …
#else
#define FOLLY_CLANG_DISABLE_WARNING …
#define FOLLY_GCC_DISABLE_WARNING …
#endif
#define FOLLY_MSVC_DISABLE_WARNING(warningNumber) …
#elif defined(_MSC_VER)
#define FOLLY_PUSH_WARNING …
#define FOLLY_POP_WARNING …
#define FOLLY_GNU_DISABLE_WARNING …
#define FOLLY_GCC_DISABLE_WARNING …
#define FOLLY_CLANG_DISABLE_WARNING …
#define FOLLY_MSVC_DISABLE_WARNING …
#else
#define FOLLY_PUSH_WARNING
#define FOLLY_POP_WARNING
#define FOLLY_GNU_DISABLE_WARNING …
#define FOLLY_GCC_DISABLE_WARNING …
#define FOLLY_CLANG_DISABLE_WARNING …
#define FOLLY_MSVC_DISABLE_WARNING …
#endif
#ifdef FOLLY_HAVE_SHADOW_LOCAL_WARNINGS
#define FOLLY_GCC_DISABLE_NEW_SHADOW_WARNINGS …
#else
#define FOLLY_GCC_DISABLE_NEW_SHADOW_WARNINGS …
#endif
#if defined(_MSC_VER)
#define FOLLY_MSVC_DECLSPEC …
#else
#define FOLLY_MSVC_DECLSPEC(...) …
#endif