WebAssembly / binaryen

Optimizer and compiler/toolchain library for WebAssembly
Apache License 2.0
7.42k stars 734 forks source link

[EH] --translate-to-new-eh "invalid delegate" #6274

Open yamt opened 7 months ago

yamt commented 7 months ago

iiuc, delegate is allowed to target any type of block. from the overview of the old EH proposal:

delegate can also target catch-less trys or non-try block constructs like blocks or loops, in which case the delegated exception is assumed to propagate to the outer scope and will be caught by the next matching try-catches, or rethrown to the caller if there is no outer try block.

but --translate-to-new-eh complains like [parse exception: exceptionTargetNames not empty - invalid delegate (at 0:48)].

eg.

(module
  (tag)
  (func (export "main")
    block
      try
        throw 0
      delegate 0
    end
  )
)
aheejin commented 7 months ago

This is unrelated to the new --translate-to-new-eh. Parsing of delegate targeting a block has never been supported in Binaryen. Yes it is allowed in the spec, but because our primary producer that generates delegate, LLVM's Wasm backend, does not produce such code, supporting that has not been a priority. And given that we are planning to put more efforts on supporting the new instructions and less on improving support for the old instructions, I'm not sure whether this will be supported in the near future (or more frankly, ever). May I ask which toolchain generated this code, and what's your usage for this?

yamt commented 7 months ago

This is unrelated to the new --translate-to-new-eh. Parsing of delegate targeting a block has never been supported in Binaryen.

ok

Yes it is allowed in the spec, but because our primary producer that generates delegate, LLVM's Wasm backend, does not produce such code, supporting that has not been a priority. And given that we are planning to put more efforts on supporting the new instructions and less on improving support for the old instructions, I'm not sure whether this will be supported in the near future (or more frankly, ever). May I ask which toolchain generated this code, and what's your usage for this?

i'm just experimenting things. i have no real use cases of this construct.