wasmtime
wasmtime copied to clipboard
Cranelift: 'Could not allocate minimal bundle, but the allocation problem should be possible to solve' panic
.clif
Test Case (reduced)
function u0:0() windows_fastcall {
sig0 = (i64 sret, i64) -> i64 sret fast
fn0 = colocated u0:4 sig0
block0:
v1 = iconst.i64 0
v5 = iconst.i64 0
v6 = call fn0(v5, v1) ; v5 = 0, v1 = 0
return
}
Steps to Reproduce
(bug.clif)
function u0:0(i64, i64) windows_fastcall {
sig0 = (i64 sret, i64) -> i64 sret fast
sig1 = (i64 sret, i64) -> i64 sret fast
fn0 = colocated u0:4 sig0
fn1 = colocated u0:4 sig1
block0(v0: i64, v1: i64):
v2 = iconst.i8 0
store v2, v0 ; v2 = 0
v3 = iadd_imm v0, 4
v4 = call fn0(v3, v1)
v5 = iadd_imm v0, 16
v6 = call fn1(v5, v1)
return
}
(in cranelift directory)
> cargo run --release bugpoint bug.clif x86_64-pc-windows-msvc
Expected Result
The code I provided should be valid or at least possible to compile unless I overlooked something.
Actual Results
thread '<unnamed>' panicked at 'Could not allocate minimal bundle, but the allocation problem should be possible to solve', C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\regalloc2-0.4.1\src\ion\process.rs:1268:17
stack backtrace:
0: std::panicking::begin_panic<str>
at /rustc/95a992a68694d8bf3959bd2c0ac27ce9e9208b59\library\std\src\panicking.rs:616
1: regalloc2::ion::data_structures::Env<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst> > >::process_bundle<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower:
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\regalloc2-0.4.1\src\ion\process.rs:1268
2: regalloc2::ion::data_structures::Env<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst> > >::process_bundles<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\regalloc2-0.4.1\src\ion\process.rs:44
3: regalloc2::ion::data_structures::Env<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst> > >::run<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower::isle::gene
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\regalloc2-0.4.1\src\ion\mod.rs:107
4: regalloc2::ion::run<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst> > >
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\regalloc2-0.4.1\src\ion\mod.rs:127
5: regalloc2::run<cranelift_codegen::machinst::vcode::VCode<enum2$<cranelift_codegen::isa::x64::lower::isle::generated_code::MInst> > >
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\regalloc2-0.4.1\src\lib.rs:1460
6: cranelift_codegen::machinst::compile::compile<cranelift_codegen::isa::x64::X64Backend>
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\cranelift-codegen-0.89.1\src\machinst\compile.rs:41
7: cranelift_codegen::isa::x64::X64Backend::compile_vcode
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\cranelift-codegen-0.89.1\src\isa\x64\mod.rs:58
8: cranelift_codegen::isa::x64::impl$1::compile_function
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\cranelift-codegen-0.89.1\src\isa\x64\mod.rs:69
9: cranelift_codegen::context::Context::compile_stencil
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\cranelift-codegen-0.89.1\src\context.rs:173
10: cranelift_codegen::context::Context::compile
at C:\Users\LENOVO\.cargo\registry\src\github.com-1ecc6299db9ec823\cranelift-codegen-0.89.1\src\context.rs:185
11: middleware::logic::Worker::compile_current_requests
at C:\src\rust\catalyst\subcommands\middleware\src\logic.rs:686
12: middleware::logic::Worker::compile_macros
at C:\src\rust\catalyst\subcommands\middleware\src\logic.rs:614
13: middleware::logic::Worker::compile_module
at C:\src\rust\catalyst\subcommands\middleware\src\logic.rs:591
14: middleware::logic::impl$2::run::closure$0
at C:\src\rust\catalyst\subcommands\middleware\src\logic.rs:535
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Versions and Environment
Cranelift version or commit: 0.90.0
Operating system: Windows
Architecture: x86_64
Seems like removing sret
from return type of imported signatures makes compilation pass, Is sret
supposed to be used with return value or argument is enough?
Using it as argument is enough.
Seems like I was misusing this for a while, nevertheless resulting error is not helpful, Would it be possible to integrate some verification for signatures?
Yeah, I think we should check this in the verifier. Adding a StructReturn case to https://github.com/bytecodealliance/wasmtime/blob/95ecb7e4d440605165a74de607de5389508779be/cranelift/codegen/src/verifier/mod.rs#L1741-L1753 would work I think.