Skip to content

Commit 1ab75c3

Browse files
authored
Merge pull request #613 from wasmx/dirty-stack
Add assert to as<int32_t>() for dirty higher bits.
2 parents 5b60a7d + 059851d commit 1ab75c3

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

lib/fizzy/value.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ constexpr int64_t Value::as<int64_t>() const noexcept
6767
template <>
6868
constexpr int32_t Value::as<int32_t>() const noexcept
6969
{
70+
assert((i64 & 0xffffffff00000000) == 0);
7071
return static_cast<int32_t>(i64);
7172
}
7273

test/unittests/execute_numeric_test.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ TEST(execute_numeric, i32_lt_s)
8484
{
8585
EXPECT_THAT(execute_binary_operation(Instr::i32_lt_s, 22, 20), Result(0));
8686
EXPECT_THAT(execute_binary_operation(Instr::i32_lt_s, 20, 22), Result(1));
87-
EXPECT_THAT(execute_binary_operation(Instr::i32_lt_s, uint64_t(-41), uint64_t(-42)), Result(0));
88-
EXPECT_THAT(execute_binary_operation(Instr::i32_lt_s, uint64_t(-42), uint64_t(-41)), Result(1));
87+
EXPECT_THAT(execute_binary_operation(Instr::i32_lt_s, uint32_t(-41), uint32_t(-42)), Result(0));
88+
EXPECT_THAT(execute_binary_operation(Instr::i32_lt_s, uint32_t(-42), uint32_t(-41)), Result(1));
8989
}
9090

9191
TEST(execute_numeric, i32_lt_u)
@@ -98,8 +98,8 @@ TEST(execute_numeric, i32_gt_s)
9898
{
9999
EXPECT_THAT(execute_binary_operation(Instr::i32_gt_s, 22, 20), Result(1));
100100
EXPECT_THAT(execute_binary_operation(Instr::i32_gt_s, 20, 22), Result(0));
101-
EXPECT_THAT(execute_binary_operation(Instr::i32_gt_s, uint64_t(-41), uint64_t(-42)), Result(1));
102-
EXPECT_THAT(execute_binary_operation(Instr::i32_gt_s, uint64_t(-42), uint64_t(-41)), Result(0));
101+
EXPECT_THAT(execute_binary_operation(Instr::i32_gt_s, uint32_t(-41), uint32_t(-42)), Result(1));
102+
EXPECT_THAT(execute_binary_operation(Instr::i32_gt_s, uint32_t(-42), uint32_t(-41)), Result(0));
103103
}
104104

105105
TEST(execute_numeric, i32_gt_u)
@@ -113,9 +113,9 @@ TEST(execute_numeric, i32_le_s)
113113
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, 22, 20), Result(0));
114114
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, 20, 22), Result(1));
115115
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, 20, 20), Result(1));
116-
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, uint64_t(-41), uint64_t(-42)), Result(0));
117-
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, uint64_t(-42), uint64_t(-41)), Result(1));
118-
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, uint64_t(-42), uint64_t(-42)), Result(1));
116+
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, uint32_t(-41), uint32_t(-42)), Result(0));
117+
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, uint32_t(-42), uint32_t(-41)), Result(1));
118+
EXPECT_THAT(execute_binary_operation(Instr::i32_le_s, uint32_t(-42), uint32_t(-42)), Result(1));
119119
}
120120

121121
TEST(execute_numeric, i32_le_u)
@@ -130,9 +130,9 @@ TEST(execute_numeric, i32_ge_s)
130130
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, 22, 20), Result(1));
131131
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, 20, 22), Result(0));
132132
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, 20, 20), Result(1));
133-
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, uint64_t(-41), uint64_t(-42)), Result(1));
134-
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, uint64_t(-42), uint64_t(-41)), Result(0));
135-
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, uint64_t(-42), uint64_t(-42)), Result(1));
133+
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, uint32_t(-41), uint32_t(-42)), Result(1));
134+
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, uint32_t(-42), uint32_t(-41)), Result(0));
135+
EXPECT_THAT(execute_binary_operation(Instr::i32_ge_s, uint32_t(-42), uint32_t(-42)), Result(1));
136136
}
137137

138138
TEST(execute_numeric, i32_ge_u)
@@ -267,7 +267,7 @@ TEST(execute_numeric, i32_mul)
267267

268268
TEST(execute_numeric, i32_div_s)
269269
{
270-
EXPECT_THAT(execute_binary_operation(Instr::i32_div_s, uint64_t(-84), 2), Result(-42));
270+
EXPECT_THAT(execute_binary_operation(Instr::i32_div_s, uint32_t(-84), 2), Result(-42));
271271
}
272272

273273
TEST(execute_numeric, i32_div_s_by_zero)
@@ -278,7 +278,7 @@ TEST(execute_numeric, i32_div_s_by_zero)
278278
TEST(execute_numeric, i32_div_s_overflow)
279279
{
280280
EXPECT_THAT(execute_binary_operation(
281-
Instr::i32_div_s, uint64_t(std::numeric_limits<int32_t>::min()), uint64_t(-1)),
281+
Instr::i32_div_s, uint32_t(std::numeric_limits<int32_t>::min()), uint32_t(-1)),
282282
Traps());
283283
}
284284

@@ -307,10 +307,10 @@ TEST(execute_numeric, i32_div_u_by_zero)
307307

308308
TEST(execute_numeric, i32_rem_s)
309309
{
310-
EXPECT_THAT(execute_binary_operation(Instr::i32_rem_s, uint64_t(-4242), 4200), Result(-42));
310+
EXPECT_THAT(execute_binary_operation(Instr::i32_rem_s, uint32_t(-4242), 4200), Result(-42));
311311
constexpr auto i32_min = std::numeric_limits<int32_t>::min();
312312
EXPECT_THAT(
313-
execute_binary_operation(Instr::i32_rem_s, uint64_t(i32_min), uint64_t(-1)), Result(0));
313+
execute_binary_operation(Instr::i32_rem_s, uint32_t(i32_min), uint32_t(-1)), Result(0));
314314
}
315315

316316
TEST(execute_numeric, i32_rem_s_by_zero)
@@ -369,7 +369,7 @@ TEST(execute_numeric, i32_shl)
369369

370370
TEST(execute_numeric, i32_shr_s)
371371
{
372-
EXPECT_THAT(execute_binary_operation(Instr::i32_shr_s, uint64_t(-84), 1), Result(-42));
372+
EXPECT_THAT(execute_binary_operation(Instr::i32_shr_s, uint32_t(-84), 1), Result(-42));
373373
EXPECT_THAT(execute_binary_operation(Instr::i32_shr_s, 0xffffffff, 0), Result(0xffffffff));
374374
EXPECT_THAT(execute_binary_operation(Instr::i32_shr_s, 0xffffffff, 1), Result(0xffffffff));
375375
EXPECT_THAT(execute_binary_operation(Instr::i32_shr_s, 0xffffffff, 31), Result(0xffffffff));

0 commit comments

Comments
 (0)