Go to the documentation of this file.
34 #ifndef ABSL_BASE_ATTRIBUTES_H_
35 #define ABSL_BASE_ATTRIBUTES_H_
37 #include "absl/base/config.h"
49 #ifdef __has_attribute
50 #define ABSL_HAVE_ATTRIBUTE(x) __has_attribute(x)
52 #define ABSL_HAVE_ATTRIBUTE(x) 0
61 #if defined(__cplusplus) && defined(__has_cpp_attribute)
64 #define ABSL_HAVE_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
66 #define ABSL_HAVE_CPP_ATTRIBUTE(x) 0
86 #if ABSL_HAVE_ATTRIBUTE(format) || (defined(__GNUC__) && !defined(__clang__))
87 #define ABSL_PRINTF_ATTRIBUTE(string_index, first_to_check) \
88 __attribute__((__format__(__printf__, string_index, first_to_check)))
89 #define ABSL_SCANF_ATTRIBUTE(string_index, first_to_check) \
90 __attribute__((__format__(__scanf__, string_index, first_to_check)))
92 #define ABSL_PRINTF_ATTRIBUTE(string_index, first_to_check)
93 #define ABSL_SCANF_ATTRIBUTE(string_index, first_to_check)
100 #if ABSL_HAVE_ATTRIBUTE(always_inline) || \
101 (defined(__GNUC__) && !defined(__clang__))
102 #define ABSL_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
103 #define ABSL_HAVE_ATTRIBUTE_ALWAYS_INLINE 1
105 #define ABSL_ATTRIBUTE_ALWAYS_INLINE
108 #if ABSL_HAVE_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__))
109 #define ABSL_ATTRIBUTE_NOINLINE __attribute__((noinline))
110 #define ABSL_HAVE_ATTRIBUTE_NOINLINE 1
112 #define ABSL_ATTRIBUTE_NOINLINE
119 #if ABSL_HAVE_ATTRIBUTE(disable_tail_calls)
120 #define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1
121 #define ABSL_ATTRIBUTE_NO_TAIL_CALL __attribute__((disable_tail_calls))
122 #elif defined(__GNUC__) && !defined(__clang__) && !defined(__e2k__)
123 #define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 1
124 #define ABSL_ATTRIBUTE_NO_TAIL_CALL \
125 __attribute__((optimize("no-optimize-sibling-calls")))
127 #define ABSL_ATTRIBUTE_NO_TAIL_CALL
128 #define ABSL_HAVE_ATTRIBUTE_NO_TAIL_CALL 0
139 #if (ABSL_HAVE_ATTRIBUTE(weak) || \
140 (defined(__GNUC__) && !defined(__clang__))) && \
141 (!defined(_WIN32) || (defined(__clang__) && __clang_major__ >= 9)) && \
142 !defined(__MINGW32__)
143 #undef ABSL_ATTRIBUTE_WEAK
144 #define ABSL_ATTRIBUTE_WEAK __attribute__((weak))
145 #define ABSL_HAVE_ATTRIBUTE_WEAK 1
147 #define ABSL_ATTRIBUTE_WEAK
148 #define ABSL_HAVE_ATTRIBUTE_WEAK 0
189 #if ABSL_HAVE_ATTRIBUTE(nonnull) || (defined(__GNUC__) && !defined(__clang__))
190 #define ABSL_ATTRIBUTE_NONNULL(arg_index) __attribute__((nonnull(arg_index)))
192 #define ABSL_ATTRIBUTE_NONNULL(...)
198 #if ABSL_HAVE_ATTRIBUTE(noreturn) || (defined(__GNUC__) && !defined(__clang__))
199 #define ABSL_ATTRIBUTE_NORETURN __attribute__((noreturn))
200 #elif defined(_MSC_VER)
201 #define ABSL_ATTRIBUTE_NORETURN __declspec(noreturn)
203 #define ABSL_ATTRIBUTE_NORETURN
214 #if ABSL_HAVE_ATTRIBUTE(no_sanitize_address)
215 #define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address))
216 #elif defined(_MSC_VER) && _MSC_VER >= 1928
218 #define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS __declspec(no_sanitize_address)
220 #define ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS
231 #if ABSL_HAVE_ATTRIBUTE(no_sanitize_memory)
232 #define ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory))
234 #define ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY
242 #if ABSL_HAVE_ATTRIBUTE(no_sanitize_thread)
243 #define ABSL_ATTRIBUTE_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread))
245 #define ABSL_ATTRIBUTE_NO_SANITIZE_THREAD
254 #if ABSL_HAVE_ATTRIBUTE(no_sanitize_undefined)
255 #define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED \
256 __attribute__((no_sanitize_undefined))
257 #elif ABSL_HAVE_ATTRIBUTE(no_sanitize)
258 #define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED \
259 __attribute__((no_sanitize("undefined")))
261 #define ABSL_ATTRIBUTE_NO_SANITIZE_UNDEFINED
268 #if ABSL_HAVE_ATTRIBUTE(no_sanitize)
269 #define ABSL_ATTRIBUTE_NO_SANITIZE_CFI __attribute__((no_sanitize("cfi")))
271 #define ABSL_ATTRIBUTE_NO_SANITIZE_CFI
278 #if ABSL_HAVE_ATTRIBUTE(no_sanitize)
279 #define ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK \
280 __attribute__((no_sanitize("safe-stack")))
282 #define ABSL_ATTRIBUTE_NO_SANITIZE_SAFESTACK
288 #if ABSL_HAVE_ATTRIBUTE(returns_nonnull)
289 #define ABSL_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
291 #define ABSL_ATTRIBUTE_RETURNS_NONNULL
298 #ifdef ABSL_HAVE_ATTRIBUTE_SECTION
299 #error ABSL_HAVE_ATTRIBUTE_SECTION cannot be directly set
300 #elif (ABSL_HAVE_ATTRIBUTE(section) || \
301 (defined(__GNUC__) && !defined(__clang__))) && \
302 !defined(__APPLE__) && ABSL_HAVE_ATTRIBUTE_WEAK
303 #define ABSL_HAVE_ATTRIBUTE_SECTION 1
313 #ifndef ABSL_ATTRIBUTE_SECTION
314 #define ABSL_ATTRIBUTE_SECTION(name) \
315 __attribute__((section(#name))) __attribute__((noinline))
323 #ifndef ABSL_ATTRIBUTE_SECTION_VARIABLE
329 #define ABSL_ATTRIBUTE_SECTION_VARIABLE(name)
331 #define ABSL_ATTRIBUTE_SECTION_VARIABLE(name) __attribute__((section(#name)))
343 #ifndef ABSL_DECLARE_ATTRIBUTE_SECTION_VARS
344 #define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name) \
345 extern char __start_##name[] ABSL_ATTRIBUTE_WEAK; \
346 extern char __stop_##name[] ABSL_ATTRIBUTE_WEAK
348 #ifndef ABSL_DEFINE_ATTRIBUTE_SECTION_VARS
349 #define ABSL_INIT_ATTRIBUTE_SECTION_VARS(name)
350 #define ABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name)
361 #define ABSL_ATTRIBUTE_SECTION_START(name) \
362 (reinterpret_cast<void *>(__start_##name))
363 #define ABSL_ATTRIBUTE_SECTION_STOP(name) \
364 (reinterpret_cast<void *>(__stop_##name))
366 #else // !ABSL_HAVE_ATTRIBUTE_SECTION
368 #define ABSL_HAVE_ATTRIBUTE_SECTION 0
371 #define ABSL_ATTRIBUTE_SECTION(name)
372 #define ABSL_ATTRIBUTE_SECTION_VARIABLE(name)
373 #define ABSL_INIT_ATTRIBUTE_SECTION_VARS(name)
374 #define ABSL_DEFINE_ATTRIBUTE_SECTION_VARS(name)
375 #define ABSL_DECLARE_ATTRIBUTE_SECTION_VARS(name)
376 #define ABSL_ATTRIBUTE_SECTION_START(name) (reinterpret_cast<void *>(0))
377 #define ABSL_ATTRIBUTE_SECTION_STOP(name) (reinterpret_cast<void *>(0))
379 #endif // ABSL_ATTRIBUTE_SECTION
384 #if ABSL_HAVE_ATTRIBUTE(force_align_arg_pointer) || \
385 (defined(__GNUC__) && !defined(__clang__))
386 #if defined(__i386__)
387 #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC \
388 __attribute__((force_align_arg_pointer))
389 #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0)
390 #elif defined(__x86_64__)
391 #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (1)
392 #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
393 #else // !__i386__ && !__x86_64
394 #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0)
395 #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
398 #define ABSL_ATTRIBUTE_STACK_ALIGN_FOR_OLD_LIBC
399 #define ABSL_REQUIRE_STACK_ALIGN_TRAMPOLINE (0)
438 #if defined(__clang__) && ABSL_HAVE_ATTRIBUTE(warn_unused_result)
439 #define ABSL_MUST_USE_RESULT __attribute__((warn_unused_result))
441 #define ABSL_MUST_USE_RESULT
454 #if ABSL_HAVE_ATTRIBUTE(hot) || (defined(__GNUC__) && !defined(__clang__))
455 #define ABSL_ATTRIBUTE_HOT __attribute__((hot))
457 #define ABSL_ATTRIBUTE_HOT
460 #if ABSL_HAVE_ATTRIBUTE(cold) || (defined(__GNUC__) && !defined(__clang__))
461 #define ABSL_ATTRIBUTE_COLD __attribute__((cold))
463 #define ABSL_ATTRIBUTE_COLD
502 #if ABSL_HAVE_CPP_ATTRIBUTE(clang::xray_always_instrument) && \
503 !defined(ABSL_NO_XRAY_ATTRIBUTES) && !defined(__ANDROID__)
504 #define ABSL_XRAY_ALWAYS_INSTRUMENT [[clang::xray_always_instrument]]
505 #define ABSL_XRAY_NEVER_INSTRUMENT [[clang::xray_never_instrument]]
506 #if ABSL_HAVE_CPP_ATTRIBUTE(clang::xray_log_args)
507 #define ABSL_XRAY_LOG_ARGS(N) \
508 [[clang::xray_always_instrument, clang::xray_log_args(N)]]
510 #define ABSL_XRAY_LOG_ARGS(N) [[clang::xray_always_instrument]]
513 #define ABSL_XRAY_ALWAYS_INSTRUMENT
514 #define ABSL_XRAY_NEVER_INSTRUMENT
515 #define ABSL_XRAY_LOG_ARGS(N)
526 #if ABSL_HAVE_CPP_ATTRIBUTE(clang::reinitializes)
527 #define ABSL_ATTRIBUTE_REINITIALIZES [[clang::reinitializes]]
529 #define ABSL_ATTRIBUTE_REINITIALIZES
546 #if ABSL_HAVE_ATTRIBUTE(unused) || (defined(__GNUC__) && !defined(__clang__))
547 #undef ABSL_ATTRIBUTE_UNUSED
548 #define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
550 #define ABSL_ATTRIBUTE_UNUSED
557 #if ABSL_HAVE_ATTRIBUTE(tls_model) || (defined(__GNUC__) && !defined(__clang__))
558 #define ABSL_ATTRIBUTE_INITIAL_EXEC __attribute__((tls_model("initial-exec")))
560 #define ABSL_ATTRIBUTE_INITIAL_EXEC
584 #if ABSL_HAVE_ATTRIBUTE(packed) || (defined(__GNUC__) && !defined(__clang__))
585 #define ABSL_ATTRIBUTE_PACKED __attribute__((__packed__))
587 #define ABSL_ATTRIBUTE_PACKED
594 #if ABSL_HAVE_ATTRIBUTE(aligned) || (defined(__GNUC__) && !defined(__clang__))
595 #define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes) __attribute__((aligned(bytes)))
597 #define ABSL_ATTRIBUTE_FUNC_ALIGN(bytes)
632 #ifdef ABSL_FALLTHROUGH_INTENDED
633 #error "ABSL_FALLTHROUGH_INTENDED should not be defined."
634 #elif ABSL_HAVE_CPP_ATTRIBUTE(fallthrough)
635 #define ABSL_FALLTHROUGH_INTENDED [[fallthrough]]
636 #elif ABSL_HAVE_CPP_ATTRIBUTE(clang::fallthrough)
637 #define ABSL_FALLTHROUGH_INTENDED [[clang::fallthrough]]
638 #elif ABSL_HAVE_CPP_ATTRIBUTE(gnu::fallthrough)
639 #define ABSL_FALLTHROUGH_INTENDED [[gnu::fallthrough]]
641 #define ABSL_FALLTHROUGH_INTENDED \
673 #if ABSL_HAVE_ATTRIBUTE(deprecated)
674 #define ABSL_DEPRECATED(message) __attribute__((deprecated(message)))
676 #define ABSL_DEPRECATED(message)
711 #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
712 #define ABSL_CONST_INIT constinit
713 #elif ABSL_HAVE_CPP_ATTRIBUTE(clang::require_constant_initialization)
714 #define ABSL_CONST_INIT [[clang::require_constant_initialization]]
716 #define ABSL_CONST_INIT
732 #if ABSL_HAVE_CPP_ATTRIBUTE(gnu::pure)
733 #define ABSL_ATTRIBUTE_PURE_FUNCTION [[gnu::pure]]
734 #elif ABSL_HAVE_ATTRIBUTE(pure)
735 #define ABSL_ATTRIBUTE_PURE_FUNCTION __attribute__((pure))
737 #define ABSL_ATTRIBUTE_PURE_FUNCTION
754 #if ABSL_HAVE_CPP_ATTRIBUTE(clang::lifetimebound)
755 #define ABSL_ATTRIBUTE_LIFETIME_BOUND [[clang::lifetimebound]]
756 #elif ABSL_HAVE_ATTRIBUTE(lifetimebound)
757 #define ABSL_ATTRIBUTE_LIFETIME_BOUND __attribute__((lifetimebound))
759 #define ABSL_ATTRIBUTE_LIFETIME_BOUND
762 #endif // ABSL_BASE_ATTRIBUTES_H_
grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:45