Not planned
Description
It seems that the following code:
#![feature(wasm_abi)]
#[no_mangle]
pub extern "wasm" fn test() {
format!("boom: {}", 0u128);
}
can result in invalid WASM being generated in case it is compiled with lto = true
. I've created a repository with the minimal example that reproduces the issue when built with (tested on rustc 1.56.0-nightly (0035d9dce 2021-08-16)
):
cargo build --target wasm32-unknown-unknown --release
Parsing the generated WASM will produce an error similar to the following:
[parse exception: attempted pop from empty stack / beyond block start boundary at 536 (at 0:536)]
Fatal: error parsing wasm
Using an argument of type u64
or disabling lto
or using the C ABI instead of wasm ABI (which enables LLVM's multivalue feature) works.
Meta
rustc --version --verbose
:
rustc 1.56.0-nightly (0035d9dce 2021-08-16)
binary: rustc
commit-hash: 0035d9dcecee49d1f7349932bfa52c05a6f83641
commit-date: 2021-08-16
host: x86_64-unknown-linux-gnu
release: 1.56.0-nightly
LLVM version: 12.0.1
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
memoryruins commentedon Jul 20, 2022
@rustbot label: +O-wasm +A-abi +A-ffi +A-lto
Jules-Bertholet commentedon Oct 18, 2023
@rustbot label I-unsound
bjorn3 commentedon Dec 16, 2024
extern "wasm"
has been removed. Can't reproduce withkostko commentedon Dec 16, 2024
Yeah as mentioned in the original issue:
If the wasm ABI was removed, then this issue is likely no longer relevant.
nikic commentedon Dec 16, 2024
Right, there should no longer be any way to expose this from Rust anymore. There is an upstream LLVM issue tracking i128 with multi-value here: llvm/llvm-project#98323