Unverified Commit 5efb004d by John Kessenich Committed by GitHub

Merge pull request #1711 from demett-brcm/avoid-undefined-behaviour

Avoid undefined behaviour
parents e442a038 0b018419
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#else #else
#include <cmath> #include <cmath>
#endif #endif
#include <cstdint>
namespace { namespace {
...@@ -1162,8 +1163,11 @@ static void OutputDouble(TInfoSink& out, double value, TOutputTraverser::EExtraO ...@@ -1162,8 +1163,11 @@ static void OutputDouble(TInfoSink& out, double value, TOutputTraverser::EExtraO
switch (extra) { switch (extra) {
case TOutputTraverser::BinaryDoubleOutput: case TOutputTraverser::BinaryDoubleOutput:
{ {
uint64_t b;
static_assert(sizeof(b) == sizeof(value), "sizeof(uint64_t) != sizeof(double)");
memcpy(&b, &value, sizeof(b));
out.debug << " : "; out.debug << " : ";
long long b = *reinterpret_cast<long long*>(&value);
for (size_t i = 0; i < 8 * sizeof(value); ++i, ++b) { for (size_t i = 0; i < 8 * sizeof(value); ++i, ++b) {
out.debug << ((b & 0x8000000000000000) != 0 ? "1" : "0"); out.debug << ((b & 0x8000000000000000) != 0 ? "1" : "0");
b <<= 1; b <<= 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment