Skip to content

bindgen! macro does not respect require_store_data_send: false for guest-exported functions #10677

@florianhartung

Description

@florianhartung

I am storing non-Send data inside a Store<T> in a single-threaded synchronous environment.
Also I am using the wasmtime::component::bindgen! macro to generate bindings for my WIT definition.
Updating the wasmtime dependency from 28.0.0 to 32.0.0 introduces a compilation error because a new Send bound on the store data exists for calling guest-exported functions.

I tried setting require_store_data_send: false and async: false according to the bindgen! documentation, however these seem to only have an impact on the trait bound of the generated add_to_linker_imports_get_host function.

Here is a minimal example for better understanding:

bindgen!({
    inline: "
        package my:inline;
        world my-world {
            export foo: func();
        }
    ",
    async: false,
    require_store_data_send: false,
});

expands to

impl MyWorld {
    ...
    pub fn call_foo<S: wasmtime::AsContextMut>(
        &self,
        mut store: S,
    ) -> wasmtime::Result<()>
    where
        <S as wasmtime::AsContext>::Data: Send,
    { ... }
}

Here there is a <S as wasmtime::AsContext>::Data: Send trait bound, which essentially forbids the use of non-Send store data when calling guest-exposed functions.
This restriction did not exist in v28.0.0 and I do not see a reason why it would be required now.

The change was introduced in this commit in crates/wit-bindgen/src/lib.rs line 3290 (this is the direct link, however the link does not load correctly for me atleast).

My question is: Is this indeed a bug or is there is any other option I've overlooked that allows me to use non-Send store data?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions