diff options
author | Thomas Lively <tlively@google.com> | 2024-07-26 15:50:58 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-26 12:50:58 -0700 |
commit | f938154a44ae4dd2733537c5683ebe2eeb1989a2 (patch) | |
tree | af0f811ba2f89d237513532571900c0d74043ea7 /src/tools/wasm-reduce.cpp | |
parent | 9cc1cb1ca66e89cbe7b7b5b52897f3bee3ee422c (diff) | |
download | binaryen-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.cpp | 15 |
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); |