summaryrefslogtreecommitdiff
path: root/src/tools/wasm-reduce.cpp
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-07-26 15:50:58 -0400
committerGitHub <noreply@github.com>2024-07-26 12:50:58 -0700
commitf938154a44ae4dd2733537c5683ebe2eeb1989a2 (patch)
treeaf0f811ba2f89d237513532571900c0d74043ea7 /src/tools/wasm-reduce.cpp
parent9cc1cb1ca66e89cbe7b7b5b52897f3bee3ee422c (diff)
downloadbinaryen-f938154a44ae4dd2733537c5683ebe2eeb1989a2.tar.gz
binaryen-f938154a44ae4dd2733537c5683ebe2eeb1989a2.tar.bz2
binaryen-f938154a44ae4dd2733537c5683ebe2eeb1989a2.zip
[wasm-reduce] Do not crash on non-func element segments (#6778)
Generalize the code for simplifying element segments to handle more than just null and funcref elements.
Diffstat (limited to 'src/tools/wasm-reduce.cpp')
-rw-r--r--src/tools/wasm-reduce.cpp15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/tools/wasm-reduce.cpp b/src/tools/wasm-reduce.cpp
index ac5b7722b..c276296ad 100644
--- a/src/tools/wasm-reduce.cpp
+++ b/src/tools/wasm-reduce.cpp
@@ -854,18 +854,13 @@ struct Reducer
reduceByZeroing(
segment.get(),
first,
- [&](Expression* entry) {
- if (entry->is<RefNull>()) {
- // we don't need to replace a ref.null
+ [&](Expression* elem) {
+ if (elem->is<RefNull>()) {
+ // We don't need to replace a ref.null.
return true;
- } else if (first->is<RefNull>()) {
- return false;
- } else {
- // Both are ref.func
- auto* f = first->cast<RefFunc>();
- auto* e = entry->cast<RefFunc>();
- return f->func == e->func;
}
+ // Is the element equal to our first "zero" element?
+ return ExpressionAnalyzer::equal(first, elem);
},
1,
shrank);