diff options
author | Copybara-Service <copybara-worker@google.com> | 2022-10-06 07:37:16 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2022-10-06 07:37:16 -0700 |
commit | a39feb0a01adec8326651984d4206d652481400c (patch) | |
tree | 1ad503684edb07d8bf990b2d44a8da8e797413a1 | |
parent | 1fd600dc490db4db0ebf7bcc629d8914e828467e (diff) | |
parent | 541818ee3030fc88ff8f9328bf24ed0c8984d77e (diff) | |
download | abseil-a39feb0a01adec8326651984d4206d652481400c.tar.gz abseil-a39feb0a01adec8326651984d4206d652481400c.tar.bz2 abseil-a39feb0a01adec8326651984d4206d652481400c.zip |
Merge pull request #1285 from jun-sheaf:patch-1
PiperOrigin-RevId: 479310550
Change-Id: Id42c33f58d4d0bbdf131a807540cff212f3a6bc8
-rw-r--r-- | absl/strings/charconv.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/absl/strings/charconv.cc b/absl/strings/charconv.cc index 9b4bc5ea..c08623c4 100644 --- a/absl/strings/charconv.cc +++ b/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 { |