summaryrefslogtreecommitdiff
path: root/src/tools/wasm-opt.cpp
diff options
context:
space:
mode:
authorAlon Zakai <azakai@google.com>2021-07-02 08:29:38 -0700
committerGitHub <noreply@github.com>2021-07-02 08:29:38 -0700
commitd2347ff02d807fc38559d5f436eabae694562dae (patch)
tree74a49461937212ab6c5b58b2af817c0195c03558 /src/tools/wasm-opt.cpp
parentea20225d793b6c743703ea04cd9bb46c07384853 (diff)
downloadbinaryen-d2347ff02d807fc38559d5f436eabae694562dae.tar.gz
binaryen-d2347ff02d807fc38559d5f436eabae694562dae.tar.bz2
binaryen-d2347ff02d807fc38559d5f436eabae694562dae.zip
Apply features from the commandline first (#3960)
As suggested in https://github.com/WebAssembly/binaryen/pull/3955#issuecomment-871016647 This applies commandline features first. If the features section is present, and disallows some of them, then we warn. Otherwise, the features can combine (for example, a wasm may enable feature X because it has to use it, and a user can simply add the flag for feature Y if they want the optimizer to try to use it; both flags will then be enabled). This is important because in some cases we need to know the features before parsing the wasm, in the case that the wasm does not use the features section. In particular, non-nullable GC locals have an effect during parsing. (Typed function references also does, but we found a way to apply its effect all the time, that is, always use the refined type, and that happened to not break the case where the feature is disabled - but such a workaround is not possible with non-nullable locals.) To make this less error-prone, add a FeatureSet input as a parameter to WasmBinaryBuilder. That is, when building a module, we must give it the features to use while doing so. This will unblock #3955 . That PR will also add a test for the actual usage of a feature during loading (the test can only be added there, after that PR unbreaks things).
Diffstat (limited to 'src/tools/wasm-opt.cpp')
-rw-r--r--src/tools/wasm-opt.cpp4
1 files changed, 1 insertions, 3 deletions
diff --git a/src/tools/wasm-opt.cpp b/src/tools/wasm-opt.cpp
index 45d394162..5aa0c374a 100644
--- a/src/tools/wasm-opt.cpp
+++ b/src/tools/wasm-opt.cpp
@@ -217,6 +217,7 @@ int main(int argc, const char* argv[]) {
options.parse(argc, argv);
Module wasm;
+ options.applyFeatures(wasm);
BYN_TRACE("reading...\n");
@@ -259,8 +260,6 @@ int main(int argc, const char* argv[]) {
"request for silly amounts of memory)";
}
- options.applyFeatures(wasm);
-
if (options.passOptions.validate) {
if (!WasmValidator().validate(wasm)) {
exitOnInvalidWasm("error validating input");
@@ -268,7 +267,6 @@ int main(int argc, const char* argv[]) {
}
}
if (translateToFuzz) {
- options.applyFeatures(wasm);
TranslateToFuzzReader reader(wasm, options.extra["infile"]);
if (fuzzPasses) {
reader.pickPasses(options);