From 1a0530da9c0217e7118965aeb4ee1f59f68df73c Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 24 Jan 2020 11:28:18 -0800 Subject: Handle indirect calls in CallGraphPropertyAnalysis (#2624) We ignored them, which is a bad default, as typically they imply we can call anything in the table (and the table might change). Instead, notice indirect calls during traversal, and force the user to decide whether to ignore them or not. This was only an issue in PostEmscripten because the other user, Asyncify, already had indirect call analysis because it needed it for other things. Fixes a bug uncovered by #2619 and fixes the current binaryen roll. --- src/passes/PostEmscripten.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/passes/PostEmscripten.cpp') diff --git a/src/passes/PostEmscripten.cpp b/src/passes/PostEmscripten.cpp index e6eeb8e2a..ccf985c50 100644 --- a/src/passes/PostEmscripten.cpp +++ b/src/passes/PostEmscripten.cpp @@ -154,9 +154,11 @@ struct PostEmscripten : public Pass { } }); + // Assume an indirect call might throw. analyzer.propagateBack([](const Info& info) { return info.canThrow; }, [](const Info& info) { return true; }, - [](Info& info) { info.canThrow = true; }); + [](Info& info) { info.canThrow = true; }, + analyzer.IndirectCallsHaveProperty); // Apply the information. struct OptimizeInvokes : public WalkerPass> { -- cgit v1.2.3