Export of internal Abseil changes

--
317c7bd0caa12fa0a4dc65dc9c8e645211f85872 by Abseil Team <absl-team@google.com>:

Elide the Emscripten JS-based stack trace and symbolization functions when
building in Standalone Mode.

Users will need to set `-DSTANDALONE_WASM=1` in some toolchain(s).

PiperOrigin-RevId: 408961649

--
92ba3ab1ef3edee4b7fb9e151f2061661e7beb0a by Derek Mauro <dmauro@google.com>:

Suppress MSVC warning "C4127: conditional expression is constant"

Fixes #1004

PiperOrigin-RevId: 408920356
GitOrigin-RevId: 317c7bd0caa12fa0a4dc65dc9c8e645211f85872
Change-Id: Ieca0a9e263874ba5bd93110dc437c56bc59ad5a7
pull/1062/head
Abseil Team 4 years ago committed by rogeeff
parent 732b5580f0
commit f2dbd918d8
  1. 3
      absl/debugging/internal/stacktrace_config.h
  2. 7
      absl/debugging/symbolize.cc
  3. 30
      absl/strings/numbers.h

@ -37,7 +37,8 @@
"absl/debugging/internal/stacktrace_generic-inl.inc" "absl/debugging/internal/stacktrace_generic-inl.inc"
#endif // defined(ABSL_HAVE_THREAD_LOCAL) #endif // defined(ABSL_HAVE_THREAD_LOCAL)
#elif defined(__EMSCRIPTEN__) // Emscripten stacktraces rely on JS. Do not use them in standalone mode.
#elif defined(__EMSCRIPTEN__) && !defined(STANDALONE_WASM)
#define ABSL_STACKTRACE_INL_HEADER \ #define ABSL_STACKTRACE_INL_HEADER \
"absl/debugging/internal/stacktrace_emscripten-inl.inc" "absl/debugging/internal/stacktrace_emscripten-inl.inc"

@ -23,6 +23,11 @@
#endif #endif
#endif #endif
// Emscripten symbolization relies on JS. Do not use them in standalone mode.
#if defined(__EMSCRIPTEN__) && !defined(STANDALONE_WASM)
#define ABSL_INTERNAL_HAVE_SYMBOLIZE_WASM
#endif
#if defined(ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE) #if defined(ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE)
#include "absl/debugging/symbolize_elf.inc" #include "absl/debugging/symbolize_elf.inc"
#elif defined(ABSL_INTERNAL_HAVE_SYMBOLIZE_WIN32) #elif defined(ABSL_INTERNAL_HAVE_SYMBOLIZE_WIN32)
@ -31,7 +36,7 @@
#include "absl/debugging/symbolize_win32.inc" #include "absl/debugging/symbolize_win32.inc"
#elif defined(__APPLE__) #elif defined(__APPLE__)
#include "absl/debugging/symbolize_darwin.inc" #include "absl/debugging/symbolize_darwin.inc"
#elif defined(__EMSCRIPTEN__) #elif defined(ABSL_INTERNAL_HAVE_SYMBOLIZE_WASM)
#include "absl/debugging/symbolize_emscripten.inc" #include "absl/debugging/symbolize_emscripten.inc"
#else #else
#include "absl/debugging/symbolize_unimplemented.inc" #include "absl/debugging/symbolize_unimplemented.inc"

@ -181,16 +181,19 @@ char* FastIntToBuffer(int_type i, char* buffer) {
// TODO(jorg): This signed-ness check is used because it works correctly // TODO(jorg): This signed-ness check is used because it works correctly
// with enums, and it also serves to check that int_type is not a pointer. // with enums, and it also serves to check that int_type is not a pointer.
// If one day something like std::is_signed<enum E> works, switch to it. // If one day something like std::is_signed<enum E> works, switch to it.
if (static_cast<int_type>(1) - 2 < 0) { // Signed // These conditions are constexpr bools to suppress MSVC warning C4127.
if (sizeof(i) > 32 / 8) { // 33-bit to 64-bit constexpr bool kIsSigned = static_cast<int_type>(1) - 2 < 0;
constexpr bool kUse64Bit = sizeof(i) > 32 / 8;
if (kIsSigned) {
if (kUse64Bit) {
return FastIntToBuffer(static_cast<int64_t>(i), buffer); return FastIntToBuffer(static_cast<int64_t>(i), buffer);
} else { // 32-bit or less } else {
return FastIntToBuffer(static_cast<int32_t>(i), buffer); return FastIntToBuffer(static_cast<int32_t>(i), buffer);
} }
} else { // Unsigned } else {
if (sizeof(i) > 32 / 8) { // 33-bit to 64-bit if (kUse64Bit) {
return FastIntToBuffer(static_cast<uint64_t>(i), buffer); return FastIntToBuffer(static_cast<uint64_t>(i), buffer);
} else { // 32-bit or less } else {
return FastIntToBuffer(static_cast<uint32_t>(i), buffer); return FastIntToBuffer(static_cast<uint32_t>(i), buffer);
} }
} }
@ -209,22 +212,25 @@ ABSL_MUST_USE_RESULT bool safe_strtoi_base(absl::string_view s, int_type* out,
// TODO(jorg): This signed-ness check is used because it works correctly // TODO(jorg): This signed-ness check is used because it works correctly
// with enums, and it also serves to check that int_type is not a pointer. // with enums, and it also serves to check that int_type is not a pointer.
// If one day something like std::is_signed<enum E> works, switch to it. // If one day something like std::is_signed<enum E> works, switch to it.
if (static_cast<int_type>(1) - 2 < 0) { // Signed // These conditions are constexpr bools to suppress MSVC warning C4127.
if (sizeof(*out) == 64 / 8) { // 64-bit constexpr bool kIsSigned = static_cast<int_type>(1) - 2 < 0;
constexpr bool kUse64Bit = sizeof(*out) == 64 / 8;
if (kIsSigned) {
if (kUse64Bit) {
int64_t val; int64_t val;
parsed = numbers_internal::safe_strto64_base(s, &val, base); parsed = numbers_internal::safe_strto64_base(s, &val, base);
*out = static_cast<int_type>(val); *out = static_cast<int_type>(val);
} else { // 32-bit } else {
int32_t val; int32_t val;
parsed = numbers_internal::safe_strto32_base(s, &val, base); parsed = numbers_internal::safe_strto32_base(s, &val, base);
*out = static_cast<int_type>(val); *out = static_cast<int_type>(val);
} }
} else { // Unsigned } else {
if (sizeof(*out) == 64 / 8) { // 64-bit if (kUse64Bit) {
uint64_t val; uint64_t val;
parsed = numbers_internal::safe_strtou64_base(s, &val, base); parsed = numbers_internal::safe_strtou64_base(s, &val, base);
*out = static_cast<int_type>(val); *out = static_cast<int_type>(val);
} else { // 32-bit } else {
uint32_t val; uint32_t val;
parsed = numbers_internal::safe_strtou32_base(s, &val, base); parsed = numbers_internal::safe_strtou32_base(s, &val, base);
*out = static_cast<int_type>(val); *out = static_cast<int_type>(val);

Loading…
Cancel
Save