Go to the documentation of this file.
19 #ifndef GRPC_SUPPORT_PORT_PLATFORM_H
20 #define GRPC_SUPPORT_PORT_PLATFORM_H
23 #if __cplusplus >= 201402L
24 #define GRPC_DEPRECATED(reason) [[deprecated(reason)]]
26 #define GRPC_DEPRECATED(reason)
27 #endif // __cplusplus >= 201402L
29 #ifndef GPR_DISABLE_ABSEIL_SYNC
39 #ifndef GPR_ABSEIL_SYNC
40 #define GPR_ABSEIL_SYNC 1
41 #endif // GPR_ABSEIL_SYNC
42 #endif // GPR_DISABLE_ABSEIL_SYNC
45 #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
46 #ifndef WIN32_LEAN_AND_MEAN
47 #define GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
48 #define WIN32_LEAN_AND_MEAN
70 #if !defined(GRPC_DLL)
71 #if defined(GRPC_DLL_EXPORTS)
72 #define GRPC_DLL __declspec(dllexport)
73 #elif defined(GRPC_DLL_IMPORTS)
74 #define GRPC_DLL __declspec(dllimport)
77 #endif // defined(GRPC_DLL_EXPORTS)
81 #if !defined(GRPCXX_DLL)
82 #if defined(GRPCXX_DLL_EXPORTS)
83 #define GRPCXX_DLL __declspec(dllexport)
84 #elif defined(GRPCXX_DLL_IMPORTS)
85 #define GRPCXX_DLL __declspec(dllimport)
88 #endif // defined(GRPCXX_DLL_EXPORTS)
93 #if defined(GPR_DLL_EXPORTS)
94 #define GPR_DLL __declspec(dllexport)
95 #elif defined(GPR_DLL_IMPORTS)
96 #define GPR_DLL __declspec(dllimport)
99 #endif // defined(GPR_DLL_EXPORTS)
103 #define GRPC_NOMINMX_WAS_NOT_DEFINED
111 "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"
113 #if (_WIN32_WINNT < 0x0600)
115 "Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)"
118 #ifdef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
119 #undef GRPC_WIN32_LEAN_AND_MEAN_WAS_NOT_DEFINED
120 #undef WIN32_LEAN_AND_MEAN
123 #ifdef GRPC_NOMINMAX_WAS_NOT_DEFINED
124 #undef GRPC_NOMINMAX_WAS_NOT_DEFINED
138 #if !defined(GPR_NO_AUTODETECT_PLATFORM)
139 #if defined(_WIN64) || defined(WIN64) || defined(_WIN32) || defined(WIN32)
140 #if defined(_WIN64) || defined(WIN64)
141 #define GPR_ARCH_64 1
143 #define GPR_ARCH_32 1
145 #define GPR_PLATFORM_STRING "windows"
146 #define GPR_WINDOWS 1
147 #define GPR_WINDOWS_SUBPROCESS 1
148 #define GPR_WINDOWS_ENV
150 #define GPR_GETPID_IN_UNISTD_H 1
151 #define GPR_MSYS_TMPFILE
152 #define GPR_POSIX_LOG
153 #define GPR_POSIX_STRING
154 #define GPR_POSIX_TIME
156 #define GPR_GETPID_IN_PROCESS_H 1
157 #define GPR_WINDOWS_TMPFILE
158 #define GPR_WINDOWS_LOG
159 #define GPR_WINDOWS_CRASH_HANDLER 1
160 #define GPR_WINDOWS_STAT
161 #define GPR_WINDOWS_STRING
162 #define GPR_WINDOWS_TIME
165 #define GPR_GCC_ATOMIC 1
167 #define GPR_WINDOWS_ATOMIC 1
169 #elif defined(ANDROID) || defined(__ANDROID__)
170 #define GPR_PLATFORM_STRING "android"
171 #define GPR_ANDROID 1
172 #ifndef __ANDROID_API__
173 #error "__ANDROID_API__ must be defined for Android builds."
175 #if __ANDROID_API__ < 21
176 #error "Requires Android API v21 and above"
183 #define GPR_ARCH_64 1
185 #define GPR_ARCH_32 1
187 #define GPR_CPU_POSIX 1
188 #define GPR_GCC_SYNC 1
189 #define GPR_POSIX_ENV 1
190 #define GPR_POSIX_TMPFILE 1
191 #define GPR_POSIX_STAT 1
192 #define GPR_ANDROID_LOG 1
193 #define GPR_POSIX_STRING 1
194 #define GPR_POSIX_SUBPROCESS 1
195 #define GPR_POSIX_SYNC 1
196 #define GPR_POSIX_TIME 1
197 #define GPR_HAS_PTHREAD_H 1
198 #define GPR_GETPID_IN_UNISTD_H 1
199 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
200 #if defined(__has_include)
201 #if __has_include(<android/ndk-version.h>)
202 #include <android/ndk-version.h>
205 #include <linux/version.h>
206 #elif defined(__linux__)
207 #define GPR_PLATFORM_STRING "linux"
211 #ifndef _DEFAULT_SOURCE
212 #define _DEFAULT_SOURCE
217 #include <features.h>
218 #define GPR_CPU_LINUX 1
219 #define GPR_GCC_ATOMIC 1
221 #define GPR_LINUX_LOG
222 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
223 #define GPR_LINUX_ENV 1
224 #define GPR_POSIX_TMPFILE 1
225 #define GPR_POSIX_STAT 1
226 #define GPR_POSIX_STRING 1
227 #define GPR_POSIX_SUBPROCESS 1
228 #define GPR_POSIX_SYNC 1
229 #define GPR_POSIX_TIME 1
230 #define GPR_HAS_PTHREAD_H 1
231 #define GPR_GETPID_IN_UNISTD_H 1
233 #define GPR_ARCH_64 1
235 #define GPR_ARCH_32 1
238 #define GPR_POSIX_CRASH_HANDLER 1
239 #ifdef __GLIBC_PREREQ
240 #if __GLIBC_PREREQ(2, 12)
241 #define GPR_LINUX_PTHREAD_NAME 1
245 #define GPR_LINUX_PTHREAD_NAME 1
247 #include <linux/version.h>
249 #define GPR_MUSL_LIBC_COMPAT 1
251 #elif defined(__ASYLO__)
252 #define GPR_ARCH_64 1
253 #define GPR_CPU_POSIX 1
254 #define GPR_PLATFORM_STRING "asylo"
255 #define GPR_GCC_SYNC 1
256 #define GPR_POSIX_STAT 1
257 #define GPR_POSIX_SYNC 1
258 #define GPR_POSIX_STRING 1
259 #define GPR_POSIX_LOG 1
260 #define GPR_POSIX_TIME 1
261 #define GPR_POSIX_ENV 1
263 #define GRPC_POSIX_SOCKET 1
264 #define GRPC_POSIX_SOCKETADDR
265 #define GRPC_POSIX_SOCKETUTILS 1
266 #define GRPC_TIMER_USE_GENERIC 1
267 #define GRPC_POSIX_NO_SPECIAL_WAKEUP_FD 1
268 #define GRPC_POSIX_WAKEUP_FD 1
269 #define GRPC_HAVE_MSG_NOSIGNAL 1
270 #define GRPC_HAVE_UNIX_SOCKET 1
272 #define GPR_NO_AUTODETECT_PLATFORM 1
273 #elif defined(__APPLE__)
274 #include <Availability.h>
275 #include <TargetConditionals.h>
280 #define GPR_PLATFORM_STRING "ios"
281 #define GPR_CPU_IPHONE 1
282 #define GRPC_CFSTREAM 1
283 #ifndef GRPC_IOS_EVENT_ENGINE_CLIENT
284 #define GRPC_IOS_EVENT_ENGINE_CLIENT 1
289 #define GPR_PLATFORM_STRING "osx"
290 #define GPR_CPU_POSIX 1
291 #define GPR_POSIX_CRASH_HANDLER 1
294 #define GPR_GCC_ATOMIC 1
295 #define GPR_POSIX_LOG 1
296 #define GPR_POSIX_ENV 1
297 #define GPR_POSIX_TMPFILE 1
298 #define GPR_POSIX_STAT 1
299 #define GPR_POSIX_STRING 1
300 #define GPR_POSIX_SUBPROCESS 1
301 #define GPR_POSIX_SYNC 1
302 #define GPR_POSIX_TIME 1
303 #define GPR_HAS_PTHREAD_H 1
304 #define GPR_GETPID_IN_UNISTD_H 1
305 #ifndef GRPC_CFSTREAM
306 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
309 #define GPR_ARCH_64 1
311 #define GPR_ARCH_32 1
313 #elif defined(__FreeBSD__)
314 #define GPR_PLATFORM_STRING "freebsd"
318 #define GPR_FREEBSD 1
319 #define GPR_CPU_POSIX 1
320 #define GPR_GCC_ATOMIC 1
321 #define GPR_POSIX_LOG 1
322 #define GPR_POSIX_ENV 1
323 #define GPR_POSIX_TMPFILE 1
324 #define GPR_POSIX_STAT 1
325 #define GPR_POSIX_STRING 1
326 #define GPR_POSIX_SUBPROCESS 1
327 #define GPR_POSIX_SYNC 1
328 #define GPR_POSIX_TIME 1
329 #define GPR_HAS_PTHREAD_H 1
330 #define GPR_GETPID_IN_UNISTD_H 1
331 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
333 #define GPR_ARCH_64 1
335 #define GPR_ARCH_32 1
337 #elif defined(__OpenBSD__)
338 #define GPR_PLATFORM_STRING "openbsd"
342 #define GPR_OPENBSD 1
343 #define GPR_CPU_POSIX 1
344 #define GPR_GCC_ATOMIC 1
345 #define GPR_POSIX_LOG 1
346 #define GPR_POSIX_ENV 1
347 #define GPR_POSIX_TMPFILE 1
348 #define GPR_POSIX_STAT 1
349 #define GPR_POSIX_STRING 1
350 #define GPR_POSIX_SUBPROCESS 1
351 #define GPR_POSIX_SYNC 1
352 #define GPR_POSIX_TIME 1
353 #define GPR_HAS_PTHREAD_H 1
354 #define GPR_GETPID_IN_UNISTD_H 1
355 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
357 #define GPR_ARCH_64 1
359 #define GPR_ARCH_32 1
361 #elif defined(__sun) && defined(__SVR4)
362 #define GPR_PLATFORM_STRING "solaris"
363 #define GPR_SOLARIS 1
364 #define GPR_CPU_POSIX 1
365 #define GPR_GCC_ATOMIC 1
366 #define GPR_POSIX_LOG 1
367 #define GPR_POSIX_ENV 1
368 #define GPR_POSIX_TMPFILE 1
369 #define GPR_POSIX_STAT 1
370 #define GPR_POSIX_STRING 1
371 #define GPR_POSIX_SUBPROCESS 1
372 #define GPR_POSIX_SYNC 1
373 #define GPR_POSIX_TIME 1
374 #define GPR_HAS_PTHREAD_H 1
375 #define GPR_GETPID_IN_UNISTD_H 1
377 #define GPR_ARCH_64 1
379 #define GPR_ARCH_32 1
382 #define GPR_PLATFORM_STRING "aix"
387 #define GPR_CPU_POSIX 1
388 #define GPR_GCC_ATOMIC 1
389 #define GPR_POSIX_LOG 1
390 #define GPR_POSIX_ENV 1
391 #define GPR_POSIX_TMPFILE 1
392 #define GPR_POSIX_STAT 1
393 #define GPR_POSIX_STRING 1
394 #define GPR_POSIX_SUBPROCESS 1
395 #define GPR_POSIX_SYNC 1
396 #define GPR_POSIX_TIME 1
397 #define GPR_HAS_PTHREAD_H 1
398 #define GPR_GETPID_IN_UNISTD_H 1
400 #define GPR_ARCH_64 1
402 #define GPR_ARCH_32 1
404 #elif defined(__NetBSD__)
407 #define GPR_PLATFORM_STRING "netbsd"
412 #define GPR_CPU_POSIX 1
413 #define GPR_GCC_ATOMIC 1
414 #define GPR_GCC_TLS 1
415 #define GPR_POSIX_LOG 1
416 #define GPR_POSIX_ENV 1
417 #define GPR_POSIX_TMPFILE 1
418 #define GPR_POSIX_STAT 1
419 #define GPR_POSIX_STRING 1
420 #define GPR_POSIX_SUBPROCESS 1
421 #define GPR_POSIX_SYNC 1
422 #define GPR_POSIX_TIME 1
423 #define GPR_GETPID_IN_UNISTD_H 1
424 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
426 #define GPR_ARCH_64 1
428 #define GPR_ARCH_32 1
430 #elif defined(__native_client__)
431 #define GPR_PLATFORM_STRING "nacl"
435 #ifndef _DEFAULT_SOURCE
436 #define _DEFAULT_SOURCE
442 #define GPR_CPU_POSIX 1
443 #define GPR_GCC_ATOMIC 1
444 #define GPR_POSIX_LOG 1
445 #define GPR_POSIX_ENV 1
446 #define GPR_POSIX_TMPFILE 1
447 #define GPR_POSIX_STAT 1
448 #define GPR_POSIX_STRING 1
449 #define GPR_POSIX_SUBPROCESS 1
450 #define GPR_POSIX_SYNC 1
451 #define GPR_POSIX_TIME 1
452 #define GPR_HAS_PTHREAD_H 1
453 #define GPR_GETPID_IN_UNISTD_H 1
455 #define GPR_ARCH_64 1
457 #define GPR_ARCH_32 1
459 #elif defined(__Fuchsia__)
461 #define GPR_FUCHSIA 1
462 #define GPR_ARCH_64 1
463 #define GPR_PLATFORM_STRING "fuchsia"
464 #include <features.h>
467 #define GPR_MUSL_LIBC_COMPAT 1
468 #define GPR_CPU_POSIX 1
469 #define GPR_GCC_ATOMIC 1
470 #define GPR_POSIX_LOG 1
471 #define GPR_POSIX_SYNC 1
472 #define GPR_POSIX_ENV 1
473 #define GPR_POSIX_TMPFILE 1
474 #define GPR_POSIX_STAT 1
475 #define GPR_POSIX_SUBPROCESS 1
476 #define GPR_POSIX_SYNC 1
477 #define GPR_POSIX_STRING 1
478 #define GPR_POSIX_TIME 1
479 #define GPR_HAS_PTHREAD_H 1
480 #define GPR_GETPID_IN_UNISTD_H 1
481 #define GRPC_ROOT_PEM_PATH "/config/ssl/cert.pem"
482 #elif defined(__HAIKU__)
483 #define GPR_PLATFORM_STRING "haiku"
490 #define GPR_CPU_POSIX 1
491 #define GPR_GCC_ATOMIC 1
492 #define GPR_POSIX_LOG 1
493 #define GPR_POSIX_ENV 1
494 #define GPR_POSIX_TMPFILE 1
495 #define GPR_POSIX_STAT 1
496 #define GPR_POSIX_STRING 1
497 #define GPR_POSIX_SUBPROCESS 1
498 #define GPR_POSIX_SYNC 1
499 #define GPR_POSIX_TIME 1
500 #define GPR_HAS_PTHREAD_H 1
501 #define GPR_GETPID_IN_UNISTD_H 1
502 #define GPR_SUPPORT_CHANNELS_FROM_FD 1
504 #define GPR_ARCH_64 1
506 #define GPR_ARCH_32 1
508 #elif defined(__QNX__) || defined(__QNXNTO__)
509 #define GPR_PLATFORM_STRING "qnx"
510 #define GPR_CPU_POSIX 1
511 #define GPR_GCC_ATOMIC 1
512 #define GPR_POSIX_LOG 1
513 #define GPR_POSIX_ENV 1
514 #define GPR_POSIX_TMPFILE 1
515 #define GPR_POSIX_STAT 1
516 #define GPR_POSIX_STRING 1
517 #define GPR_POSIX_SYNC 1
518 #define GPR_POSIX_TIME 1
519 #define GPR_HAS_PTHREAD_H 1
520 #define GPR_GETPID_IN_UNISTD_H 1
522 #define GPR_ARCH_64 1
524 #define GPR_ARCH_32 1
527 #error "Could not auto-detect platform"
531 #if defined(__has_include)
532 #if __has_include(<atomic>)
533 #define GRPC_HAS_CXX11_ATOMIC
537 #ifndef GPR_PLATFORM_STRING
538 #warning "GPR_PLATFORM_STRING not auto-detected"
539 #define GPR_PLATFORM_STRING "unknown"
543 #undef GPR_FORBID_UNREACHABLE_CODE
544 #define GPR_FORBID_UNREACHABLE_CODE 1
549 typedef __int8 int8_t;
550 typedef __int16 int16_t;
551 typedef __int32 int32_t;
552 typedef __int64 int64_t;
553 typedef unsigned __int8 uint8_t;
554 typedef unsigned __int16 uint16_t;
555 typedef unsigned __int32 uint32_t;
556 typedef unsigned __int64 uint64_t;
576 #define GPR_CYCLE_COUNTER_FALLBACK 1
578 #define GPR_CYCLE_COUNTER_FALLBACK 1
582 #ifndef GPR_CACHELINE_SIZE_LOG
583 #if defined(__i386__) || defined(__x86_64__)
584 #define GPR_CACHELINE_SIZE_LOG 6
586 #ifndef GPR_CACHELINE_SIZE_LOG
589 #define GPR_CACHELINE_SIZE_LOG 6
593 #define GPR_CACHELINE_SIZE (1 << GPR_CACHELINE_SIZE_LOG)
596 #if defined(GPR_GCC_ATOMIC) && !defined(__ATOMIC_RELAXED)
597 #undef GPR_GCC_ATOMIC
598 #define GPR_GCC_SYNC 1
602 #if defined(GPR_GCC_ATOMIC) + defined(GPR_GCC_SYNC) + \
603 defined(GPR_WINDOWS_ATOMIC) != \
605 #error Must define exactly one of GPR_GCC_ATOMIC, GPR_GCC_SYNC, GPR_WINDOWS_ATOMIC
608 #if defined(GPR_ARCH_32) + defined(GPR_ARCH_64) != 1
609 #error Must define exactly one of GPR_ARCH_32, GPR_ARCH_64
612 #if defined(GPR_CPU_LINUX) + defined(GPR_CPU_POSIX) + defined(GPR_WINDOWS) + \
613 defined(GPR_CPU_IPHONE) + defined(GPR_CPU_CUSTOM) != \
615 #error Must define exactly one of GPR_CPU_LINUX, GPR_CPU_POSIX, GPR_WINDOWS, GPR_CPU_IPHONE, GPR_CPU_CUSTOM
620 #define GPR_MAX_ALIGNMENT 16
626 #ifndef GRPC_IF_NAMETOINDEX
627 #define GRPC_IF_NAMETOINDEX 1
631 #if defined(__GNUC__) && !defined(__MINGW32__)
632 #define GRPC_UNUSED __attribute__((unused))
638 #ifndef GPR_PRINT_FORMAT_CHECK
640 #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS) \
641 __attribute__((format(printf, FORMAT_STR, ARGS)))
643 #define GPR_PRINT_FORMAT_CHECK(FORMAT_STR, ARGS)
647 #ifndef GPR_HAS_CPP_ATTRIBUTE
648 #ifdef __has_cpp_attribute
649 #define GPR_HAS_CPP_ATTRIBUTE(a) __has_cpp_attribute(a)
651 #define GPR_HAS_CPP_ATTRIBUTE(a) 0
655 #if defined(__GNUC__) && !defined(__MINGW32__)
656 #define GPR_ALIGN_STRUCT(n) __attribute__((aligned(n)))
658 #define GPR_ALIGN_STRUCT(n)
661 #ifndef GRPC_MUST_USE_RESULT
662 #if GPR_HAS_CPP_ATTRIBUTE(nodiscard)
663 #define GRPC_MUST_USE_RESULT [[nodiscard]]
664 #elif defined(__GNUC__) && !defined(__MINGW32__)
665 #define GRPC_MUST_USE_RESULT __attribute__((warn_unused_result))
667 #define GRPC_MUST_USE_RESULT
669 #ifdef USE_STRICT_WARNING
678 #define GRPC_MUST_USE_RESULT_WHEN_USE_STRICT_WARNING GRPC_MUST_USE_RESULT
680 #define GRPC_MUST_USE_RESULT_WHEN_USE_STRICT_WARNING
684 #ifndef GRPC_REINITIALIZES
685 #if defined(__clang__)
686 #if GPR_HAS_CPP_ATTRIBUTE(clang::reinitializes)
687 #define GRPC_REINITIALIZES [[clang::reinitializes]]
689 #define GRPC_REINITIALIZES
692 #define GRPC_REINITIALIZES
696 #ifndef GPR_HAS_ATTRIBUTE
697 #ifdef __has_attribute
698 #define GPR_HAS_ATTRIBUTE(a) __has_attribute(a)
700 #define GPR_HAS_ATTRIBUTE(a) 0
704 #if GPR_HAS_ATTRIBUTE(noreturn)
705 #define GPR_ATTRIBUTE_NORETURN __attribute__((noreturn))
707 #define GPR_ATTRIBUTE_NORETURN
710 #if defined(GPR_FORBID_UNREACHABLE_CODE) && GPR_FORBID_UNREACHABLE_CODE
711 #define GPR_UNREACHABLE_CODE(STATEMENT)
721 #define GPR_UNREACHABLE_CODE(STATEMENT) \
723 gpr_unreachable_code(#STATEMENT, __FILE__, __LINE__); \
733 #define GRPCAPI GPRAPI
737 #define CENSUSAPI GRPCAPI
740 #ifndef GPR_HAS_FEATURE
742 #define GPR_HAS_FEATURE(a) __has_feature(a)
744 #define GPR_HAS_FEATURE(a) 0
748 #ifndef GPR_ATTRIBUTE_NOINLINE
749 #if GPR_HAS_ATTRIBUTE(noinline) || (defined(__GNUC__) && !defined(__clang__))
750 #define GPR_ATTRIBUTE_NOINLINE __attribute__((noinline))
751 #define GPR_HAS_ATTRIBUTE_NOINLINE 1
753 #define GPR_ATTRIBUTE_NOINLINE
757 #ifndef GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
759 #if GPR_HAS_CPP_ATTRIBUTE(clang::always_inline)
760 #define GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION [[clang::always_inline]]
761 #elif GPR_HAS_ATTRIBUTE(always_inline)
762 #define GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION __attribute__((always_inline))
765 #define GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
769 #define GPR_ATTRIBUTE_ALWAYS_INLINE_FUNCTION
773 #ifndef GPR_NO_UNIQUE_ADDRESS
774 #if GPR_HAS_CPP_ATTRIBUTE(no_unique_address)
775 #define GPR_NO_UNIQUE_ADDRESS [[no_unique_address]]
777 #define GPR_NO_UNIQUE_ADDRESS
781 #ifndef GRPC_DEPRECATED
782 #if GPR_HAS_CPP_ATTRIBUTE(deprecated)
783 #define GRPC_DEPRECATED(reason) [[deprecated(reason)]]
785 #define GRPC_DEPRECATED(reason)
789 #ifndef GPR_ATTRIBUTE_WEAK
792 #if (GPR_HAS_ATTRIBUTE(weak) || (defined(__GNUC__) && !defined(__clang__))) && \
793 !(defined(__llvm__) && defined(_WIN32))
794 #define GPR_ATTRIBUTE_WEAK __attribute__((weak))
795 #define GPR_HAS_ATTRIBUTE_WEAK 1
797 #define GPR_ATTRIBUTE_WEAK
801 #ifndef GPR_ATTRIBUTE_NO_TSAN
802 #if GPR_HAS_FEATURE(thread_sanitizer)
803 #define GPR_ATTRIBUTE_NO_TSAN __attribute__((no_sanitize("thread")))
805 #ifndef GPR_ATTRIBUTE_NO_TSAN
806 #define GPR_ATTRIBUTE_NO_TSAN
811 #ifndef GRPC_TSAN_SUPPRESSED
812 #if defined(__SANITIZE_THREAD__)
813 #define GRPC_TSAN_ENABLED
814 #elif GPR_HAS_FEATURE(thread_sanitizer)
815 #define GRPC_TSAN_ENABLED
820 #ifndef GRPC_ASAN_SUPPRESSED
821 #if defined(__SANITIZE_ADDRESS__)
822 #define GRPC_ASAN_ENABLED
823 #elif GPR_HAS_FEATURE(address_sanitizer)
824 #define GRPC_ASAN_ENABLED
829 #ifndef GRPC_ALLOW_EXCEPTIONS
831 #if defined(_MSC_VER) && defined(_CPPUNWIND)
832 #define GRPC_ALLOW_EXCEPTIONS 1
833 #elif defined(__EXCEPTIONS)
834 #define GRPC_ALLOW_EXCEPTIONS 1
836 #define GRPC_ALLOW_EXCEPTIONS 0
840 #define GRPC_ALLOW_EXCEPTIONS 1
842 #define GRPC_ALLOW_EXCEPTIONS 0
848 #define GRPC_HAS_BUILTIN(a) __has_builtin(a)
850 #define GRPC_HAS_BUILTIN(a) 0
857 #define GPR_LIKELY(x) __builtin_expect((x), 1)
858 #define GPR_UNLIKELY(x) __builtin_expect((x), 0)
860 #define GPR_LIKELY(x) (x)
861 #define GPR_UNLIKELY(x) (x)
864 #ifndef __STDC_FORMAT_MACROS
865 #define __STDC_FORMAT_MACROS
873 #ifndef GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND
875 #define GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND __declspec(empty_bases)
877 #define GPR_MSVC_EMPTY_BASE_CLASS_WORKAROUND
881 #define GRPC_CALLBACK_API_NONEXPERIMENTAL
888 #if __clang__ && __clang_major__ <= 12 && __has_feature(memory_sanitizer)
889 #undef GPR_NO_UNIQUE_ADDRESS
890 #define GPR_NO_UNIQUE_ADDRESS