bytecodealliance / bytecodealliance/wizer

Allow reference types as long as not used by the initialization function?

Open
#98 8 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
1.1k
Forks
64
PR merge metrics
No merged PRs in 30d

Description

I have a WASM module that uses reference types, but the initialization function (some pure precomputation) doesn't use them. Currently, wizer categorically fails with
```
Error: reference types support is not enabled (at offset 0x31ef)
```
However, when I apply this patch
```diff
diff --git a/src/lib.rs b/src/lib.rs
index f2ceb94..7f5adc9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -623,7 +623,7 @@ impl Wizer {
config.wasm_simd(self.wasm_simd.unwrap_or(DEFAULT_WASM_SIMD));

// Proposals that we should add support for.
- config.wasm_reference_types(false);
+ config.wasm_reference_types(true);
config.wasm_threads(false);

Ok(config)
@@ -642,7 +642,7 @@ impl Wizer {
multi_value: self.wasm_multi_value.unwrap_or(DEFAULT_WASM_MULTI_VALUE),

// Proposals that we should add support for.
- reference_types: false,
+ reference_types: true,
simd: self.wasm_simd.unwrap_or(DEFAULT_WASM_SIMD),
threads: false,
tail_call: false,
```
everything works fine, both initialization and later usage of the WASM module (including reference types).

Would it make sense to allow reference types a priori, and instead error when instructions related to reference types are encountered during initialization? I could take a stab at a PR if this makes sense.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.