Merge pull request #1285 from jun-sheaf:patch-1

PiperOrigin-RevId: 479310550
Change-Id: Id42c33f58d4d0bbdf131a807540cff212f3a6bc8
pull/1290/head
Copybara-Service 2 years ago
commit a39feb0a01
  1. 11
      absl/strings/charconv.cc

@ -339,14 +339,19 @@ template <typename FloatType>
bool HandleEdgeCase(const strings_internal::ParsedFloat& input, bool negative,
FloatType* value) {
if (input.type == strings_internal::FloatType::kNan) {
// A bug in both clang and gcc would cause the compiler to optimize away the
// buffer we are building below. Declaring the buffer volatile avoids the
// issue, and has no measurable performance impact in microbenchmarks.
// A bug in both clang < 7 and gcc would cause the compiler to optimize
// away the buffer we are building below. Declaring the buffer volatile
// avoids the issue, and has no measurable performance impact in
// microbenchmarks.
//
// https://bugs.llvm.org/show_bug.cgi?id=37778
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86113
constexpr ptrdiff_t kNanBufferSize = 128;
#if defined(__GNUC__) || (defined(__clang__) && __clang_major__ < 7)
volatile char n_char_sequence[kNanBufferSize];
#else
char n_char_sequence[kNanBufferSize];
#endif
if (input.subrange_begin == nullptr) {
n_char_sequence[0] = '\0';
} else {

Loading…
Cancel
Save