Blame jemalloc/include/jemalloc/internal/jemalloc_internal_macros.h

Packit 345191
#ifndef JEMALLOC_INTERNAL_MACROS_H
Packit 345191
#define JEMALLOC_INTERNAL_MACROS_H
Packit 345191
Packit 345191
#ifdef JEMALLOC_DEBUG
Packit 345191
#  define JEMALLOC_ALWAYS_INLINE static inline
Packit 345191
#else
Packit 345191
#  define JEMALLOC_ALWAYS_INLINE JEMALLOC_ATTR(always_inline) static inline
Packit 345191
#endif
Packit 345191
#ifdef _MSC_VER
Packit 345191
#  define inline _inline
Packit 345191
#endif
Packit 345191
Packit 345191
#define UNUSED JEMALLOC_ATTR(unused)
Packit 345191
Packit 345191
#define ZU(z)	((size_t)z)
Packit 345191
#define ZD(z)	((ssize_t)z)
Packit 345191
#define QU(q)	((uint64_t)q)
Packit 345191
#define QD(q)	((int64_t)q)
Packit 345191
Packit 345191
#define KZU(z)	ZU(z##ULL)
Packit 345191
#define KZD(z)	ZD(z##LL)
Packit 345191
#define KQU(q)	QU(q##ULL)
Packit 345191
#define KQD(q)	QI(q##LL)
Packit 345191
Packit 345191
#ifndef __DECONST
Packit 345191
#  define	__DECONST(type, var)	((type)(uintptr_t)(const void *)(var))
Packit 345191
#endif
Packit 345191
Packit 345191
#if !defined(JEMALLOC_HAS_RESTRICT) || defined(__cplusplus)
Packit 345191
#  define restrict
Packit 345191
#endif
Packit 345191
Packit 345191
/* Various function pointers are static and immutable except during testing. */
Packit 345191
#ifdef JEMALLOC_JET
Packit 345191
#  define JET_MUTABLE
Packit 345191
#else
Packit 345191
#  define JET_MUTABLE const
Packit 345191
#endif
Packit 345191
Packit 345191
#define JEMALLOC_VA_ARGS_HEAD(head, ...) head
Packit 345191
#define JEMALLOC_VA_ARGS_TAIL(head, ...) __VA_ARGS__
Packit 345191
Packit 345191
#if (defined(__GNUC__) || defined(__GNUG__)) && !defined(__clang__) \
Packit 345191
  && defined(JEMALLOC_HAVE_ATTR) && (__GNUC__ >= 7)
Packit 345191
#define JEMALLOC_FALLTHROUGH JEMALLOC_ATTR(fallthrough);
Packit 345191
#else
Packit 345191
#define JEMALLOC_FALLTHROUGH /* falls through */
Packit 345191
#endif
Packit 345191
Packit 345191
/* Diagnostic suppression macros */
Packit 345191
#if defined(_MSC_VER) && !defined(__clang__)
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_PUSH __pragma(warning(push))
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_POP __pragma(warning(pop))
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE(W) __pragma(warning(disable:W))
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_TYPE_LIMITS
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS
Packit 345191
/* #pragma GCC diagnostic first appeared in gcc 4.6. */
Packit 345191
#elif (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && \
Packit 345191
  (__GNUC_MINOR__ > 5)))) || defined(__clang__)
Packit 345191
/*
Packit 345191
 * The JEMALLOC_PRAGMA__ macro is an implementation detail of the GCC and Clang
Packit 345191
 * diagnostic suppression macros and should not be used anywhere else.
Packit 345191
 */
Packit 345191
#  define JEMALLOC_PRAGMA__(X) _Pragma(#X)
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_PUSH JEMALLOC_PRAGMA__(GCC diagnostic push)
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_POP JEMALLOC_PRAGMA__(GCC diagnostic pop)
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE(W) \
Packit 345191
     JEMALLOC_PRAGMA__(GCC diagnostic ignored W)
Packit 345191
Packit 345191
/*
Packit 345191
 * The -Wmissing-field-initializers warning is buggy in GCC versions < 5.1 and
Packit 345191
 * all clang versions up to version 7 (currently trunk, unreleased).  This macro
Packit 345191
 * suppresses the warning for the affected compiler versions only.
Packit 345191
 */
Packit 345191
#  if ((defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ < 5)) || \
Packit 345191
     defined(__clang__)
Packit 345191
#    define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS  \
Packit 345191
          JEMALLOC_DIAGNOSTIC_IGNORE("-Wmissing-field-initializers")
Packit 345191
#  else
Packit 345191
#    define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS
Packit 345191
#  endif
Packit 345191
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_TYPE_LIMITS  \
Packit 345191
     JEMALLOC_DIAGNOSTIC_IGNORE("-Wtype-limits")
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_UNUSED_PARAMETER \
Packit 345191
     JEMALLOC_DIAGNOSTIC_IGNORE("-Wunused-parameter")
Packit 345191
#  if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 7)
Packit 345191
#    define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN \
Packit 345191
       JEMALLOC_DIAGNOSTIC_IGNORE("-Walloc-size-larger-than=")
Packit 345191
#  else
Packit 345191
#    define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN
Packit 345191
#  endif
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS \
Packit 345191
  JEMALLOC_DIAGNOSTIC_PUSH \
Packit 345191
  JEMALLOC_DIAGNOSTIC_IGNORE_UNUSED_PARAMETER
Packit 345191
#else
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_PUSH
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_POP
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE(W)
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_TYPE_LIMITS
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN
Packit 345191
#  define JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS
Packit 345191
#endif
Packit 345191
Packit 345191
/*
Packit 345191
 * Disables spurious diagnostics for all headers.  Since these headers are not
Packit 345191
 * included by users directly, it does not affect their diagnostic settings.
Packit 345191
 */
Packit 345191
JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS
Packit 345191
Packit 345191
#endif /* JEMALLOC_INTERNAL_MACROS_H */