PROMETHIA-27 opened issue #7684:
Feature
Add a check that a function signature matches its declared signature. For example in the following code:
let mut main_sig = module.make_signature(); main_sig.returns = vec![AbiParam::new(types::I32)]; let main_id = module .declare_function("main", cranelift_module::Linkage::Export, &main_sig) .unwrap(); let mut main = Function::new(); main.signature = main_sig;
It is very easy to forget to add the
ctx.func.signature = main_sig;
line which can cause confusing verifier errors such asarguments of return must match function signature
, which actively makes it harder to identify the error.Benefit
This makes it easier to learn to use cranelift and easier to debug a class of errors.
Implementation
I think this would likely end up being put somewhere other than the verifier, as I believe the verifier likely doesn't have sufficient information to check this. Maybe in the module API somewhere?
Alternatives
It also seems viable to change the API somehow such that a signature is only required once per function. Perhaps something like this:
let mut main_sig = module.make_signature(); main_sig.returns = vec![AbiParam::new(types::I32)]; let (main_id, main) = module .declare_function("main", cranelift_module::Linkage::Export, main_sig) .unwrap();
Having
.declare_function()
construct and return aFunction
with the given signature.
Last updated: Dec 23 2024 at 12:05 UTC