Skip to content

Commit 93f5f16

Browse files
authored
Improve constant fuzzing (#1244)
Generalize constant emitting in fuzzer, using +-1 and *+-1 effects to create more constants in a convenient way. Also workaround for a gcc-7.2/windows issue that we don't fully understand, but removing the 1, -1 from those pick() calls avoids the bug.
1 parent 059e6e3 commit 93f5f16

2 files changed

Lines changed: 714 additions & 831 deletions

File tree

src/tools/translate-to-fuzz.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -908,14 +908,14 @@ class TranslateToFuzzReader {
908908
case 2: {
909909
// special values
910910
switch (type) {
911-
case i32: value = Literal(pick<int32_t>(0, -1, 1,
911+
case i32: value = Literal(pick<int32_t>(0,
912912
std::numeric_limits<int8_t>::min(), std::numeric_limits<int8_t>::max(),
913913
std::numeric_limits<int16_t>::min(), std::numeric_limits<int16_t>::max(),
914914
std::numeric_limits<int32_t>::min(), std::numeric_limits<int32_t>::max(),
915915
std::numeric_limits<uint8_t>::max(),
916916
std::numeric_limits<uint16_t>::max(),
917917
std::numeric_limits<uint32_t>::max())); break;
918-
case i64: value = Literal(pick<int64_t>(0, -1, 1,
918+
case i64: value = Literal(pick<int64_t>(0,
919919
std::numeric_limits<int8_t>::min(), std::numeric_limits<int8_t>::max(),
920920
std::numeric_limits<int16_t>::min(), std::numeric_limits<int16_t>::max(),
921921
std::numeric_limits<int32_t>::min(), std::numeric_limits<int32_t>::max(),
@@ -924,13 +924,13 @@ class TranslateToFuzzReader {
924924
std::numeric_limits<uint16_t>::max(),
925925
std::numeric_limits<uint32_t>::max(),
926926
std::numeric_limits<uint64_t>::max())); break;
927-
case f32: value = Literal(pick<float>(0, -1, 1,
927+
case f32: value = Literal(pick<float>(0,
928928
std::numeric_limits<float>::min(), std::numeric_limits<float>::max(),
929929
std::numeric_limits<int32_t>::min(), std::numeric_limits<int32_t>::max(),
930930
std::numeric_limits<int64_t>::min(), std::numeric_limits<int64_t>::max(),
931931
std::numeric_limits<uint32_t>::max(),
932932
std::numeric_limits<uint64_t>::max())); break;
933-
case f64: value = Literal(pick<double>(0, -1, 1,
933+
case f64: value = Literal(pick<double>(0,
934934
std::numeric_limits<float>::min(), std::numeric_limits<float>::max(),
935935
std::numeric_limits<double>::min(), std::numeric_limits<double>::max(),
936936
std::numeric_limits<int32_t>::min(), std::numeric_limits<int32_t>::max(),
@@ -940,9 +940,12 @@ class TranslateToFuzzReader {
940940
default: WASM_UNREACHABLE();
941941
}
942942
// tweak around special values
943-
if (oneIn(3)) {
943+
if (oneIn(3)) { // +- 1
944944
value = value.add(LiteralUtils::makeLiteralFromInt32(upTo(3) - 1, type));
945945
}
946+
if (oneIn(2)) { // flip sign
947+
value = value.mul(LiteralUtils::makeLiteralFromInt32(-1, type));
948+
}
946949
break;
947950
}
948951
case 3: {

0 commit comments

Comments
 (0)