diff options
author | Randolf J <34705014+jun-sheaf@users.noreply.github.com> | 2022-10-04 20:21:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-04 20:21:02 +0200 |
commit | bf2bf60a3e29f159c8aa513d58cbe65f3f633bb6 (patch) | |
tree | 53c1ddffbb28a98cf4d8436ca3d05757d90e863f | |
parent | 71aa5dda4ca027437a86f087f4fe93f21f5d0638 (diff) |
Update charconv.cc
-rw-r--r-- | absl/strings/charconv.cc | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/absl/strings/charconv.cc b/absl/strings/charconv.cc index 88bd7eaf..a961d16c 100644 --- a/absl/strings/charconv.cc +++ b/absl/strings/charconv.cc @@ -334,24 +334,23 @@ 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 + // A bug in 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; +#ifdef __GNUC__ volatile char n_char_sequence[kNanBufferSize]; +#else + char n_char_sequence[kNanBufferSize]; +#endif if (input.subrange_begin == nullptr) { n_char_sequence[0] = '\0'; } else { ptrdiff_t nan_size = input.subrange_end - input.subrange_begin; nan_size = std::min(nan_size, kNanBufferSize - 1); -#ifdef __GNUC__ std::copy_n(input.subrange_begin, nan_size, n_char_sequence); -#else - std::copy_n(input.subrange_begin, nan_size, const_cast<char *>(n_char_sequence)); -#endif n_char_sequence[nan_size] = '\0'; } char* nan_argument = const_cast<char*>(n_char_sequence); |