summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm/wat-lexer.cpp2
-rw-r--r--test/gtest/wat-lexer.cpp18
2 files changed, 12 insertions, 8 deletions
diff --git a/src/wasm/wat-lexer.cpp b/src/wasm/wat-lexer.cpp
index befa9f6ab..6d7e9edec 100644
--- a/src/wasm/wat-lexer.cpp
+++ b/src/wasm/wat-lexer.cpp
@@ -221,6 +221,8 @@ struct LexFloatCtx : LexCtx {
std::optional<LexFloatResult> lexed() {
const double posNan = std::copysign(NAN, 1.0);
const double negNan = std::copysign(NAN, -1.0);
+ assert(!std::signbit(posNan) && "expected positive NaN to be positive");
+ assert(std::signbit(negNan) && "expected negative NaN to be negative");
auto basic = LexCtx::lexed();
if (!basic) {
return {};
diff --git a/test/gtest/wat-lexer.cpp b/test/gtest/wat-lexer.cpp
index 0820f4561..3e941a7f6 100644
--- a/test/gtest/wat-lexer.cpp
+++ b/test/gtest/wat-lexer.cpp
@@ -1094,53 +1094,55 @@ TEST(LexerTest, LexInfinity) {
}
TEST(LexerTest, LexNan) {
+ const double posNan = std::copysign(NAN, 1.0);
+ const double negNan = std::copysign(NAN, -1.0);
{
Lexer lexer("nan"sv);
ASSERT_FALSE(lexer.empty());
- Token expected{"nan"sv, FloatTok{{}, NAN}};
+ Token expected{"nan"sv, FloatTok{{}, posNan}};
EXPECT_EQ(*lexer, expected);
}
{
Lexer lexer("+nan"sv);
ASSERT_FALSE(lexer.empty());
- Token expected{"+nan"sv, FloatTok{{}, NAN}};
+ Token expected{"+nan"sv, FloatTok{{}, posNan}};
EXPECT_EQ(*lexer, expected);
}
{
Lexer lexer("-nan"sv);
ASSERT_FALSE(lexer.empty());
- Token expected{"-nan"sv, FloatTok{{}, -NAN}};
+ Token expected{"-nan"sv, FloatTok{{}, negNan}};
EXPECT_EQ(*lexer, expected);
}
{
Lexer lexer("nan:0x01"sv);
ASSERT_FALSE(lexer.empty());
- Token expected{"nan:0x01"sv, FloatTok{{1}, NAN}};
+ Token expected{"nan:0x01"sv, FloatTok{{1}, posNan}};
EXPECT_EQ(*lexer, expected);
}
{
Lexer lexer("+nan:0x01"sv);
ASSERT_FALSE(lexer.empty());
- Token expected{"+nan:0x01"sv, FloatTok{{1}, NAN}};
+ Token expected{"+nan:0x01"sv, FloatTok{{1}, posNan}};
EXPECT_EQ(*lexer, expected);
}
{
Lexer lexer("-nan:0x01"sv);
ASSERT_FALSE(lexer.empty());
- Token expected{"-nan:0x01"sv, FloatTok{{1}, -NAN}};
+ Token expected{"-nan:0x01"sv, FloatTok{{1}, negNan}};
EXPECT_EQ(*lexer, expected);
}
{
Lexer lexer("nan:0x1234"sv);
ASSERT_FALSE(lexer.empty());
- Token expected{"nan:0x1234"sv, FloatTok{{0x1234}, NAN}};
+ Token expected{"nan:0x1234"sv, FloatTok{{0x1234}, posNan}};
EXPECT_EQ(*lexer, expected);
}
{
Lexer lexer("nan:0xf_ffff_ffff_ffff"sv);
ASSERT_FALSE(lexer.empty());
Token expected{"nan:0xf_ffff_ffff_ffff"sv,
- FloatTok{{0xfffffffffffff}, NAN}};
+ FloatTok{{0xfffffffffffff}, posNan}};
EXPECT_EQ(*lexer, expected);
}
{