summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tools/execution-results.h32
-rw-r--r--test/passes/fuzz-exec_all-features.txt4
-rw-r--r--test/passes/simplify-globals_all-features_fuzz-exec.txt4
3 files changed, 32 insertions, 8 deletions
diff --git a/src/tools/execution-results.h b/src/tools/execution-results.h
index d99826210..a183ad93b 100644
--- a/src/tools/execution-results.h
+++ b/src/tools/execution-results.h
@@ -44,8 +44,20 @@ struct LoggingExternalInterface : public ShellExternalInterface {
std::cout << "[LoggingExternalInterface logging";
loggings.push_back(Literal()); // buffer with a None between calls
for (auto argument : arguments) {
- std::cout << ' ' << argument;
- loggings.push_back(argument);
+ if (argument.type == Type::i64) {
+ // To avoid JS legalization changing logging results, treat a logging
+ // of an i64 as two i32s (which is what legalization would turn us
+ // into).
+ auto low = Literal(int32_t(argument.getInteger()));
+ auto high = Literal(int32_t(argument.getInteger() >> int32_t(32)));
+ std::cout << ' ' << low;
+ loggings.push_back(low);
+ std::cout << ' ' << high;
+ loggings.push_back(high);
+ } else {
+ std::cout << ' ' << argument;
+ loggings.push_back(argument);
+ }
}
std::cout << "]\n";
return {};
@@ -97,8 +109,16 @@ struct ExecutionResults {
results[exp->name] = ret;
// ignore the result if we hit an unreachable and returned no value
if (ret.size() > 0) {
- std::cout << "[fuzz-exec] note result: " << exp->name << " => "
- << ret << '\n';
+ std::cout << "[fuzz-exec] note result: " << exp->name << " => ";
+ auto resultType = func->sig.results;
+ if (resultType.isRef()) {
+ // Don't print reference values, as funcref(N) contains an index
+ // for example, which is not guaranteed to remain identical after
+ // optimizations.
+ std::cout << resultType << '\n';
+ } else {
+ std::cout << ret << '\n';
+ }
}
} else {
// no result, run it anyhow (it might modify memory etc.)
@@ -202,6 +222,10 @@ struct ExecutionResults {
// call the method
for (const auto& param : func->sig.params) {
// zeros in arguments TODO: more?
+ if (!param.isDefaultable()) {
+ std::cout << "[trap fuzzer can only send defaultable parameters to "
+ "exports]\n";
+ }
arguments.push_back(Literal::makeZero(param));
}
return instance.callFunction(func->name, arguments);
diff --git a/test/passes/fuzz-exec_all-features.txt b/test/passes/fuzz-exec_all-features.txt
index 8785d088a..e5687b16a 100644
--- a/test/passes/fuzz-exec_all-features.txt
+++ b/test/passes/fuzz-exec_all-features.txt
@@ -208,7 +208,7 @@
[fuzz-exec] calling rmw-reads-modifies-and-writes-asymmetrical
[LoggingExternalInterface logging 214]
[fuzz-exec] calling func
-[fuzz-exec] note result: func => funcref(func)
+[fuzz-exec] note result: func => funcref
(module
(type $none_=>_funcref (func (result funcref)))
(elem declare func $func)
@@ -218,5 +218,5 @@
)
)
[fuzz-exec] calling func
-[fuzz-exec] note result: func => funcref(func)
+[fuzz-exec] note result: func => funcref
[fuzz-exec] comparing func
diff --git a/test/passes/simplify-globals_all-features_fuzz-exec.txt b/test/passes/simplify-globals_all-features_fuzz-exec.txt
index 464ef0912..68330b69f 100644
--- a/test/passes/simplify-globals_all-features_fuzz-exec.txt
+++ b/test/passes/simplify-globals_all-features_fuzz-exec.txt
@@ -1,5 +1,5 @@
[fuzz-exec] calling export
-[fuzz-exec] note result: export => funcref(0)
+[fuzz-exec] note result: export => funcref
(module
(type $f32_i31ref_i64_f64_funcref_=>_none (func (param f32 i31ref i64 f64 funcref)))
(type $none_=>_funcref (func (result funcref)))
@@ -17,5 +17,5 @@
)
)
[fuzz-exec] calling export
-[fuzz-exec] note result: export => funcref(0)
+[fuzz-exec] note result: export => funcref
[fuzz-exec] comparing export