Implement a first-class error for reexported component functions (#4348)
Currently I don't know how we can reasonably implement this. Given all the signatures of how we call functions and how functions are called on the host there's no real feasible way that I know of to hook these two up "seamlessly". This means that a component which reexports an imported function can't be run in Wasmtime. One of the main reasons for this is that when calling a component function Wasmtime wants to lower arguments first and then have them lifted when the host is called. With a reexport though there's not actually anything to lower into so we'd sort of need something similar to a table on the side or maybe a linear memory and that seems like it'd get quite complicated quite quickly for not really all that much benefit. As-such for now this simply returns a first-class error (rather than the current panic) in situations like this.
This commit is contained in:
@@ -141,7 +141,9 @@ pub(super) fn run(
|
|||||||
ComponentFuncDef::Lifted { ty, func, options } => {
|
ComponentFuncDef::Lifted { ty, func, options } => {
|
||||||
Export::LiftedFunction { ty, func, options }
|
Export::LiftedFunction { ty, func, options }
|
||||||
}
|
}
|
||||||
ComponentFuncDef::Import(_) => unimplemented!("reexporting a function import"),
|
ComponentFuncDef::Import(_) => {
|
||||||
|
bail!("component export `{name}` is a reexport of an imported function which is not implemented")
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
ComponentItemDef::Instance(_) => unimplemented!("exporting an instance to the host"),
|
ComponentItemDef::Instance(_) => unimplemented!("exporting an instance to the host"),
|
||||||
|
|||||||
5
tests/misc_testsuite/component-model/import.wast
Normal file
5
tests/misc_testsuite/component-model/import.wast
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
(assert_invalid
|
||||||
|
(component
|
||||||
|
(import "host-return-two" (func $f (result u32)))
|
||||||
|
(export "x" (func $f)))
|
||||||
|
"component export `x` is a reexport of an imported function which is not implemented")
|
||||||
Reference in New Issue
Block a user