summaryrefslogtreecommitdiff
path: root/test/example/cpp-unit.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-09-01 14:06:56 -0700
committerGitHub <noreply@github.com>2021-09-01 21:06:56 +0000
commit4bf2d3bc3da17a28b65222d6e84f6126dcb9c553 (patch)
treec3ea072129f8d30305280cb1265badcaffc1928a /test/example/cpp-unit.cpp
parentb50064bde4f584813398b7696ce7a4a3bf1cbbaa (diff)
downloadbinaryen-4bf2d3bc3da17a28b65222d6e84f6126dcb9c553.tar.gz
binaryen-4bf2d3bc3da17a28b65222d6e84f6126dcb9c553.tar.bz2
binaryen-4bf2d3bc3da17a28b65222d6e84f6126dcb9c553.zip
Fix the effects of array.copy (#4118)
This appeared to be a regression from #4117, however this was always a bug, and that PR just exposed it. That is, somehow we forgot to indicate the effects of ArrayCopy, and after that PR we'd vacuum it out incorrectly.
Diffstat (limited to 'test/example/cpp-unit.cpp')
-rw-r--r--test/example/cpp-unit.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/example/cpp-unit.cpp b/test/example/cpp-unit.cpp
index 9c95bb31c..41096a43a 100644
--- a/test/example/cpp-unit.cpp
+++ b/test/example/cpp-unit.cpp
@@ -599,12 +599,26 @@ void test_cost() {
void test_effects() {
PassOptions options;
Module module;
+
// Unreachables trap.
Unreachable unreachable;
assert_equal(EffectAnalyzer(options, module, &unreachable).trap, true);
+
// Nops... do not.
Nop nop;
assert_equal(EffectAnalyzer(options, module, &nop).trap, false);
+
+ // ArrayCopy can trap, reads arrays, and writes arrays (but not structs).
+ {
+ ArrayCopy arrayCopy(module.allocator);
+ EffectAnalyzer effects(options, module);
+ effects.visit(&arrayCopy);
+ assert_equal(effects.trap, true);
+ assert_equal(effects.readsArray, true);
+ assert_equal(effects.writesArray, true);
+ assert_equal(effects.readsStruct, false);
+ assert_equal(effects.writesStruct, false);
+ }
}
void test_literals() {