2
0

jemalloc_internal_macros.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #ifndef JEMALLOC_INTERNAL_MACROS_H
  2. #define JEMALLOC_INTERNAL_MACROS_H
  3. #ifdef JEMALLOC_DEBUG
  4. # define JEMALLOC_ALWAYS_INLINE static inline
  5. #else
  6. # ifdef _MSC_VER
  7. # define JEMALLOC_ALWAYS_INLINE static __forceinline
  8. # else
  9. # define JEMALLOC_ALWAYS_INLINE JEMALLOC_ATTR(always_inline) static inline
  10. # endif
  11. #endif
  12. #ifdef _MSC_VER
  13. # define inline _inline
  14. #endif
  15. #define UNUSED JEMALLOC_ATTR(unused)
  16. #define ZU(z) ((size_t)z)
  17. #define ZD(z) ((ssize_t)z)
  18. #define QU(q) ((uint64_t)q)
  19. #define QD(q) ((int64_t)q)
  20. #define KZU(z) ZU(z##ULL)
  21. #define KZD(z) ZD(z##LL)
  22. #define KQU(q) QU(q##ULL)
  23. #define KQD(q) QI(q##LL)
  24. #ifndef __DECONST
  25. # define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var))
  26. #endif
  27. #if !defined(JEMALLOC_HAS_RESTRICT) || defined(__cplusplus)
  28. # define restrict
  29. #endif
  30. /* Various function pointers are static and immutable except during testing. */
  31. #ifdef JEMALLOC_JET
  32. # define JET_MUTABLE
  33. #else
  34. # define JET_MUTABLE const
  35. #endif
  36. #define JEMALLOC_VA_ARGS_HEAD(head, ...) head
  37. #define JEMALLOC_VA_ARGS_TAIL(head, ...) __VA_ARGS__
  38. /* Diagnostic suppression macros */
  39. #if defined(_MSC_VER) && !defined(__clang__)
  40. # define JEMALLOC_DIAGNOSTIC_PUSH __pragma(warning(push))
  41. # define JEMALLOC_DIAGNOSTIC_POP __pragma(warning(pop))
  42. # define JEMALLOC_DIAGNOSTIC_IGNORE(W) __pragma(warning(disable:W))
  43. # define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS
  44. # define JEMALLOC_DIAGNOSTIC_IGNORE_TYPE_LIMITS
  45. # define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN
  46. # define JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS
  47. /* #pragma GCC diagnostic first appeared in gcc 4.6. */
  48. #elif (defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && \
  49. (__GNUC_MINOR__ > 5)))) || defined(__clang__)
  50. /*
  51. * The JEMALLOC_PRAGMA__ macro is an implementation detail of the GCC and Clang
  52. * diagnostic suppression macros and should not be used anywhere else.
  53. */
  54. # define JEMALLOC_PRAGMA__(X) _Pragma(#X)
  55. # define JEMALLOC_DIAGNOSTIC_PUSH JEMALLOC_PRAGMA__(GCC diagnostic push)
  56. # define JEMALLOC_DIAGNOSTIC_POP JEMALLOC_PRAGMA__(GCC diagnostic pop)
  57. # define JEMALLOC_DIAGNOSTIC_IGNORE(W) \
  58. JEMALLOC_PRAGMA__(GCC diagnostic ignored W)
  59. /*
  60. * The -Wmissing-field-initializers warning is buggy in GCC versions < 5.1 and
  61. * all clang versions up to version 7 (currently trunk, unreleased). This macro
  62. * suppresses the warning for the affected compiler versions only.
  63. */
  64. # if ((defined(__GNUC__) && !defined(__clang__)) && (__GNUC__ < 5)) || \
  65. defined(__clang__)
  66. # define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS \
  67. JEMALLOC_DIAGNOSTIC_IGNORE("-Wmissing-field-initializers")
  68. # else
  69. # define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS
  70. # endif
  71. # define JEMALLOC_DIAGNOSTIC_IGNORE_TYPE_LIMITS \
  72. JEMALLOC_DIAGNOSTIC_IGNORE("-Wtype-limits")
  73. # define JEMALLOC_DIAGNOSTIC_IGNORE_UNUSED_PARAMETER \
  74. JEMALLOC_DIAGNOSTIC_IGNORE("-Wunused-parameter")
  75. # if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ >= 7)
  76. # define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN \
  77. JEMALLOC_DIAGNOSTIC_IGNORE("-Walloc-size-larger-than=")
  78. # else
  79. # define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN
  80. # endif
  81. # define JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS \
  82. JEMALLOC_DIAGNOSTIC_PUSH \
  83. JEMALLOC_DIAGNOSTIC_IGNORE_UNUSED_PARAMETER
  84. #else
  85. # define JEMALLOC_DIAGNOSTIC_PUSH
  86. # define JEMALLOC_DIAGNOSTIC_POP
  87. # define JEMALLOC_DIAGNOSTIC_IGNORE(W)
  88. # define JEMALLOC_DIAGNOSTIC_IGNORE_MISSING_STRUCT_FIELD_INITIALIZERS
  89. # define JEMALLOC_DIAGNOSTIC_IGNORE_TYPE_LIMITS
  90. # define JEMALLOC_DIAGNOSTIC_IGNORE_ALLOC_SIZE_LARGER_THAN
  91. # define JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS
  92. #endif
  93. /*
  94. * Disables spurious diagnostics for all headers. Since these headers are not
  95. * included by users directly, it does not affect their diagnostic settings.
  96. */
  97. JEMALLOC_DIAGNOSTIC_DISABLE_SPURIOUS
  98. #endif /* JEMALLOC_INTERNAL_MACROS_H */