Changes imported from Abseil "staging" branch:

- 53419b5e123c4c9c47ecfe52ba747a271b03ae9c Add the sampling weight to MallocHook_SampledAlloc, so th... by Abseil Team <absl-team@google.com>
  - 8689c9a0dc685f50ba843a8d0d7d4274a1ec656a Factor out inline variable detection to separate macro. by Matt Calabrese <calabrese@google.com>
  - 0eac39ee9d81c03b8335c1cd3871d0dc4ec7bca7 Log the actual and expected durations for failed timing t... by Abseil Team <absl-team@google.com>

GitOrigin-RevId: 53419b5e123c4c9c47ecfe52ba747a271b03ae9c
Change-Id: I4ae8f5c0e924cdeee253fdf37d483d47893fc64c
This commit is contained in:
Abseil Team 2018-01-29 16:28:44 -08:00 committed by jueminyang
parent 46ed9d96d1
commit 26d8858ecc
4 changed files with 37 additions and 11 deletions

View file

@ -53,7 +53,24 @@
// it will likely be a reference type).
////////////////////////////////////////////////////////////////////////////////
#ifdef __cpp_inline_variables
// ABSL_INTERNAL_HAS_WARNING()
//
// If the compiler supports the `__has_warning` extension for detecting
// warnings, then this macro is defined to be `__has_warning`.
//
// If the compiler does not support `__has_warning`, invocations expand to 0.
//
// For clang's documentation of `__has_warning`, see
// https://clang.llvm.org/docs/LanguageExtensions.html#has-warning
#if defined(__has_warning)
#define ABSL_INTERNAL_HAS_WARNING __has_warning
#else // Otherwise, be optimistic and assume the warning is not enabled.
#define ABSL_INTERNAL_HAS_WARNING(warning) 0
#endif // defined(__has_warning)
// If the compiler supports inline variables and does not warn when used...
#if defined(__cpp_inline_variables) && \
!ABSL_INTERNAL_HAS_WARNING("-Wc++98-c++11-c++14-compat")
// Clang's -Wmissing-variable-declarations option erroneously warned that
// inline constexpr objects need to be pre-declared. This has now been fixed,
@ -66,19 +83,21 @@
// identity_t is used here so that the const and name are in the
// appropriate place for pointer types, reference types, function pointer
// types, etc..
#if defined(__clang__)
#if defined(__clang__) && \
ABSL_INTERNAL_HAS_WARNING("-Wmissing-variable-declarations")
#define ABSL_INTERNAL_EXTERN_DECL(type, name) \
extern const ::absl::internal::identity_t<type> name;
#else // Otherwise, just define the macro to do nothing.
#define ABSL_INTERNAL_EXTERN_DECL(type, name)
#endif // defined(__clang__)
#endif // defined(__clang__) &&
// ABSL_INTERNAL_HAS_WARNING("-Wmissing-variable-declarations")
// See above comment at top of file for details.
#define ABSL_INTERNAL_INLINE_CONSTEXPR(type, name, init) \
ABSL_INTERNAL_EXTERN_DECL(type, name) \
inline constexpr ::absl::internal::identity_t<type> name = init
#else
#else // Otherwise, we need to emulate inline variables...
// See above comment at top of file for details.
//
@ -102,6 +121,7 @@
static_assert(sizeof(void (*)(decltype(name))) != 0, \
"Silence unused variable warnings.")
#endif // __cpp_inline_variables
#endif // defined(__cpp_inline_variables) &&
// !ABSL_INTERNAL_HAS_WARNING("-Wc++98-c++11-c++14-compat")
#endif // ABSL_BASE_INTERNAL_INLINE_VARIABLE_EMULATION_H_