Skip to content

Commit

Permalink
Use absl::bit_cast to implicitly check presence of float and double.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 626137024
  • Loading branch information
protobuf-github-bot authored and copybara-github committed Apr 19, 2024
1 parent 0cda26d commit bd13970
Showing 1 changed file with 2 additions and 12 deletions.
14 changes: 2 additions & 12 deletions src/google/protobuf/compiler/cpp/message.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit bd13970

Please sign in to comment.