binaryen icon indicating copy to clipboard operation
binaryen copied to clipboard

Flatten does not handle `BrOn`.

Open redianthus opened this issue 1 year ago • 3 comments

Hi,

When running Binaryen with -O4 I get the following assertion failure:

$ wasm-opt --all-features a.out.wasm -O4 -o tmp.wasm
wasm-opt: ~/dev/cpp/binaryen/src/ir/block-utils.h:54: wasm::Expression* wasm::BlockUtils::simplifyToContents(wasm::Block*, T*, bool) [with T = wasm::Vacuum]: Assertion `block->type.isConcrete() && singleton->type == Type::unreachable' failed.
zsh: IOT instruction  wasm-opt --all-features a.out.wasm -O4

I'm on a recent version:

$ wasm-opt --version
wasm-opt version 119 (version_119-55-g7e1413902)

Running with -O3 does not give an error:

$ wasm-opt --all-features a.out.wasm -O3 -o tmp.wasm
$ ls | grep tmp
tmp.wasm

The source file is attached. I only have the binary sorry. I uploaded it as a .jpeg because otherwise GitHub won't let me... renaming it should be enough: file.jpeg

redianthus avatar Oct 07 '24 15:10 redianthus

I can't seem to download that. Try uploading it in a zip (or tar.gz or such), that is the usual workaround for this github issue.

kripken avatar Oct 07 '24 16:10 kripken

Here you are: archive.zip

redianthus avatar Oct 07 '24 16:10 redianthus

Thanks. It looks like this is hitting a limitation of the Flatten pass which runs in -O4. It does not yet handle arbitrary branching instructions like BrOn. Unfortunately it also emits a confusing error message about that, which we should fix.

For now, if you are using anything more than MVP wasm instructions, -O4 and Flatten won't work, sorry about that.

kripken avatar Oct 07 '24 19:10 kripken