diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-09 20:15:20 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-09 20:15:20 -0800 |
commit | 404846caeaf2f866aeffc3523403c2272e323dac (patch) | |
tree | 65be3a415c14048ce6700386d45ccc89d501069e | |
parent | 0073656f9d1a0f74da798bf3b1890f94e9502517 (diff) | |
download | binaryen-404846caeaf2f866aeffc3523403c2272e323dac.tar.gz binaryen-404846caeaf2f866aeffc3523403c2272e323dac.tar.bz2 binaryen-404846caeaf2f866aeffc3523403c2272e323dac.zip |
handle some switch errors, get the switch testcase passing
-rw-r--r-- | src/wasm-s-parser.h | 1 | ||||
-rw-r--r-- | src/wasm.h | 7 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index f71d65707..642a28606 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -1040,6 +1040,7 @@ private: for (; i < s.size(); i++) { Element& curr = *s[i]; assert(curr[0]->str() == CASE); + if (curr.size() < 2) onError(); ret->cases.emplace_back(curr[1]->str(), makeMaybeBlock(curr, 2, curr.size())); } ret->updateCaseMap(); diff --git a/src/wasm.h b/src/wasm.h index 0afb955a9..c292e6bc6 100644 --- a/src/wasm.h +++ b/src/wasm.h @@ -1319,21 +1319,20 @@ bool Module::validateFunction(Function *func) { if (!validateAlignment(curr->align)) valid = false; } void visitSwitch(Switch *curr) override { -std::cerr << "validate switch "; -curr->doPrint(std::cerr, 0) << "\n"; std::set<Name> inTable; for (auto target : curr->targets) { if (target.is()) { inTable.insert(target); -std::cerr << "in table: " << target << '\n'; } } for (auto& c : curr->cases) { -std::cerr << "chack: " << c.name.is() << " : " << (c.name.is() ? c.name.str : "ASSDAS") << '\n'; if (c.name.is() && inTable.find(c.name) == inTable.end()) { valid = false; } } + if (curr->default_.is() && inTable.find(curr->default_) == inTable.end()) { + valid = false; + } } bool validateAlignment(size_t align) { |