binaryen icon indicating copy to clipboard operation
binaryen copied to clipboard

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

Open yamt opened this issue 6 months ago • 2 comments

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
  )
)

yamt avatar Feb 05 '24 12:02 yamt

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?

aheejin avatar Feb 05 '24 22:02 aheejin

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.

yamt avatar Feb 06 '24 00:02 yamt