HomePhabricator

[WebAssembly] Fix bugs in rethrow depth counting and InstPrinter

Description

[WebAssembly] Fix bugs in rethrow depth counting and InstPrinter

Summary:
EH stack depth is incremented at try and decremented at catch. When
there are more than two catch instructions for a try instruction, we
shouldn't count non-first catches when calculating EH stack depths.

This patch fixes two bugs:

  • CFGStackify: Exclude catch_all in the terminate catch pad when calculating EH pad stack, because when we have multiple catches for a try we should count only the first catch instruction when calculating EH pad stack.
  • InstPrinter: The initial intention was also to exclude non-first catches, but it didn't account nested try-catches, so it failed on this case:
try
  try
  catch
  end
catch    <-- (1)
end

In the example, when we are at the catch (1), the last seen EH
instruction is not try but end_try, violating the wrong assumption.

We don't need these after we switch to the second proposal because there
is gonna be only one catch instruction. But anyway before then these
bugfixes are necessary for keep trunk in working state.

Reviewers: dschuff

Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits

Differential Revision: https://reviews.llvm.org/D53819