From eeeb985a1bad97631acb547d857333e8fe89a42a Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Fri, 19 Apr 2024 10:21:55 -0700 Subject: [PATCH] Use absl::bit_cast to implicitly check presence of float and double. PiperOrigin-RevId: 626402666 --- src/google/protobuf/compiler/cpp/message.cc | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/google/protobuf/compiler/cpp/message.cc b/src/google/protobuf/compiler/cpp/message.cc index 647f804d20..b54749c245 100644 --- a/src/google/protobuf/compiler/cpp/message.cc +++ b/src/google/protobuf/compiler/cpp/message.cc @@ -208,21 +208,11 @@ bool EmitFieldNonDefaultCondition(io::Printer* p, const std::string& prefix, )cc"); } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_FLOAT) { p->Emit(R"cc( - static_assert(sizeof(::uint32_t) == sizeof(float), - "Code assumes ::uint32_t and float are the same size."); - float tmp_$name$ = $prefix$_internal_$name$(); - ::uint32_t raw_$name$; - memcpy(&raw_$name$, &tmp_$name$, sizeof(tmp_$name$)); - if (raw_$name$ != 0) { + if (::absl::bit_cast<::uint32_t>($prefix$_internal_$name$()) != 0) { )cc"); } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_DOUBLE) { p->Emit(R"cc( - static_assert(sizeof(::uint64_t) == sizeof(double), - "Code assumes ::uint64_t and double are the same size."); - double tmp_$name$ = $prefix$_internal_$name$(); - ::uint64_t raw_$name$; - memcpy(&raw_$name$, &tmp_$name$, sizeof(tmp_$name$)); - if (raw_$name$ != 0) { + if (::absl::bit_cast<::uint64_t>($prefix$_internal_$name$()) != 0) { )cc"); } else { p->Emit(R"cc(