Commit 7450fc8b authored by Kenton Varda's avatar Kenton Varda

Fixes #90. The bug causes floating-point fields with non-zero defaults to be…

Fixes #90. The bug causes floating-point fields with non-zero defaults to be corrupted if they are set to NaN on a MIPS machine.
parent 55a16ee8
......@@ -1685,13 +1685,27 @@ TEST(Encoding, NameAnnotation) {
EXPECT_FALSE(nestedFieldBuilder.hasAnotherGoodNestedFieldName());
EXPECT_FALSE(root.getRenamedUnion().isRenamedGroup());
auto renamedGroupBuilder = root.getRenamedUnion().initRenamedGroup();
auto renamedGroupBuilder KJ_UNUSED = root.getRenamedUnion().initRenamedGroup();
EXPECT_TRUE(root.getRenamedUnion().isRenamedGroup());
test::RenamedInterface::RenamedMethodParams::Reader renamedInterfaceParams;
renamedInterfaceParams.getRenamedParam();
}
TEST(Encoding, DefaultFloatPlusNan) {
MallocMessageBuilder message;
auto root = message.initRoot<TestDefaults>();
root.setFloat32Field(kj::nan());
root.setFloat64Field(kj::nan());
float f = root.getFloat32Field();
EXPECT_TRUE(f != f);
double d = root.getFloat64Field();
EXPECT_TRUE(d != d);
}
} // namespace
} // namespace _ (private)
} // namespace capnp
......@@ -266,7 +266,7 @@ template <>
inline uint32_t mask<float>(float value, uint32_t mask) {
#if CAPNP_CANONICALIZE_NAN
if (value != value) {
return 0x7fc00000u;
return 0x7fc00000u ^ mask;
}
#endif
......@@ -280,7 +280,7 @@ template <>
inline uint64_t mask<double>(double value, uint64_t mask) {
#if CAPNP_CANONICALIZE_NAN
if (value != value) {
return 0x7ff8000000000000ull;
return 0x7ff8000000000000ull ^ mask;
}
#endif
......
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